Codeforces Round #784 (Div. 4) ,CF全新第一把div4体验&题解

Posted 小哈里

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Round #784 (Div. 4) ,CF全新第一把div4体验&题解相关的知识,希望对你有一定的参考价值。

文章目录

不愧是div4, 打完还有一个多小时()

A. Division

  • ifelse判断就行
#include<bits/stdc++.h>
using namespace std;

int main()
    int T;  cin>>T;
    while(T--)
        int x;  cin>>x;
        int t;
        if(x <= 1399)t = 4;
        else if(x <= 1599)t = 3;
        else if(x <= 1899)t = 2;
        else t = 1;
        cout<<"Division "<<t<<"\\n";
    
    return 0;

B. Triple

  • 找出数组中出现次数大于3的数字,直接map统计就行
#include<bits/stdc++.h>
using namespace std;
#define ios ios::sync_with_stdio(0), cin.tie(0),cout.tie(0)

int main()
    IOS;
    int T;  cin>>T;
    while(T--)
        int n;  cin>>n;
        map<int,int>ma;
        for(int i = 1; i <= n; i++)
            int x;  cin>>x;
            ma[x]++;
        
        int cc = -1;
        for(auto t : ma)
            if(t.second>=3)
                cc = t.first;
                break;
            
        
        cout<<cc<<"\\n";
    
    return 0;



C. Odd/Even Increments

  • 每次操作可以给所有下标偶数或下标奇数的数+1,求能否让序列奇偶性都一样
  • 判断下标奇,偶的数字的奇偶性是否分别相同即可
#include<bits/stdc++.h>
using namespace std;
#define IOS ios::sync_with_stdio(0), cin.tie(0),cout.tie(0)

int a[110];

int main()
    IOS;
    int T;  cin>>T;
    while(T--)
        int n;  cin>>n;
        for(int i = 1; i <= n; i++)
            cin>>a[i];
        
        int ok = 1;
        for(int i = 3; i <= n; i+=2)
            if(a[i]%2 != a[i-2]%2)ok = 0; break;
        
        for(int i = 4; i <= n; i+=2)
            if(a[i]%2 != a[i-2]%2)ok = 0; break;
        
        if(ok)cout<<"YES\\n";
        else cout<<"NO\\n";
    
    return 0;



D. Colorful Stamp

  • 初始全部W,每次可以RB或者BR,求最后能否构造出给出的串
  • 可以发现RBRBRB或BRBRBR重叠盖一个,可以构造出任何的串,除非整个串都是R或者都是B才出不来。所以拿W作分界判断中间的RB串是否出现两个字母即可
  • 开始特判了1是NO,然而W也可以,调了好久。
#include<bits/stdc++.h>
using namespace std;
#define IOS ios::sync_with_stdio(0), cin.tie(0),cout.tie(0)

int a[110];

int main()
    IOS;
    int T;  cin>>T;
    while(T--)
        int n;  cin>>n;
        string s;  cin>>s;
        if(s.size()==1)
            if(s[0]=='W')cout<<"YES\\n";
            else cout<<"NO\\n";
            continue;
        
        int ok = 1;
        int x = 0, y = 0;
        for(int i = 0; i < s.size(); i++)
            if(s[i]=='W')
                if(x+y==1)
                    ok = 0; 
                
                x = 0, y = 0;
            else
                if(s[i]=='R')x=1;
                else y = 1;
            
        
        if(x+y==1)ok = 0;
        if(ok)cout<<"YES\\n";
        else cout<<"NO\\n";
    
    return 0;



E. 2-Letter Strings

  • 给出n个长为2的字符串,判断能构造多少对,满足只有一个字母位置不同
  • 对于当前串,考虑前面只有一个位置不同的个数,累加即可。
  • 注意开ll,不然会wa
#include<bits/stdc++.h>
using namespace std;

#define IOS ios::sync_with_stdio(0), cin.tie(0),cout.tie(0)
typedef long long LL;

LL a[110];

int main()
    IOS;
    LL T;  cin>>T;
    while(T--)
        LL n;  cin>>n;
        map<string, LL>ma;
        map<char,LL>m1, m2;
        LL ans = 0;
        for(LL i = 1; i <= n; i++)
            string s;  cin>>s;
            LL t = m1[s[0]]+m2[s[1]]-2*ma[s];
            // cout<<"ttt: "<<s[0]<<" "<<s[1]<<" "<<ma[s]<<" "<<t<<"\\n";
            ans += t;
            ma[s]++;
            m1[s[0]]++;
            m2[s[1]]++;
        
        cout<<ans<<"\\n";
    
    return 0;



F. Eating Candies

  • 两个人分别从左右往中间拿糖果,且他们糖果数必须一样,求最多可以拿多少糖果
  • 双指针模拟即可
#include<bits/stdc++.h>
using namespace std;

#define IOS ios::sync_with_stdio(0), cin.tie(0),cout.tie(0)
typedef long long LL;
const int maxn = 2e5+10;

int a[maxn];

int main()
    IOS;
    int T;  cin>>T;
    while(T--)
        int n;  cin>>n;
        for(int i = 1; i <= n; i++)cin>>a[i];
        int l = 1, r = n;
        int lsum = 0, rsum = 0, ans = 0;
        while(l <= r)
            if(lsum <= rsum)lsum += a[l++];
            else rsum += a[r--];
            if(lsum == rsum)ans = l+(n-r-1);
        
        cout<<ans<<"\\n";
    
    return 0;



G. Fall Down

  • 给出一个由*,o,.构成的矩阵,*会往下掉,除非遇到o或者叠满了,求最后的效果
  • 暴力模拟即可,每次数有几个直到遇到o,然后o往上都暴力修改一下。
#include<bits/stdc++.h>
using namespace std;

#define IOS ios::sync_with_stdio(0), cin.tie(0),cout.tie(0)
typedef long long LL;
const int maxn = 2e5+10;

string a[70];

int main()
    IOS;
    int T;  cin>>T;
    while(T--)
        int n, m;  cin>>n>>m;
        for(int i = 0; i < n; i++)cin>>a[i];
        for(int j = 0; j < m; j++)
            int c = 0;
            for(int i = 0; i < n; i++)
                if(a[i][j]=='*')
                    c++;  a[i][j] = '.';
                else if(a[i][j]=='o')
                    for(int k = i-c; k < i; k++)
                        a[k][j] = '*';
                    
                    c = 0;
                
            
            if(c)
                for(int k = n-c; k < n; k++)
                    a[k][j] = '*';
                
                c = 0;
            
        
        for(int i = 0; i < n; i++)cout<<a[i]<<"\\n";
        cout<<"\\n";
    
    return 0;



H. Maximal AND

  • 给出n个数,可以操作k次,每次可以把一个数的一个二进制位改为1,求最后n个数AND起来最大是多少
  • 从最高位往下枚举,如果当前位0的个数<k,那么就把他们都变成1,用掉相应操作次数,直到不能操作即可。
#include<bits/stdc++.h>
using namespace std;

#define IOS ios::sync_with_stdio(0), cin.tie(0),cout.tie(0)
typedef long long LL;
const int maxn = 2e5+10;

int a[35];

int main()
    IOS;
    int T;  cin>>T;
    while(T--)
        int n, k;  cin>>n>>k;
        memset(a,0,sizeof(a));
        for(int i = 1; i <= n; i++)
            int x;  cin>>x;
            for(int j = 30; j >= 0; j--)
                if((x>>j)&1 == 1)a[j]++;
            
        
        int ans = 0;
        for(int j = 30; j >= 0; j--)
            // cout<<a[j]<<' ';
            int t = n-a[j];
            if(k >= t)
                k -= t;
                ans += (1<<j);
            
        
        cout<<ans<<"\\n";
    
    return 0;



以上是关于Codeforces Round #784 (Div. 4) ,CF全新第一把div4体验&题解的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces Round #784 (Div. 4) ,CF全新第一把div4体验&题解

Codeforces Round #436 E. Fire(背包dp+输出路径)

[ACM]Codeforces Round #534 (Div. 2)

Codeforces Round #726 (Div. 2) B. Bad Boy(贪心)

Codeforces Global Round 19

Codeforces Educational Codeforces Round 67