题解Codeforces Round #597 (Div. 2)

Posted kylin-xy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了题解Codeforces Round #597 (Div. 2)相关的知识,希望对你有一定的参考价值。

A:送分,裸的gcd。

技术图片
 1 #include<stdio.h> 
 2 #define il inline
 3 #define it register int
 4 int T,a,b,d; 
 5 il void  gcd(int a,int b){
 6     if(!b){d=a;return;}
 7     gcd(b,a%b);
 8 }
 9 il void fr(int &num){
10     num=0;char c=getchar();int p=1;
11     while(c<0||c>9) c==-?p=-1,c=getchar():c=getchar();
12     while(c>=0&&c<=9) num=num*10+c-0,c=getchar();
13     num*=p;
14 }   
15 int main(){
16     fr(T);
17     while(T--)
18         fr(a),fr(b),gcd(a,b),d==1?puts("Finite"):puts("Infinite");  
19     return 0;
20 }
View Code

B:送分,直接把能用的都用掉就行。

技术图片
 1 #include<stdio.h>
 2 #include<string.h>
 3 #define it register int
 4 #define il inline
 5 using namespace std;
 6 const int N=100005;
 7 int T,n,a,b,c,ans;
 8 char s[N],o[N]; 
 9 il void fr(int &num){
10     num=0;char c=getchar();int p=1;
11     while(c<0||c>9) c==-?p=-1,c=getchar():c=getchar();
12     while(c>=0&&c<=9) num=num*10+c-0,c=getchar();
13     num*=p;
14 }   
15 int main(){
16     fr(T);
17     while(T--){
18         scanf("%d%d%d%d%s",&n,&a,&b,&c,s+1),ans=n;
19         for(it i=1;i<=n;++i){
20             if(s[i]==S&&a) --a,o[i]=R;
21             else if(s[i]==R&&b) --b,o[i]=P;
22             else if(s[i]==P&&c) --c,o[i]=S;
23             else o[i]=K;
24         } 
25         for(it i=1;i<=n;++i)
26             if(o[i]==K){
27                 if(a) o[i]=R,--a;
28                 else if(b) o[i]=P,--b;
29                 else if(c) o[i]=S,--c;
30                 --ans;
31             }
32         if(ans<((n+1)>>1)) puts("NO");
33         else{
34             puts("YES");
35             for(it i=1;i<=n;++i) putchar(o[i]);putchar(
);
36         }
37     } 
38     return 0;
39 }
View Code

C:送分,手玩一下发现每个块的贡献是斐波那契数列。而且好像这题之前CF出过的。

技术图片
 1 #include<stdio.h>
 2 #include<string.h>
 3 #define it register int
 4 #define il inline
 5 using namespace std; 
 6 const int N=1000005;
 7 const long long mod=1e9+7;
 8 char s[N];
 9 long long f[N],ans=1;
10 int n; 
11 il void fr(int &num){
12     num=0;char c=getchar();int p=1;
13     while(c<0||c>9) c==-?p=-1,c=getchar():c=getchar();
14     while(c>=0&&c<=9) num=num*10+c-0,c=getchar();
15     num*=p;
16 }   
17 int main(){
18     scanf("%s",s+1),n=strlen(s+1);
19     f[0]=f[1]=1,f[2]=2;for(it i=3;i<=n;++i) f[i]=(f[i-1]+f[i-2])%mod;
20     for(it i=1;i<=n;++i){
21         if(s[i]==u||s[i]==n){
22             it j;
23             for(j=i;s[j]==s[i]&&j<=n;++j);
24             ans=1ll*ans*f[j-i]%mod,i=j-1;
25         }
26         if(s[i]==m||s[i]==w){
27             putchar(0);return 0;
28         }
29     }
30     printf("%lld",ans);  
31     return 0;
32 }
View Code

D:最小生成树,预处理每一对(i,j)的连边就行。n个点连通就跳出不做。而且这题据说是USACO某道原题。。

 

E:不会。

F:数位dp。我不会告诉你我离正解只差一个特判的!

 

我还是菜啊,怎么大家纷纷切E,我就E不会怎么搞。。

而且。。用血的教训告诉大家:

1.数位dp,要判断l=0的情况,不可以盲减一。

2.交题目的时候手速要快,不要犹豫!否则你就是交不上去的那个人……

 

由于还在system testing 先放上我没有fst的几题的代码。

以上是关于题解Codeforces Round #597 (Div. 2)的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces Round #597 (Div. 2) D. Shichikuji and Power Grid

codeforces Codeforces Round #597 (Div. 2) D. Shichikuji and Power Grid

Codeforces Round #597 (Div. 2) A. Good ol' Numbers Coloring

Codeforces Round #597 (Div. 2) E. Hyakugoku and Ladders 概率dp

Codeforces Round #597 (Div. 2)D(最小生成树)

Codeforces Round #597 (Div. 2) C dp