Codeforces Round #479 (Div. 3)解题代码

A. Wrong Subtraction

#include <bits/stdc++.h>

using namespace std;

int main()
{
    int n,k;
    cin>>n>>k;
    while(k--)
    {
        int tmp=n%10;
        if(tmp==0)
            n/=10;
        else n-=1;
    }
    cout<<n<<endl;
    return 0;
}

B. Two-gram

#include <bits/stdc++.h>

using namespace std;
const int MAXN=1000;
char ch[MAXN];
int cnt[MAXN];
int main()
{
    int n;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>ch[i];
    }
    for(int i=1;i<=n-1;i++)
    {
        for(int j=i+1;j<=n-1;j++)
        {
            if(ch[i]==ch[j]&&ch[i+1]==ch[j+1])
                cnt[i]++;
        }
    }
    int index;
    int maxnCnt=-1;
    for(int i=1;i<=n-1;i++)
    {
        if(maxnCnt<cnt[i])index=i,maxnCnt=cnt[i];
    }
    cout<<ch[index]<<ch[index+1]<<endl;
    return 0;
}

C. Less or Equal

#include <bits/stdc++.h>

using namespace std;


const int MAXN=200005;
int a[MAXN];
int main()
{
    int n,k;
    cin>>n>>k;
    for(int i=0;i<n;i++)
        cin>>a[i];
    sort(a,a+n);
    if(k==0)
    {
        if(a[0]>1)cout<<a[0]-1<<endl;
        else cout<<-1<<endl;
    }
    else
    {
        int tmp=a[k-1];
    int cnt=0,flag=0;
    for(int i=0;i<n;i++)
    {
        if(tmp>=a[i])
        {
            cnt++;
        }
        else break;

    }
    if(cnt>k)cout<<-1<<endl;
    else cout<<tmp<<endl;
    }

    return 0;
}

D. Divide by three, multiply by two

#include <bits/stdc++.h>

using namespace std;
#define LL long long
const int MAXN=120;

struct node
{
    LL x,y;

}a[MAXN];
bool cmp(const node x1,const node x2)
{
    if(x1.y!=x2.y)return x1.y>x2.y;
    else return x1.x<x2.x;
}


LL cnt(LL x)
{
    int cnt3=0;
    while(x%3==0)
    {
        cnt3++;
        x/=3;
    }
    return cnt3;
}

int main()
{
    int n;
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cin>>a[i].x;a[i].y=cnt(a[i].x);
    }
    sort(a,a+n,cmp);
    for(int i=0;i<n;i++)
        cout<<a[i].x<<" ";
    cout<<endl;
    return 0;
}

E. Cyclic Components

#include <bits/stdc++.h>

using namespace std;

const int MAXN=200005;
vector<int>G[MAXN];
bool vis[MAXN]
bool f;
void dfs(int v)
{
    vis[v]=1;
    if(G[v].size()!=2)
        f=1;

    for(auto x: G[v])
    {
        if(!vis[x])
            dfs(x);
    }
}
int main()
{
    int n,m,u,v;
    cin>>n>>m;
    for(int i=0;i<m;i++)
    {
        cin>>u>>v;
        u--,v--;
        G[u].push_back(v);
        G[v].push_back(u);
    }
    int ans=0;
    f=0;
    for(int i=0;i<n;i++)
    {
        if(!vis[i])
        {
            f=0;
            dfs(i);
            ans+=(!f);
        }

    }
    cout<<ans<<endl;
    return 0;
}
原文地址:https://www.cnblogs.com/bryce1010/p/9386958.html