codeforces 589 DIV2 ABC

codeforces 589 DIV2

A:良い老いた数字Coloringhttp://codeforces.com/contest/1245/problem/A

試料観察は、GCDの約$は(a、b)は\のNEQ 1 $時間は、Aの次のテスト無限であることがわかりました サンプル指向プログラミング

意識の時間CFの流れに加えて、そのレースの2分はそれほど重要ではないことをプログラムするべきではありません

B:制限付きRPS

適度に複雑なシミュレーションの質問は、私はWAを書くための時間を持って、3つの戦略は、に変更していない、と後で出力がより多様になる例それぞれの神の広大な出力の助けを借りてつながらない文字と終止文字の配列です見つかりましたたくさんの、私は本当に最初に会ったこの魔法のバグは、それを記録します。

#include <bits/stdc++.h>
using namespace std;
char l[10001],out[10001];
int main(){
    //freopen("test.in","r",stdin);
    //freopen("test.out","w",stdout);
    int t,a,b,c,n,ans;
    cin>>t;
    while(t--){
        cin>>n;
        cin>>a>>b>>c;
        cin>>l;
        for(int i=0;i<n;i++){
            out[i]='0';
        }
        ans=0;
        
        for(int i=0;i<n;i++){
            if(l[i]=='R' && b>0){b--;ans++;out[i]='P';}
            if(l[i]=='P' && c>0){c--;ans++;out[i]='S';}
            if(l[i]=='S' && a>0){a--;ans++;out[i]='R';}
        }
        //cout<<out<<endl;
        for(int i=0;i<n;i++){
            if(out[i]=='0'){
                if(l[i]=='R')
                    if(a>0){a--;out[i]='R';}
                    else {c--;out[i]='S';}
                
                if(l[i]=='S')
                    if(c>0){c--;out[i]='S';}
                    else {b--;out[i]='P';}
                
                if(l[i]=='P')
                    if(b>0){b--;out[i]='P';}
                    else {a--;out[i]='R';}
                
            }
        }       
        
        if(n%2==0 && ans>=(n/2)){
            cout<<"YES"<<endl;
            for(int i=0;i<n;i++)printf("%c",out[i]);
            cout<<endl;
        }
        else if(n%2==1 && ans>(n/2)){
            cout<<"YES"<<endl;
            for(int i=0;i<n;i++)printf("%c",out[i]);
            cout<<endl;
        }
        else cout<<"NO"<<endl;
    }
return 0;
}
        

これは、要約アルゴリズムの問​​題が、時間のWA目の前の下ではないか、だけでなく、ために質問の前処理クレイジー府内の文字テーブルの暴力をDPそれ秦皇島を考え、入力と出力の事のプリああああ一種として、次のことに注意してください。

C コンスタンツェのマシン

質問の意味:

ルール1:文字列mがNN書かれている、書かれたUUワット

ルール1から変換された文字列の後に元の文字列、元の文字列を入力し、どのように多くの可能性を尋ねました。

考えます:

1.文字列が与えられたMまたはWがある場合は、エラーである、ANS = 0

2.ブロック

Uにおける(2以上)の連続/ Nの連続するサブストリングを分離し、簡単$ L1、L2、L3 ... LM $のそれぞれの長さは、各サブ文字列を検索します

ans[li]=ans[li-1]-ans[i-2];

フィボナッチああ、これはです!さて、この場合は解決されます

#include<bits/stdc++.h>
using namespace std;
const long long mod = 1000000007;
long long fib[201111],pre[2000011];
char a[200011];
int main(){
    fib[0]=1;fib[1]=1;
    for(int i=2;i<100212;i++){fib[i]=(fib[i-1]+fib[i-2])%mod;}
    cin>>a;
    long long len=strlen(a),pos=0,num=0,ans=1;
    for(int i=0;i<len;i++)if(a[i]=='w' || a[i]=='m'){cout<<'0'<<endl;return 0;}
    while(pos<len){
        if(a[pos]=='u' && a[pos+1]=='u'){
            while(a[pos]=='u' && pos<len){
                pos++;
                pre[num]++;
            }
            num++;
        }
        else if(a[pos]=='n' && a[pos+1]=='n'){
            while(a[pos]=='n' && pos<len){
                pos++;
                pre[num]++;
            }
            num++;
        }
        else pos++;
    }
    if(num==0){cout<<1<<endl;return 0;}
    for(int i=0;i<num;i++)ans = (long long) ans * fib[ pre[i]] % mod;
    cout<<ans<<endl;
return 0;
}

おすすめ

転載: www.cnblogs.com/dpsama/p/11787988.html