P3795 钟氏映射
题目背景
2233年,CSSYZ学校的数学老师兼数学竞赛顾问钟JG已经2200+岁啦!
为了庆生,他或她给广大人民群众出了道题。
题目描述
设集合N=M={x∣x∈N+,x≤k,k∈N+}N=M=\left\{x|x\in N_+,x\leq k,k\in N_+\right\}N=M={x∣x∈N+,x≤k,k∈N+}
设fff为NNN到MMM的映射。
求满足:
f[f(x)]=xf[f(x)]=xf[f(x)]=x的不同的映射fff的个数,由于答案较大,输出答案对142333331423333314233333取余的数即可。
输入格式
输入一个正整数kkk
输出格式
输出满足f[f(x)]=xf[f(x)]=xf[f(x)]=x的不同的映射fff的个数对142333331423333314233333取余得到的数。
输入输出样例 #1
输入 #1
3
输出 #1
4
说明/提示
四个映射分别为:
| f(1) | f(2) | f(3) |
|---|---|---|
| 1 | 2 | 3 |
| 1 | 3 | 2 |
| 2 | 1 | 3 |
| 3 | 2 | 1 |
数据范围:
对于20%的数据,1≤k≤91\leq k\leq 91≤k≤9
对于其它的80%的数据,1≤k≤1071\leq k\leq 10^71≤k≤107
内存20MB…(一开始开1MB把自己坑了)
C++实现
#include<cstdio>
typedef long long ll;
const int mod=14233333;
ll a=2,b=1,now,n;
signed main(){
scanf("%d",&n);
if(n==1){//特判1
puts("1");
return 0;
}
if(n==2){
puts("2");
return 0;
}
for(ll i=3;i<=n;++i){
now=b*(i-1)+a;
now%=mod;
b=a;
a=now;
}
printf("%lld",a);
return 0;
}

后续
接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容
226

被折叠的 条评论
为什么被折叠?



