• Codeforces Round #494 (Div. 3)


    Codeforces Round #494 (Div. 3)


    A. Polycarp's Pockets

    #include <bits/stdc++.h>
    #define rep(i,a,b) for(int i=a;i<=b;++i)
    
    using namespace std;
    int a[111],ans,n;
    int main() {
        scanf("%d",&n);
        rep(i,1,n){int x;
            scanf("%d",&x);
            ++a[x];
            ans=max(ans,a[x]);
        }
        printf("%d
    ",ans);
        return 0;
    }
    
    

    B. Binary String Constructing

    先用01交替,相邻不同的位置个数为x-1,然后把剩余的01放上去使得答案为x。第一个数可能是1,也可能是0,都要计算

    #include <bits/stdc++.h>
    #define rep(i,a,b) for(int i=a;i<=b;++i)
    
    using namespace std;
    int num[2],x,A[555],cc;
    int ck(){int ans=0;
        rep(i,1,cc-1)if(A[i]!=A[i+1])++ans;
        return ans==x;
    }
    int main() {
        scanf("%d%d%d",&num[0],&num[1],&x);
        int a=num[0],b=num[1];
        A[++cc]=0;
        --num[0];
        for(int i=1;i<=x-1;++i){
            A[++cc]=A[cc-1]^1;
            --num[A[cc]];
        }
        int t=A[cc];
        while(num[t])A[++cc]=t,--num[t];
        while(num[t^1])A[++cc]=(t^1),--num[t^1];
        if(ck()){rep(i,1,cc)printf("%d",A[i]);return puts(""),0;}
    
    
        cc=0;
        num[0]=a;num[1]=b;
        A[++cc]=1;
        --num[1];
        for(int i=1;i<=x-1;++i){
            A[++cc]=A[cc-1]^1;
            --num[A[cc]];
        }
        t=A[cc];
        while(num[t])A[++cc]=t,--num[t];
        while(num[t^1])A[++cc]=(t^1),--num[t^1];
        if(ck()){rep(i,1,cc)printf("%d",A[i]);return puts(""),0;}
    
        return 0;
    }
    
    

    C. Intense Heat

    推了半天dp,发现是暴力。。。

    #include <bits/stdc++.h>
    #define rep(i,a,b) for(int i=a;i<=b;++i)
    #define LD long double
    using namespace std;
    int a[5555],n,k;
    LD ans=0;
    int main() {
        scanf("%d%d",&n,&k);
        rep(i,1,n) scanf("%d",&a[i]);
        rep(i,2,n) a[i]+=a[i-1];
        rep(i,1,n){
            rep(j,i+k-1,n){
                int sum = a[j]-a[i-1];
                ans = max(ans,(LD)sum/(j-i*1.0+1.0));
            }
        }
        printf("%.10f
    ",(double)ans);
        return 0;
    }
    
    

    D. Coins and Queries

    存一下,每种value出现了多少次,从大到小贪心即可

    #include <bits/stdc++.h>
    #define rep(i,a,b) for(int i=a;i<=b;++i)
    #define LD long double
    typedef long long ll;
    using namespace std;
    int n,A[55],m;
    int main() {
        scanf("%d%d",&n,&m);
        rep(i,1,n) {ll x;int tmp=0;
            scanf("%I64d",&x);
            while(x)x>>=1LL,++tmp;
            ++A[tmp-1];
        }
    
        rep(ti,1,m){ll x,ans=0;
            scanf("%I64d",&x);
            for(ll i=35;i>=0;--i){
                ll t = (1LL<<i);
                ll s = x/t;
                ll tmp = s*t;
                if(s>A[i])s=A[i];
                ans += s;
                x-=s*t;
            }
            printf("%I64d
    ",x==0?ans:-1);
        }
        return 0;
    }
    
    

    E. Tree Constructing

    先把一条直径构造出来,从左端开始早每个节点的分出来的树,通过节点的编号确定树高,k的确定分支的个数。构造完check一下是否合法,即是一棵树,且直径符合条件,还要度数符合条件。。。。然后我check直径忘+1了。。再快30s就A了。。。依旧是zz般的手速
    (没判度数被hack了……

    #include <bits/stdc++.h>
    #define rep(i,a,b) for(int i=a;i<=b;++i)
    #define LD long double
    typedef long long ll;
    const int N = 4e5 + 7;
    using namespace std;
    vector<int> G[N][2];
    void add(int u,int v){
        G[u][0].push_back(v);
        G[v][1].push_back(u);
    }
    int n,d,k;
    int cald(int p,int d){
        if(d%2==0){
            if(p<=d/2)return p-1;
            else return d-p;
        }
        else {
            int t = (d+1)/2;
            if(p<=t) return p-1;
            else return d-p;
        }
    }
    int cnt,sk[N],h[N];
    void bfs(int s,int dep){
        queue<int> q;
        q.push(s);h[s]=0;
        while(!q.empty()){
            int u=q.front();q.pop();
    
            if(h[u]==dep)continue;
            while(sk[u]<k&&cnt<n){
                ++sk[u];
                ++cnt;
                ++sk[cnt];
                h[cnt]=h[u]+1;
                add(u,cnt);
                q.push(cnt);
            }
        }
    }
    int vis[N],dis[N],dd[N];
    int ck(){
        queue<int> q;
        q.push(1);vis[1]=1;dis[1]=1;
        while(!q.empty()){
            int u=q.front();q.pop();
            for(int i=0;i<G[u][0].size();++i){
                int v=G[u][0][i];
                if(vis[v])continue;
                vis[v]=1;
                dis[v]=dis[u]+1;
                q.push(v);
            }
            for(int i=0;i<G[u][1].size();++i){
                int v=G[u][1][i];
                if(vis[v])continue;
                vis[v]=1;
                dis[v]=dis[u]+1;
                q.push(v);
            }
        }
        rep(i,1,n)if(!vis[i])return 0;
    
        int idx=1;
        rep(i,2,n){
            if(dis[idx]<dis[i])idx=i;
        }
    
        q.push(idx);
        dis[idx]=1;memset(vis,0,sizeof(vis));
        vis[idx]=1;
        while(!q.empty()){
            int u=q.front();q.pop();
            for(int i=0;i<G[u][0].size();++i){
                int v=G[u][0][i];
                if(vis[v])continue;
                vis[v]=1;
                dis[v]=dis[u]+1;
                q.push(v);
            }
            for(int i=0;i<G[u][1].size();++i){
                int v=G[u][1][i];
                if(vis[v])continue;
                vis[v]=1;
                dis[v]=dis[u]+1;
                q.push(v);
            }
        }
        idx=1;
        rep(i,2,n){
            if(dis[idx]<dis[i])idx=i;
        }
        if(dis[idx]!=d)return 0;
    
        rep(i,1,n){
            for(int j=0;j<G[i][0].size();++j)++dd[i],++dd[G[i][0][j]];
        }
        rep(i,1,n)if(dd[i]>k)return 0;
        return 1;
    }
    int main() {
        scanf("%d%d%d",&n,&d,&k);
        d++;
        cnt = d;
        for(int i=2;i<=d;++i){
            add(i-1,i);
            if(i<d){
                int dep = cald(i,d);
                sk[i]=2;
                bfs(i,dep);
            }
    
        }
    
        if(ck()){
            puts("YES");
            rep(i,1,n){
                for(int j=0;j<G[i][0].size();++j)printf("%d %d
    ",i,G[i][0][j]);
            }
        }
        else puts("NO");
        return 0;
    }
    
    
  • 相关阅读:
    moment.js相关知识总结
    git相关使用解释
    .我的第一篇博客
    QT项目配置
    重载->
    内核对象同步
    模式对话框与非模式对话框
    显示与隐式类型转换
    size_t与size_type
    系统级源代码:系统裁剪
  • 原文地址:https://www.cnblogs.com/RRRR-wys/p/9261402.html
Copyright © 2020-2023  润新知