标签:nbsp sub main col tle 地板 不能 方案 for
估计得分:100+100+100+0+0
实际得分:100+100+100+10+0
T1
题目描述:
在所有的N位数中,有多少个数中有偶数个数字3?
2
73
首先我们观察题目,发现,一个数有偶数个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\n",o[n]); return 0; }
T2
题目描述:
用1 x 1和2 x 2的磁砖不重叠地铺满N x 3的地板,共有多少种方案?
2
3
#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\n",a[n]); return 0; }
T3
题目描述:
从原点出发,一步只能向右走、向上走或向左走。恰好走N步且不经过已走的点共有多少种走法?
2
7
#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\n",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; }
标签:nbsp sub main col tle 地板 不能 方案 for
原文地址:https://www.cnblogs.com/lmjer/p/9595011.html