답안 #639685

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
639685 2022-09-11T04:03:35 Z ningia203 Igra (COCI17_igra) C++14
100 / 100
1 ms 340 KB
#include<bits/stdc++.h>
using namespace std;

long n,F[5007],D[10][10],cnt;
string s,t,k;
bool vs[10007];
int main(){
    ios::sync_with_stdio(0);cin.tie(0);
    cin>>n;
    cin>>s;
    cin>>t;
    for(long i=0; i<n; i++){
        if(s[i]=='a') D[1][1]+=1;
        else if(s[i]=='b') D[1][2]+=1;
        else D[1][3]+=1;
    }
    for(long i=0; i<n; i++){
        if(t[i]=='a') D[2][1]+=1;
        else if(t[i]=='b') D[2][2]+=1;
        else D[2][3]+=1;
    }
    D[3][1]=D[2][1];
    D[3][2]=D[2][2];
    D[3][3]=D[2][3];
    //cout<<s<<'\n';
    cnt=0;
    for(long i=n-1; i>=0; i--){
        if(cnt>=D[1][3]) break;
        if(t[i]=='a'){
            if(D[1][2]<=D[2][3]+D[2][1]-1){
                cnt++;
                s[i]='c';
                vs[i]=true;
                D[2][1]-=1;
            }
        }
        if(t[i]=='b'){
            if(D[1][1]<=D[2][3]+D[2][2]-1){
                cnt++;
                s[i]='c';
                D[2][2]-=1;
                vs[i]=true;
            }
        }
    }
    //cout<<s<<'\n';
    cnt=0;
    for(long i=n-1; i>=0; i--){
        if(cnt>=D[1][2]) break;
        if(t[i]=='a' && !vs[i]){
            cnt++;
            D[2][1]-=1;
            s[i]='b';
            vs[i]=true;
        }
    }
    for(long i=n-1; i>=0; i--){
         if(cnt>=D[1][2]) break;
        if(t[i]=='c' && !vs[i]){
            if(D[1][1]<=D[2][2]+D[2][3]-1){
                cnt++;
                s[i]='b';
                D[2][3]-=1;
                vs[i]=true;
            }
        }
    }

    for(long i=0; i<n; i++) if(!vs[i]) s[i]='a';
     cnt=0;
     k=s;
     for(long i=0; i<n; i++) vs[i]=false;
    for(long i=0; i<n; i++){
        if(cnt>=D[1][1]) break;
        if(t[i]=='c'){
            if(D[1][2]<=D[3][3]+D[3][1]-1){
                cnt++;
                k[i]='a';
                vs[i]=true;
                D[3][3]-=1;
            }
        }
        if(t[i]=='b'){
            if(D[1][3]<=D[3][1]+D[3][2]-1){
                cnt++;
                k[i]='a';
                D[3][2]-=1;
                vs[i]=true;
            }
        }
    }
    //cout<<s<<'\n';
    cnt=0;
    for(long i=0; i<n; i++){
        if(cnt>=D[1][2]) break;
        if(t[i]=='c' && !vs[i]){
            cnt++;
            D[2][3]-=1;
            k[i]='b';
            vs[i]=true;
        }
        if(t[i]=='a' && !vs[i]){
            if(D[1][3]<=D[3][1]+D[3][2]-1){
                cnt++;
                k[i]='b';
                D[3][1]-=1;
                vs[i]=true;
            }
        }
    }
    //cout<<s<<'\n';
    for(long i=0; i<n; i++) if(!vs[i]) k[i]='c';
    cout<<min(s,k);
    return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 1 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
7 Correct 0 ms 212 KB Output is correct
8 Correct 0 ms 212 KB Output is correct
9 Correct 0 ms 340 KB Output is correct
10 Correct 1 ms 340 KB Output is correct