• Codeforces Round #668 (Div. 2)A->C


    A:http://codeforces.com/contest/1405/problem/A

    解析:

    倒序输出即可。

    #include<bits/stdc++.h>
    #include<map>
    #include<iostream>
    #include<cstring>
    #include<cmath>
    using namespace std;
    typedef long long ll;
    const int maxn=1e2+10;
    const int maxn2=1e9+10;
    const int mod=1e9+10;
    int a[maxn];
    struct node
    {
        int x1,y1,x2,y2;
    }st[maxn];
    int main()
    {
        int t;
        cin>>t;
        while(t--)
        {
            int n;
            cin>>n;
            for(int i=1;i<=n;i++)
                cin>>a[i];
            
                    for(int i=n;i>=1;i--)
                cout<<a[i]<<" ";
                cout<<endl;    
    
    
        }
        
    }

    B:http://codeforces.com/contest/1405/problem/B

    题意:

    给出长度为n的数组,和为0

    操作:

    i  j

    -1  +1  免费

    j  i

    +1  -1  花费1

    求最少操作数,使得所有数字变为0

    解析:

    从前往后,累加正数,每次遇到负数,就进行抵消。

    如果这个负数抵消完以后,依然<0,那么操作数就是它的绝对值。

    因为总和为0,那么一系列抵消以后,如果还剩有负数,那么它们其后一定存在正数,所以负数的绝对值和就是答案。

    #include<bits/stdc++.h>
    #include<map>
    #include<iostream>
    #include<cstring>
    #include<cmath>
    using namespace std;
    typedef long long ll;
    const int maxn=1e5+10;
    const int maxn2=1e9+10;
    const int mod=1e9+10;
    ll a[maxn];
    struct node
    {
        int x1,y1,x2,y2;
    }st[maxn];
    int main()
    {
        int t;
        cin>>t;
        while(t--)
        {
            int n;
            cin>>n;
            for(int i=1;i<=n;i++)
                cin>>a[i];
            ll sum = 0 ;
            ll cnt=0;
            for(int i=1;i<=n;i++)
            {
                if(a[i]>=0)
                    sum+=a[i];
                else
                {
                    sum+=a[i];
                    if(sum<0)
                    {
                        cnt-=sum;
                        sum=0;
                    }
                }
            }
            cout<<cnt<<endl;
        }
        
    }

    C:http://codeforces.com/contest/1405/problem/C

    题意:

    长度为n的字符串,?可以变成0或1

    是否能使所有k长的子字符串,其中的0,1的数目相同

    解析:

    由此可见,之间的字符为公用,那么要想保证条件,则要满足si==si+k....

    有结论,Si=Si%k

    那么,从i=k开始,如果s[i]=='?',那么直接默认它改成了和s[i%k]一样

    如果s[i]==s[i%k],已满足条件,继续。

    以上两个条件都不满足,如果s[i+k]为'?',就对其做出改变,否则不合法。

    以上的操作,实际上都是对s0~sk-1的复制操作。

    所以只要检查一遍s0~sk-1,即可

    #include<bits/stdc++.h>
    #include<map>
    #include<iostream>
    #include<cstring>
    #include<cmath>
    using namespace std;
    typedef long long ll;
    const int maxn=1e5+10;
    const int maxn2=1e9+10;
    const int mod=1e9+10;
    ll a[maxn];
    struct node
    {
        int x1,y1,x2,y2;
    }st[maxn];
    int main()
    {
        int t;
        cin>>t;
        while(t--)
        {
            int n,k;
            cin>>n>>k;
            string s;
            cin>>s;
            int ok =0;
            for(int i=k;i<n;i++)
            {
                if(s[i]=='?'||s[i]==s[i%k])
                    continue;
                if(s[i%k]=='?')
                    s[i%k]=s[i];
                else
                    {
                        ok=1;break;
                    }
            }
            int c1=0,c0=0;
            for(int i=0;i<k;i++)
            {
                if(s[i]=='1')
                    c1++;
                else if(s[i]=='0')
                    c0++;
            }
            if(c1>(k/2)||c0>(k/2)||ok==1)
                cout<<"NO"<<endl;
            else
                cout<<"YES"<<endl;    
        }
        
    }
  • 相关阅读:
    MySQL------代码1024,can't get hostname for your address解决方法
    MySQL------存储过程的使用
    MyEclipse------如何添加jspsmartupload.jar,用于文件上传
    JQuery------实现鼠标点击和滑动不同效果
    CSS------如何让div中的div处于右下角
    JQuery------制作div模态框
    CSS------Filter属性的使用方法
    python使用元类
    python __new__()分析
    centos自带python2.6升级到python2.7。并解决yum pip easy_install pip等模块兼容性问题
  • 原文地址:https://www.cnblogs.com/liyexin/p/13634493.html
Copyright © 2020-2023  润新知