Codeforces Round #579 (Div. 3)

Posted wgqqq

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Round #579 (Div. 3)相关的知识,希望对你有一定的参考价值。

因为校集训队以cf成绩为分队指标,所以我决定刷刷div3和div2的ABC题(不涉及算法的题),不学习新的算法了,争取把cf分数打上去,这样才能得到尊重。

之前有一场div2我看错A题题意怎么也调不出来,直接自闭了,于是掉了一百多分...赛后补题发现真的不难(上分起码没啥问题)。

反正,现在训练切简单题目的速度和正确率。


早上virtual participate了这场比赛,只AC了三题....(C题竟然没写出来!!!)

补了题现在把题解挂出来。

A.Circle of Students

扫一遍就好了

 

#include<bits/stdc++.h>
using namespace std;
int a[205];
int main()

    int q;
    cin>>q;
    while(q--)
    
        int n;
        cin>>n;
        for(int i=1;i<=n;i++)
        cin>>a[i];
        bool f =true;
        for(int i=1;i<=n-1;i++)
        
            if(a[i+1]-a[i]!=1&&a[i+1]-a[i]!=-1)
            
                if((a[i+1]==n&&a[i]==1)||(a[i+1]==1&&a[i]==n))continue;
                else
                
                    cout<<"NO\n";
                    f=false;
                    break;
                
            
        
        if(f)cout<<"YES\n";
        
    
    return 0;
  

B.Equal Rectangles

排序后,最小的乘以最大的就好了,顺便扫的过程中判断一下能不能构成矩形,即相邻的两个是否相等。

#include<bits/stdc++.h>
using namespace std;
int arr[1005];
int main()

    int q;
    cin>>q;
    while(q--)
    
        int n;
        cin>>n;
        for(int i=1;i<=4*n;i++)
        cin>>arr[i];
        sort(arr+1,arr+1+4*n);
        int cnt=arr[1]*arr[4*n];
        bool f=true;
        for(int i=1;i<=2*n;i+=2)
        
            
            if(arr[i]*arr[4*n+1-i]!=cnt||arr[i]!=arr[i+1]||arr[4*n+1-i]!=arr[4*n-i])
            
                cout<<"NO\n";
                f=false;
                break;
            
         
         if(f)cout<<"YES\n";
         
        
    
    return 0;
  

C.Common Divisors

WDNMD一开始先看错题目,以为是最大的公约数,看了样例半天没想明白。

后来知道是公约数的个数,结果脑子抽到了循环暴力判断???

其实这个就一直gcd迭代下去,再把结果的因子数计算输出就行...(学了一手快速gcd,以后可以当板子了)

ps:记得long long

#include<bits/stdc++.h> 
using namespace std;
typedef long long ll;
const int maxn = 4e5+5;
ll a[maxn];
ll qGCD(ll a, ll b)

    if(a == 0) return b;
    if(b == 0) return a;
    if(!(a & 1) && !(b & 1)) // a % 2 == 0 && b % 2 == 0;
        return qGCD(a >> 1, b >> 1) << 1;
    else if(!(b & 1))
        return qGCD(a, b >> 1);
    else if(!(a & 1))
        return qGCD(a >> 1, b);
    else
        return qGCD(abs(a - b), min(a, b));


int main()

    ios::sync_with_stdio(false);
    ll n;
    cin>>n;
    ll g=0;
    for(int i=1;i<=n;i++)
    
        cin>>a[i];
        g=qGCD(a[i],g);
    
    ll cnt = 0;
    for(ll i=sqrt(g);i>=1;i--)
    
        if(g%i==0)
        
            if(i*i==g)cnt++;
            else
            cnt+=2;
        
    
    cout<<cnt<<\n;
    return 0;
   

D1.Remove the Substring (easy version)

数据范围小,所以可以从大到小枚举substring的长度,再从前往后枚举删除的位置,最后暴力判断子序列即可。

#include<bits/stdc++.h>
using namespace std;
int main()

    ios::sync_with_stdio(false);
    string s,t;
    cin>>s>>t;
    int slen=s.length(),tlen=t.length();
    if(slen==tlen)
    
        cout<<0<<\n;
        return 0;
    
    for(int i=slen-tlen-1;i>=0;i--)
    
        for(int pos=0;pos+i<slen;pos++)
        
            int p1=0,p2=0;
            while(p1<slen&&p2<tlen)
            
                if(p1>=pos&&p1<=pos+i)
                
                    p1++;
                    continue;
                
                if(s[p1]==t[p2])
                
                    p1++;
                    p2++;
                
                else
                
                    p1++;
                
            //    cout<<p1<<‘ ‘<<p2<<‘\n‘;
            
            if(p2==tlen)
            
                cout<<i+1<<\n;
                return 0;
            
            else
            continue;
        
        
    
    return 0;
    
  

D2.Remove the Substring (hard version)

还没出,待会儿补上

E.Boxers

 

先排序,然后搞个now,从1开始循环,判断每个数字是否能够出现。

#include<bits/stdc++.h>
using namespace std;
int arr[150005];
int main()

    int n;
    cin>>n;
    for(int i=1;i<=n;i++)
    
        cin>>arr[i];
    
    sort(arr+1,arr+1+n);
    int now=1,cnt=0;
    for(int i=1;i<=n;i++)
    
        if(now-arr[i]>=-1&&now-arr[i]<=1)
        
            now++;
            cnt++;
         
        else
        
            if(arr[i]-1>=now)

            
            now=arr[i];
            cnt++;
            
        

    
    cout<<cnt<<\n;
    
  

F1.Complete the Projects (easy version)

F2.Complete the Projects (hard version)

出了补。

 

 

 

 

 

 

over

 

以上是关于Codeforces Round #579 (Div. 3)的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces Round #579 (Div. 3) 题解

A. Circle of Students ( Codeforces Round #579 )

Codeforces Round #579 (Div. 3)

Codeforces Round #579 (Div. 3)

Codeforces Round #579 (Div. 3)D(字符串,思维)

Codeforces Round #320 (Div. 2)