zoukankan      html  css  js  c++  java
  • 2021年度训练联盟热身训练赛第二场

    传送门:https://ac.nowcoder.com/acm/contest/12794

    A Binarize It

    大于等于这个数的最小二次方数

    #include<bits/stdc++.h>
    using namespace std;
    #define N 10002
    #define LL long long 
    
    int n;
    LL a[N];
    
    int main()
    {
        cin>>n;
        a[0]=1;
        for(int i=1;i<=22;i++)
        {
            a[i]=1<<i;
        }
        for(int i=1;i<=n;i++)
        {
            int x;
            cin>>x;
            LL ans=*lower_bound(a+1,a+22+1,x);
            printf("Input value: %d
    %d
    
    ",x,ans);
        }
        return 0;
    } 

    B g2g c u l8r

    字符串中单词替换

    唉 比赛时处理的不是很顺手

    #include<bits/stdc++.h>
    using namespace std;
    
    int n,p;
    map<string,string>a;
    string s[22];
    
    int main()
    {
        cin>>n;
        for(int i=1;i<=n;i++)
        {
            string s1,s2;
            cin>>s[i];getchar();
            getline(cin,s2);
            a[s[i]]=s2;
        }
        int m;
        cin>>m;getchar();
        for(int i=1;i<=m;i++)
        {
            string ss;
            getline(cin,ss);
            int len=ss.length();
            string gg="";
            for(int j=0;j<len;j++)
            {
                if(ss[j]!=' '&&j!=len-1)
                {
                    gg.append(1,ss[j]);
                }
                if(j==len-1)
                {
                    gg.append(1,ss[j]);
                    if(a.find(gg)==a.end())
                    {
                        cout<<gg<<endl;
                    }else cout<<a[gg]<<endl;
                    gg="";
                }
                if(ss[j]==' ')
                {
                    if(a.find(gg)==a.end()) 
                    {
                        cout<<gg<<" ";
                    }else cout<<a[gg]<<" ";
                    gg="";
                }
            }
        }
        return 0;
    } 

    C Tip to be Palindrome

    输入n,求m,m>=0.2*n且m+n为最小的回文数

    #include<bits/stdc++.h>
    using namespace std;
    
    int n;
    
    int ok(int x)
    {
        int sum=0;
        int m=x;
        while(x>0)
        {
            sum=sum*10+x%10;
            x=x/10;          
        }
        return sum==m;
    }
    
    int main()
    {
        cin>>n;
        for(int i=1;i<=n;i++)
        {
            int p,xf;
            cin>>p;
            xf=ceil(1.*p*0.2); 
            int gg=xf+p;
            for(int j=gg;;j++)
            {
                if(ok(j))
                {
                    printf("Input cost: %d
    %d %d
    
    ",p,j-p,j);
                    break;
                }
            }
        }
        return 0;
    }

    D Soccer Standings

    模拟题 读懂题就好

    cmp函数写错改了半天 这也太令人伤心了

    #include<bits/stdc++.h>
    using namespace std;
    
    struct p
    {
        int points,wins,losses,draws,goalscor,goalal;
        int id; 
    }a[33];
    map<int,string>g;
    map<string,int>gg; 
    bool cmp(p x,p y)
    {
        //if(x.points>y.points) 
        if(x.points>y.points) return 1;
        else
        {
            if(x.points==y.points) 
            {
                if((x.goalscor-x.goalal)>(y.goalscor-y.goalal)) return 1;
                else 
                {
                    if((x.goalscor-x.goalal)==(y.goalscor-y.goalal))
                    {
                        if(x.goalscor>y.goalscor)return 1;
                        else
                        {
                            if(x.goalscor==y.goalscor)
                            {
                                if(g[x.id]<g[y.id]) return 1;
                            }
                        }
                    }
                }
            }
        }
        return x.points>y.points;
    }
    
    int main()
    {
        int T,js=0;
        cin>>T;
        while(T--)
        {
            int n,m;
            js++;
            cin>>n>>m;
            for(int i=1;i<=n;i++)
            {
                string s;
                cin>>s;
                g[i]=s;
                gg[s]=i;
                a[i].id=i;
                a[i].draws=a[i].goalal=a[i].goalscor=a[i].losses=a[i].wins=a[i].points=0;
            }
            for(int i=1;i<=m;i++)
            {
                string s1,s2;
                int c1,c2;
                cin>>s1>>c1>>s2>>c2;
                int id1=gg[s1];
                int id2=gg[s2];
                if(c1>c2) 
                {
                    a[id1].wins++;
                    a[id1].points+=3;
                    a[id1].goalscor+=c1;
                    a[id1].goalal+=c2;
                    a[id2].losses++;
                    a[id2].goalal+=c1;
                    a[id2].goalscor+=c2;
                }
                if(c1==c2)
                {
                    a[id1].points++;
                    a[id2].points++;
                    a[id1].goalscor+=c1;
                    a[id2].goalscor+=c2;
                    a[id1].goalal+=c2;
                    a[id2].goalal+=c1;
                    a[id1].draws++;
                    a[id2].draws++;
                }
                if(c1<c2)
                {
                    a[id1].losses++;
                    a[id2].wins++;
                    a[id2].points+=3;
                    a[id1].goalscor+=c1;
                    a[id2].goalscor+=c2;
                    a[id1].goalal+=c2;
                    a[id2].goalal+=c1; 
                }
            }
            sort(a+1,a+n+1,cmp);
            printf("Group %d:
    ",js);
            for(int i=1;i<=n;i++)
            {
                int idd=a[i].id;
                cout<<g[idd]<<" "<<a[i].points<<" "<<a[i].wins<<" "<<a[i].losses<<" "<<a[i].draws<<" "<<a[i].goalscor<<" "<<a[i].goalal<<endl;
            }
            cout<<endl; 
        }
        return 0;
    }

    E NIH Budget

    分组背包

    #include<bits/stdc++.h>
    using namespace std;
    #define  N 100002
    int dp[N]; 
    int js;
    struct p
    {
        int w,v;
    }a[N];
    
    int main() 
    {
    
        int T;
        cin>>T;
        while(T--)
        {
            js++;
            vector<int>ve[11];
            int n,m,cnt=0;
            cin>>n>>m;
            memset(dp,0,sizeof(dp));
            for(int i=1;i<=n;i++)
            {
                for(int j=1;j<=4;j++)
                {
                    int x,y;
                    cin>>x>>y;
                    a[++cnt].w=x;
                    a[cnt].v=y;
                    ve[i].push_back(cnt);
                }
            }
            for(int i=1;i<=n;i++)
            {
                for(int j=m;j>=0;j--)
                {
                   for(int k=0;k<4;k++)
                   {
                     int x=ve[i][k];
                       if(j>=a[x].w)
                        dp[j]=max(dp[j],dp[j-a[x].w]+a[x].v);
                   }
                }
            }
            printf("Budget #%d: Maximum of %d lives saved.
    
    ", js,dp[m]);
        } 
        return 0;
    }

    F Interstellar Love

    图论 找环

    #include<bits/stdc++.h>
    using namespace std;
    #define N 1002
    #define M 10002
    
    int vis[N];
    int head[N];
    int sumedge;
    bool yes_,has_;
    int js=0;
    
    struct Edge
    {
        int x,y,nxt;
        Edge(int x=0,int y=0,int nxt=0):
            x(x),y(y),nxt(nxt){} 
    }edge[M<<1];
    
    void add(int x,int y)
    {
        edge[++sumedge]=Edge(x,y,head[x]);
        head[x]=sumedge;
    }
    
    void Init()
    {
        sumedge=0;
        memset(vis,0,sizeof(vis));
        memset(head,0,sizeof(head));
    }
    
    void dfs(int now,int fa)
    {
        vis[now]=1;js++;
    //    cout<<now<<endl;
        for(int i=head[now];i;i=edge[i].nxt)
        {
            int v=edge[i].y;
            if(v==fa) continue;
            if(vis[v]) has_=1;
            if(!vis[v])
            {
                dfs(v,now);
            }
        }
        return ;
    }
    
    int main()
    {
        int T,cnt=0;
        cin>>T;
        while(T--)
        {
            cnt++;
            int n,m;
            int ans1=0,ans2=0;
            cin>>n>>m;
            Init();
            for(int i=1;i<=m;i++)
            {
                int x,y;
                cin>>x>>y;
                add(x,y);
                add(y,x);
            }
            for(int i=1;i<=n;i++)
            {
                if(!vis[i])
                {
                    dfs(i,-1);
                    if(js>1)
                    {
                        ans1++;
                        if(has_)
                        {
                            ans2++;
                        }
                    }
                    js=has_=0;
                }
            }
            printf("Night sky #%d: %d constellations, of which %d need to be fixed.
    
    ",cnt,ans1,ans2);
        }
        return 0; 
    }

    G Plate Spinning

    分析问题发现是

    比较2.5*n与p的大小 注意特判

    唉 我读错题了

    #include<bits/stdc++.h>
    using namespace std;
    
    int t;
    
    int main()
    {
        cin>>t;
        for(int i=1;i<=t;i++)
        {
            int n,p;
            cin>>n>>p;
            printf("Circus Act %d:
    ",i);
            if(n==1||2*p>=5*n) printf("Chester can do it!
    
    ");
            else printf("Chester will fail!
    
    ");
        } 
        return 0;
    }
  • 相关阅读:
    数据分析 ---上篇
    爬虫 ---模拟登录
    Spider -- 获取图片并处理中文乱码
    爬虫篇 ---增量式爬虫
    Django中间件深入理解
    认识casbin
    关于nginx开机自己启动配置
    更改redhat yum源
    sqlalchemy监听事件
    Linux命令 history
  • 原文地址:https://www.cnblogs.com/zzyh/p/14587009.html
Copyright © 2011-2022 走看看