Codeforces Round #634 (Div.3)

37762 단어 codeforces
Codeforces Round #634 Div.3
  • A
  • B
  • C
  • D
  • E
  • F

  • A
    제목: 두 자매에게 설탕을 나누어 주는데 베티보다 앨리스의 설탕이 더 필요해요. 몇 가지 분법이 있냐고 물어봐요.
    문제기: 두 가지 경우 설탕의 수량이 3보다 적을 때 조건에 부합되는 분법이 없고 설탕이 3보다 큰 경우 (n-1)/2를 직접 출력하면 된다.
    #include
    
    using namespace std;
    
    int main(){
         
        int t;
        cin>>t;
        while(t--){
         
            int x;
            cin>>x;
            if(x<3)cout<<0<<endl;
            else cout<<(x-1)/2<<endl;
        }
        return 0;
    }
    
    

    B
    제목: 길이가 n인 문자열을 구성하고 길이가 a인 문자열마다 b개의 다른 자모가 있습니다.
    제목: b개의 다른 알파벳을 순환 출력하면 됩니다
    예: abcabcabc
    #include
    
    using namespace std;
    char str[]={
         "abcdefghijklnmopqrstuvwxyz"};
    int main(){
         
        int t;
        cin>>t;
        while(t--){
         
            int n,a,b;
            cin>>n>>a>>b;
            int sum=0;
            for(int i=0;i<n;i++){
         
                cout<<str[i%b];
            }
            cout<<endl;
        }
        return 0;
    }
    
    

    C
    제목: 학생을 두 조로 나누면 첫 번째 조의 모든 학생의 수치가 다르고 두 번째 조의 모든 학생의 수치가 같아야 한다.두 조의 학생 수가 같으니 조의 중학생 수의 최대치를 구해라.
    문제: 같은 수치의 학생의 최대 수량(sum2)과 다른 학생의 최대 수량(sum1)을 기록한 후 상황을 나누어 토론한다.
    1. 만약sum1=sum2라면sum1에sum2가 포함되어 있기 때문에 답은sum1-1을 취해야 한다.
    2. 만약sum1>sum2라면sum2를 답안으로 한다.
    3、sum2>sum1이면sum1을 답안으로 합니다.
    4.sum2가 0이면sum1이 1보다 크지 않으면 답은 1을 취하고 그렇지 않으면 0을 취한다.
    #include
    #include
    #include
    using namespace std;
    const int N=2e5+10;
    int a[N];
    int main(){
         
        int t;
        cin>>t;
        while(t--){
         
            int n;
            cin>>n;
            int sum1=0,sum2=0,x;
            memset(a,0,sizeof(a));
            for(int i=0;i<n;i++){
         
                cin>>x;
                a[x]++;
                if(a[x]==1) sum1++;
                else if(a[x]>1) sum2=max(sum2,a[x]);
            }
            int ans=0;
            if(n==1) ans=0;
            else if(sum1>1&&sum2==0) ans=1;
            else if(sum1>sum2) ans=sum2;
            else if(sum1==sum2) ans=sum1-1;
            else if(sum1<sum2) ans=sum1;
            cout<<ans<<endl;
        }
        return 0;
    }
    
    

    D
    제목: 9x9의 수독방진을 제시하려면 반수독을 출력해야 한다. 즉, 줄마다 3x3방격(제목은 그려져 있다)이 같은 숫자가 있어야 한다.
    문제: 동업자가 아닌 9개의 서로 다른 열의 3x3 칸의 수를 찾아서 그들의 수치를 바꾸면 된다.예를 들어 첫 번째 코드 (처음에 쓴...) 는 사실 독에서 하나의 수를 선택하고 그 값을 바꾸면 된다.예를 들어 모든 1을 2 (두 번째 코드) 로 바꾸다.수독의 방진에서 같은 수는 동업자가 아닌 다른 열의 다른 3x3 방진에 있기 때문이다.
    #include
    #include
    #include
    using namespace std;
    const int N=2e5+10;
    char a[11][11];
    int main(){
         
        int t;
        cin>>t;
        while(t--){
         
            for(int i=1;i<=9;i++)
                for(int j=1;j<=9;j++)
                    cin>>a[i][j];
            for(int i=1,j=1;i<=9;i+=3,j++){
         
                //cout<
                if(a[i][j]!='1')a[i][j]='1';
                else a[i][j]='2';
                if(a[i+1][j+3]!='1')a[i+1][j+3]='1';
                else a[i+1][j+3]='2';
                if(a[i+2][j+6]!='1')a[i+2][j+6]='1';
                else a[i+2][j+6]='2';
                //out<}
    for(int i=1;i<=9;i++){
    for(int j=1;j<=9;j++){
    cout<<a[i][j];
    }
    cout<<endl;
    }
    }
    return 0;
    }
    #include
    #include
    #include
    using namespace std;
    const int N=2e5+10;
    char a[11][11];
    int main(){
         
        int t;
        cin>>t;
        while(t--){
         
            for(int i=1;i<=9;i++)
                for(int j=1;j<=9;j++)
                    cin>>a[i][j];
            for(int i=1;i<=9;i++){
         
                for(int j=1;j<=9;j++){
         
                    if(a[i][j]=='1') cout<<'2';
                    else cout<<a[i][j];
                }
                cout<<endl;
            }
        }
        return 0;
    }
    
    

    E
    큰 놈의 코드를 참고했다.https://www.cnblogs.com/heyuhhh/p/12699998.html제목: 제목에 맞는 최장자 서열을 찾아 출력의 최장 길이를 찾습니다.
    #include
    #include
    using namespace std;
    const int N=2e5+10,M=205;
    int a[N],f[N][M];
    int main(){
         
        ios::sync_with_stdio(false);
        cin.tie(0);cout.tie(0);
        int t; cin>>t;
        while(t--){
         
            int n;
            cin>>n;
            for(int i=1;i<=n;i++) cin>>a[i];
            vector<vector<int>> at(M);
            //     vector,     205
            for(int j=1;j<=200;j++){
         
                for(int i=1;i<=n;i++){
         
                    f[i][j]=f[i-1][j]+(a[i]==j);
                    //cout<
                    //      i   j     
                    if(a[i]==j){
         
                        //cout<
                        at[j].push_back(i);
                        // 1 200        
                    }
                }
            }
            int ans=0;
            for(int i=1;i<=200;i++){
         
                // 1       
                for(int l=0;l<at[i].size();l++){
         
                    int r=(int)at[i].size()-1-l;//   
                    if(l>r)break;// l>r     
                    if(l==r) ans=max(ans,(int)at[i].size());
                    //           
                    else{
         
                        int mmax=0;
                        for(int j=1;j<=200;j++){
         
                            mmax = max(mmax, f[at[i][r] - 1][j] - f[at[i][l]][j]);
                        }
                        ans=max(ans,2*(l+1)+mmax);
                    }
                }
            }
            cout<<ans<<'
    '
    ; } return 0; }

    F

    좋은 웹페이지 즐겨찾기