码迷,mamicode.com
首页 > 其他好文 > 详细

2018提高组训训练22

时间:2018-09-05 23:50:36      阅读:292      评论:0      收藏:0      [点我收藏+]

标签:nbsp   sub   main   col   tle   地板   不能   方案   for   

估计得分: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\n",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\n",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\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;
}

 

 

 

2018提高组训训练22

标签:nbsp   sub   main   col   tle   地板   不能   方案   for   

原文地址:https://www.cnblogs.com/lmjer/p/9595011.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!