問題Codeforcesラウンド#597(本部2)へのソリューション

:配信ポイント、裸GCD。

1の#include <stdio.hの> 
 2  の#define ILインライン
 3  の#defineは整数レジスタ
 4  INT T、A、B、Dと、 
5、ILの空隙   GCD(INT A、INT B){
 6      場合 {D =(B!)。返す;}
 7      GCD(B、%のB)。
8  }
 9、ILの空隙 FR(INTNUM){
 10      NUM = 0チャー C = GETCHAR()。int型のp = 1 ;
11      しばらく(C < ' 0 ' || C> ' 9 ')C == ' - '?P = - 1、C = GETCHAR():C = GETCHAR()。
12      一方、(C> = ' 0 ' && C <= ' 9 ')NUM = NUM * 10 + C- ' 0 '、C = GETCHAR()。
13      NUM * = P。
14  }   
 15  INT メイン(){
 16個の     FR(T)。
17      一方(T-- 18          FR(A)、FR(b)は、GCD(a、b)は、1?プット(" 有限"):プット(" 無限" )。  
19      リターン 0 ;
20 }
コードの表示

B:直接ラインに費やした全ての利用への配信ポイント。

1の#include <stdio.hの>
 2の#include < ストリング・H>
 3  の#defineがINTレジスタ
 4  の#define ILインライン
 5  使って 名前空間STDを、
6  のconst  int型 N = 100005 7  INT T、N、A、B、C、ANS。
8  チャーS [N]、[N] O。 
9、ILの空隙 FR(INTNUM){
 10      NUM = 0チャー C = GETCHAR()。int型のp = 1 ;
11      しばらく(C < ' 0 ' || C> ' 9 ')C == ' - '?P = - 1、C = GETCHAR():C = GETCHAR()。
12      一方、(C> = ' 0 ' && C <= ' 9 ')NUM = NUM * 10 + C- ' 0 '、C = GETCHAR()。
13      NUM * = P。
14  }   
 15  INT メイン(){
 16個の     FR(T)。
17      一方(T-- ){
 18          のscanf("%D%D%D%D%S "、&​​N、&、&B、&C、+ S 1)、ANS = N;
 19          のために(それi = 1 ; iが<= N; ++ I){
 20              であれば(S [I] == ' S ' && A)-A-、O [I] = ' R ' ;
 21              そう なら(S [I] == ' R ' && B)-B-、O [I] = ' P ' ;
 22              そう なら(S [I] == ' P ' && C)[i]は= O、-C、' S ' 23の             他の句 [I] = O ' K" ;
24          } 
 25          のために(それi = 1 ; iが<= N; ++ I)
 26              であれば([I] == O ' K ' ){
 27                  であれば、[I] = O(A)' R '、 - A ;
28                  他の 場合(B)O [I] = ' P '、 - B。
29                  他の 場合 [i]は= O(C)' S ' - 、ステップと、c
30                  - ANS;
31              }
 32          であれば(ANS <((N +1)>> 1))(置く" NO " );
33          {
 34              プット(" YES " );
35              のために(これはI = 1 ; I <= N; ++ I)のputchar(O [I]);のputchar(' \ nを' );
36          }
 37      } 
 38      リターン 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 }
View Code

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

 

E:不会。

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

 

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

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

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

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

 

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

おすすめ

転載: www.cnblogs.com/Kylin-xy/p/11780408.html