zoukankan      html  css  js  c++  java
  • 2020-05-26 — 习题训练三

    A - Sorted Adjacent Differences

    将这串数字按大小排序,找到中间那个做第一个,左一个右一个输出

    int main()
    {
        int k,n,i,j,a[100010];
        cin>>k;
        while(k--){
            cin>>n;
            for(i=0;i<n;i++){
                cin>>a[i];
            }
            sort(a,a+n);
            for(i=n/2,j=n/2-1;j>=0||i<=n-1;i++,j--){
                if(i<=n-1){
                    cout<<a[i]<<" ";
                }
                if(j>=0){
                    cout<<a[j]<<" ";
                }
            }
            cout<<endl;
        }
        return 0;
    }

    B - Powered Addition

    变成一个不递减的数列,数列里的每一个数都得大于之前最大的那一个,与之前最大的哪一项相差最大的,求需要的时间

    int main()
    {
        ll k,n,i,j,a[100010],z=0;
        cin>>k;
        while(k--){
            cin>>n;
            cin>>a[0];
            ll max1=a[0],max2=-1,sum=0;
            for(i=1;i<n;i++){
                cin>>a[i];
                max1=max(max1,a[i]);
                max2=max(max2,max1-a[i]);
            }
            j=1;
            z=0;
            while(sum<max2){
                sum+=j;
                j*=2;
                z++;
            }
            cout<<z<<endl;
        }
        return 0;
    }

    C - Middle Class

    对所有的数求和,判断平均能不能大于x,不可以就从最小的开始,去掉,再判断

    int main()
    {
        ll k,n,m,i,j,z=0;
        cin>>k;
        while(k--){
            ll a[100010];
            cin>>n>>m;
            ll sum=0;
            for(i=0;i<n;i++){
                cin>>a[i];
                sum+=a[i];
            }
            if(sum/n>=m){
                cout<<n<<endl;
            }else{
                sort(a,a+n);
                for(i=0;i<n-1;i++){
                    sum-=a[i];
                    if(sum/(n-i-1)>=m){
                        cout<<n-i-1<<endl;
                        break;
                    }
                }
                if(i==n-1){
                    cout<<0<<endl;
                }
            }
    
        }
        return 0;
    }

    D - Circle of Monsters

    找一个地方开头呗,前边那个就炸不着它了,看看哪浪费的最少呗

    ll a[300005][2],b[300005];
    int main()
    {
        ll k,n,m,i,j=0,minn=1e18;
        cin>>k;
        while(k--)
        {
           ll n,i,sum=0;
           minn=1e18;
           cin>>n;
           for(i=0;i<n;i++){
                scanf("%lld%lld",&a[i][0],&a[i][1]);
            }
            for(i=0; i<n; i++)
            {
                if(i==0)
                {
                    b[0]=max(0ll,a[0][0]-a[n-1][1]);
                }
                else{
                    b[i]=max(0ll,a[i][0]-a[i-1][1]);
                }
                sum+=b[i];
            }
            for(i=0;i<n;i++){
                minn=min(minn,sum-b[i]+a[i][0]);
            }
           printf("%lld
    ",minn);
        }
        return 0;
    }

    E - Kind Anton

    如果第二个序列的数比第一个序列同位上的数大,在此之前原序列得有1才行

    如果第二个序列的数比第一个序列同位上的数小,在此之前原序列得有-1才行

    ll a[100100];
    int main()
    {
        int k,n,d,x,b,flag,i;
        cin>>k;
        while(k--){
            cin>>n;
            for(i=0;i<n;i++){
                cin>>a[i];
            }
            d=0;x=0,flag=0;
            for(i=0;i<n;i++){
                cin>>b;
                if(b>a[i]&&d==0&&flag==0){
                    cout<<"NO"<<endl;
                    flag=1;
                }
                if(b<a[i]&&x==0&&flag==0){
                    cout<<"NO"<<endl;
                    flag=1;
                }
                if(a[i]==1){
                    d=1;
                }
                if(a[i]==-1){
                    x=1;
                }
            }
            if(flag==0){
                cout<<"YES"<<endl;
            }
        }
    
        return 0;
    }

    F - Eugene and an array

    (i,j)的子串和为零,前缀和sum[i]==sum[j]

    (我没想出来QWQ)

    map<ll,ll>vis;
    ll sum[200005];
    int main()
    {
        int n,a;
        cin>>n;
        vis[0]=1;
        for(int i=1;i<=n;i++)
        {
            cin>>a;
            sum[i]=sum[i-1]+a;
        }
        ll s=0;
        int l=0,r=1;
        while(r<=n)
        {
            while(vis[sum[r]])
            {
                vis[sum[l]]=0;
                l++;
            }
            vis[sum[r]]=1;
            s+=r-l;
            r++;
        }
        cout<<s<<endl;
        return 0;
    }
    View Code
  • 相关阅读:
    JMeter怎样测试WebSocket
    Android—基于OpenCV+Android实现人脸检测
    Android—实现科大讯飞语音合成
    Could not resolve com.android.support.constraint:constraint-layout:1.1.3.
    Mac上利用Aria2加速百度网盘下载
    将Excel表中的数据导入MySQL数据库
    Android Studio 添加模块依赖
    Mac上基于hexo+GitHub搭建个人博客(一)
    微信小程序—setTimeout定时器的坑
    微信小程序-腾讯地图显示偏差问题
  • 原文地址:https://www.cnblogs.com/a-specter/p/12989919.html
Copyright © 2011-2022 走看看