:配信ポイント、裸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(INT&NUM){
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(INT&NUM){
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 }
D:最小生成树,预处理每一对(i,j)的连边就行。n个点连通就跳出不做。而且这题据说是USACO某道原题。。
E:不会。
F:数位dp。我不会告诉你我离正解只差一个特判的!
我还是菜啊,怎么大家纷纷切E,我就E不会怎么搞。。
而且。。用血的教训告诉大家:
1.数位dp,要判断l=0的情况,不可以盲减一。
2.交题目的时候手速要快,不要犹豫!否则你就是交不上去的那个人……
由于还在system testing 先放上我没有fst的几题的代码。