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 }
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(‘\n‘); 36 } 37 } 38 return 0; 39 }
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 }
D:最小生成树,预处理每一对(i,j)的连边就行。n个点连通就跳出不做。而且这题据说是USACO某道原题。。
E:不会。
F:数位dp。我不会告诉你我离正解只差一个特判的!
我还是菜啊,怎么大家纷纷切E,我就E不会怎么搞。。
而且。。用血的教训告诉大家:
1.数位dp,要判断l=0的情况,不可以盲减一。
2.交题目的时候手速要快,不要犹豫!否则你就是交不上去的那个人……
由于还在system testing 先放上我没有fst的几题的代码。
原文地址:https://www.cnblogs.com/Kylin-xy/p/11780408.html
时间: 2024-11-07 17:34:37