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的主要内容,如果未能解决你的问题,请参考以下文章

蓝桥杯单片机组训练导航

蓝桥杯单片机组训练导航

训练您的模型并提高召回率/精度的最佳方法是啥?

2021.10.22--《21-22-1蓝桥训练3》

2018-2019赛季多校联合新生训练赛第八场(2018/12/22)补题题解

22.java方法的定义