zoukankan      html  css  js  c++  java
  • Codeforces Round #597 (Div. 2)(A-D)

    A. Good ol’ Numbers Coloring

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    int MAXN=1e5+10;
    int main(){
        int T;
        cin>>T;
        while(T--){
            int a,b;
            cin>>a>>b;
            if(__gcd(a,b)==1)cout<<"Finite"<<endl;
            else cout<<"Infinite"<<endl;
        }
     
        return 0;
    }
    View Code

    B. Restricted RPS

    题意:石头剪刀布。判断输赢,并且输出赢的方法。模拟。

     

    #include <bits/stdc++.h>
    using namespace std;
    const int MAXN=1e5+10;
    bool vis[MAXN];
    char s[MAXN];
    int main(){
        int T,n;
        cin>>T;
        while(T--){
            memset(vis,0,sizeof(vis));
            cin>>n;
            int a,b,c;
            cin>>a>>b>>c;
            cin>>s;
            int tot=0;
            for(int i=0;i<n;i++){
                if(s[i]=='R'&&b){
                    b--;
                    s[i]='P';
                    vis[i]=true;
                    tot++;
                }
                else if(s[i]=='P'&&c){
                    c--;
                    s[i]='S';
                    vis[i]=true;
                    tot++;
                }
                else if(s[i]=='S'&&a){
                    a--;
                    s[i]='R';
                    vis[i]=true;
                    tot++;
                }
            }
            if(tot>=(n+1)/2){
                cout<<"YES"<<endl;
                for(int i=0;i<n;i++){
                    if(vis[i])cout<<s[i];
                    else {
                        if(a){
                            a--;cout<<'R';
                        }
                        else if(b){
                            b--;cout<<'P';
                        }
                        else if(c)c--,cout<<'S';
                    }
                }cout<<endl;
            }
            else cout<<"NO"<<endl;
     
     
        }
     
        return 0;
    }
    View Code

     

    C. Constanze’s Machine

    题意:给一个改动过的字符串,判断原本的字符串有多少中可能
    w会变成uu,m会变成nn,其他字符不变
    解:对于几个连续的u或者n,它的方案数为对应的斐波那契数,然后每一部分的乘积就为答案

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int MAXN=1e5+10;
    const int mod=1e9+7;
    ll  pre[MAXN];
    void init(){
        pre[1]=1;
        pre[2]=2;
        pre[3]=3;
        for(int i=4;i<MAXN;i++)pre[i]=(pre[i-1]%mod+pre[i-2]%mod)%mod;
    }
    int main(){
        init();
        string s;
        cin>>s;
        bool ok=true;
        ll ans=1;
        ll res=1;
        int cnt=1;
        int n=s.size();
        for(int i=0;i<n;i++){
            if(s[i]=='m'||s[i]=='w')ok=false;
            if((s[i]=='n'&&s[i-1]=='n')||(s[i]=='u'&&s[i-1]=='u'))cnt++;
            else {
                ans=((ans%mod)*(pre[cnt]%mod)%mod);
                cnt=1;
            }
        }
        if(s[n-1]=='u'||s[n-1]=='n')ans=((ans%mod)*(pre[cnt]%mod)%mod);
        if(!ok)cout<<0<<endl;
        else cout<<ans<<endl;
     
        return 0;
    }
    View Code

    D. Shichikuji and Power Grid

    题意:对于每个城市要么建站,要么连线,求最小花费,至少一个城市建站。
    解:建立一个零点,作为建站的选择。最小生成树。

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int MAXN=2020;
    int n;
    ll c[MAXN],k[MAXN],x[MAXN],y[MAXN];
    ll g[MAXN][MAXN];
    struct node{
        int u,v;
        ll cost;
    }a[1000000];
    ll js(int i,int j){
        return (abs(x[i]-x[j])+abs(y[i]-y[j]))*(k[i]+k[j]);
    }
    bool cmp(node a,node b){
        return a.cost<b.cost;
    }
    vector<int>ans1;
    vector<pair<int,int> >ans2;
    int pre[MAXN];
    int find(int w){
        return pre[w]==w?w:find(pre[w]);
    }
    int main(){
        cin>>n;
        for(int i=1;i<=n;i++)cin>>x[i]>>y[i];
        for(int i=1;i<=n;i++)cin>>c[i];
        for(int i=1;i<=n;i++)cin>>k[i];
        for(int i=1;i<=n;i++)pre[i]=i;
        int tot=0;
        for(int i=1;i<=n;i++){
            a[tot].u=0,a[tot].v=i;
            a[tot++].cost=c[i];
        }
        for(int i=1;i<=n;i++){
            for(int j=i+1;j<=n;j++){
                a[tot].u=i;
                a[tot].v=j;
                a[tot++].cost=js(i,j);
            }
        }
        sort(a,a+tot,cmp);
        ll ans=0;
        for(int i=0;i<tot;i++){
            if(!n)break;
            int nx=find(a[i].u);
            int ny=find(a[i].v);
            if(nx!=ny){
                pre[ny]=pre[nx];
                ans+=a[i].cost;
                if(a[i].u==0)ans1.push_back(a[i].v);
                else ans2.push_back(make_pair(a[i].u,a[i].v));
                n--;
            }
        }
        cout<<ans<<endl;
        cout<<ans1.size()<<endl;
        for(int i=0;i<ans1.size();i++)cout<<ans1[i]<<' ';cout<<endl;
        cout<<ans2.size()<<endl;
        for(int i=0;i<ans2.size();i++)cout<<ans2[i].first<<' '<<ans2[i].second<<endl;
     
     
        return 0;
    }
    View Code

     

  • 相关阅读:
    基本数据类型
    运算
    登录程序
    MySQL索引
    内存泄漏排查&CPU负载高排查
    dubbo
    SPI
    缓存,热点key
    Java BigDecimal
    Spring Bean's life
  • 原文地址:https://www.cnblogs.com/lin1874/p/12194132.html
Copyright © 2011-2022 走看看