zoukankan      html  css  js  c++  java
  • 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;    
        }
        
    }
  • 相关阅读:
    11->centos6 安装oracle
    centos7安装rlwrap
    ajax
    java获取时间戳
    idea主要设置大纲图
    ppycharm设置解释器版本号码
    JTA 深度历险
    学会数据库读写分离、分表分库——用Mycat,这一篇就够了!
    分库分表的几种常见玩法及如何解决跨库查询等问题
    深入浅出SOA
  • 原文地址:https://www.cnblogs.com/liyexin/p/13634493.html
Copyright © 2011-2022 走看看