2018提高组训训练22
Posted lmjer
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2018提高组训训练22相关的知识,希望对你有一定的参考价值。
估计得分:100+100+100+0+0
实际得分:100+100+100+10+0
T1
题目描述:
在所有的N位数中,有多少个数中有偶数个数字3?
输入格式:
读入一个数N
输出格式:
由于结果可能很大,你只需要输出这个答案mod 12345的值。
样例输入:
2
样例输出:
73
数据范围:
1<=N<=1000
题解:这道题是一道递推提
首先我们观察题目,发现,一个数有偶数个3有两种情况
设o[n]表示有偶数个三,j[n]表示有奇数个三
那么o[n+1]=o[n]*9+j[n]*1,
j[n+1]=o[n]*1+j[n]*9
也就是说,n+1有偶数个三,等于他的少一位数偶数个3乘以9,就是除了再来一个三以外都是成立的
另外一种情况相同
但是要注意,当到最高位时要*8因为最高位不能有前导0
代码:
#include<cstdio> #include<algorithm> using namespace std; const int maxn=2000; const int mod=12345; int o[maxn],j[maxn]; int main(){ int n; o[1]=9; j[1]=1; scanf("%d",&n); for (int i=2;i<n;i++){ o[i]=(o[i-1]*9%mod+j[i-1]%mod)%mod; j[i]=(o[i-1]%mod+j[i-1]*9%mod)%mod; } o[n]=(o[n-1]*8%mod+j[n-1]%mod)%mod; printf("%d ",o[n]); return 0; }
T2
题目描述:
用1 x 1和2 x 2的磁砖不重叠地铺满N x 3的地板,共有多少种方案?
输入格式:
读入一个数N。输出格式:
由于结果可能很大,你只需要输出这个答案mod 12345的值。样例输入:
2
样例输出:
3
数据范围:
1<=N<=1000时间限制:
1000空间限制:
65536题解:
代码:
#include<cstdio> #include<algorithm> using namespace std; int a[1000]; const int mod=12345; int main(){ a[1]=1; a[2]=3; int n; scanf("%d",&n); if(n==1) { printf("1"); return 0; } if(n==2){ printf("3"); return 0; } for (int i=3;i<=n;i++){ a[i]=(a[i-1]%mod+2*a[i-2]%mod)%mod; } printf("%d ",a[n]); return 0; }
T3
题目描述:
从原点出发,一步只能向右走、向上走或向左走。恰好走N步且不经过已走的点共有多少种走法?
输入格式:
读入一个数N
输出格式:
由于结果可能很大,你只需要输出这个答案mod 12345的值。
样例输入:
2
样例输出:
7
数据范围:
1<=N<=1000
时间限制:
1000题解:
代码:
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int mod=12345; int dp[2000][5]; int main(){ int n; dp[1][1]=dp[1][2]=dp[1][3]=1; scanf("%d",&n); if(n==1) {printf("%d ",3);return 0;} for (int i=2;i<=n;i++){ dp[i][1]=(dp[i-1][1]%mod+dp[i-1][2]%mod+dp[i-1][3]%mod)%mod; dp[i][2]=(dp[i-1][1]%mod+dp[i-1][3]%mod)%mod; dp[i][3]=(dp[i-1][1]%mod+dp[i-1][2]%mod)%mod; } printf("%d",(dp[n][1]%mod+dp[n][2]%mod+dp[n][3]%mod)%mod); return 0; }
以上是关于2018提高组训训练22的主要内容,如果未能解决你的问题,请参考以下文章