zoukankan      html  css  js  c++  java
  • 2020.06.01——习题训练4

    A - Dreamoon and Ranking Collection

    给定n个排名,和x次将要举行的比赛,x次比赛可能取得任意名称,使名称可以连成1,2,3...v连续的数,求v的最大值

    从1开始遍历,如果这个名次没有就记录,到x次后,继续遍历,看看是否还连续

    int main()
    {
        int k,n,i,x,b,j;
        cin>>k;
        while(k--){
            int a[510]={0};
            cin>>n>>x;
            for(i=0;i<n;i++){
                cin>>b;
                a[b]++;
            }
            int count=0;
            i=0;
            while(count<x){
                i++;
                if(a[i]==0){
                    count++;
                }
    
            }
            while(ture){
                i++;
                if(a[i]==0){
                    break;
                }
            }
            cout<<i-1<<endl;
        }
        return 0;
    }

     

    B - Dreamoon Likes Permutations

    将一组数分成两部分,判断能不能分成两个从1开始连续的数组

    最多只有两种可能,(数组的最大值max),(max,n-max),(n-max,max),找出最大值,判断这两种情况能不能成立

    int a[200100],c[200100],ans[10][10];
    int cnt,n,ma;
    int cf(int x,int y){
        int i;
        for(i=1;i<=n;i++){
             c[i]=0;
        }
        for(i=1;i<=x;i++){
            c[a[i]]=1;
        }
        for(i=1;i<=x;i++){
            if(c[i]==0)
            return 0;
        }
        for(i=1;i<=n;i++){
            c[i]=0;
        }
        for(i=x+1;i<=n;i++){
            c[a[i]]=1;
        }
        for(i=1;i<=y;i++){
            if(c[i]==0){
            return 0;
            }
        }
        return 1;
    }
    
    int main()
    {
        int k;
        cin>>k;
        while(k--){
            cin>>n;
            int ma=-1,cnt=0;
            for(int i=1;i<=n;i++){
                cin>>a[i];
                ma=max(ma,a[i]);
            }
            if(cf(ma,n-ma)){
                cnt++;
                ans[cnt][1]=ma;
                ans[cnt][2]=n-ma;
            }
            if(ma*2!=n&&cf(n-ma,ma)){
                cnt++;
                ans[cnt][1]=n-ma;
                ans[cnt][2]=ma;
            }
            cout<<cnt<<endl;
            for(int i=1;i<=cnt;i++){
                cout<<ans[i][1]<<" "<<ans[i][2]<<endl;
            }
        }
        return 0;
    }

    C - Exercising Walk

    初始位置在(x,y),分别向前后左右走a,b,c,d步,能否在(x1,x2)(y1,y2)这个区域内;

    向前走的和向后走的抵消,算出最终位置,在不在区域内,

    再判断过程中会不会走出去

    int main()
    {
        int k,a,b,c,d,x,y,x1,x2,y1,y2;
        cin>>k;
        while(k--){
            cin>>a>>b>>c>>d;
            cin>>x>>y;
            cin>>x1>>y1>>x2>>y2;
            x=-a+b+x;
            y=-c+d+y;
            if(x==x1&&x==x2&&(a||b)||y==y1&&y==y2&&(c||d))
            {
                cout<<"No"<<endl;
            }
            else
            {
                if(x>=x1&&x<=x2&&y>=y1&&y<=y2)
                {
                    cout<<"Yes"<<endl;
                }
                else
                {
                    cout<<"No"<<endl;
                }
            }
    
        }
        return 0;
    }

    D - Composite Coloring

    给一串数涂色,最多涂11个颜色,相同颜色的最大公因数大于1

    从2开始的十一个质数,最小的质数因数相同的涂一个颜色

    int main()
    {
        int k,n,i,a[12]={2,3,5,7,11,13,17,19,23,29,31},b[1010],x,j;
        cin>>k;
        while(k--){
            cin>>n;
            int c[15]={0},ccc=0;
            for(i=0;i<n;i++){
                cin>>x;
                for(j=0;j<11;j++){
                    if(x%a[j]==0){
                        if(c[j]!=0){
                          b[i]=c[j];
                        }else{
                        ccc++;
                        c[j]=ccc;
                        b[i]=ccc;
                        }
                        break;
                    }
                }
            }
            cout<<ccc<<endl;
            for(i=0;i<n;i++){
                cout<<b[i]<<" ";
            }
            cout<<endl;
        }
        return 0;
    }

    E - K-th Beautiful String

    找规律,先确实第一个b在第几位,(等差数列求和?),n-sum,就是第二个b的位置

    int main()
    {
        int k,n,i,j,sum,t;
        cin>>t;
        while(t--){
            cin>>n>>k;
            sum=0;
            for(i=0;;i++){
                if(sum+i+1>k-1){
                    break;
                }
                sum+=i+1;
            }
            k-=sum+1;
            for(j=0;j<n;j++){
                if(j==n-i-2||j==n-k-1){
                    cout<<'b';
                }
                else{
                    cout<<'a';
                }
            }
            cout<<endl;
        }
        return 0;
    }

    F - Carousel

    看不懂题目(இωஇ )

    我看题解去了

  • 相关阅读:
    基本数据类型(int, bool, str)
    万恶之源之运算符
    python基础初识
    leetcode 653. Two Sum IV
    leetcode 16 3Sum Closest
    leetcode15 3Sum
    leetcode 1 Two Sum
    【站立会议】第四天
    【站立会议】第三天
    【站立会议】第二天
  • 原文地址:https://www.cnblogs.com/a-specter/p/13042937.html
Copyright © 2011-2022 走看看