zoukankan      html  css  js  c++  java
  • Codeforces Round #565 (Div. 3) A B C E

    Codeforces Round #565 (Div. 3)

    Divide it!

    由题可知,分别消掉1个2,3,5分别需要1,2,3的花费

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    ll q,n;
    int main(){
        cin>>q;
        while(q--){
            cin>>n;
            ll cnt=0;
            ll p=-1;
            int flag=0;
            while(p<cnt){
                p=cnt;
                if(n%2ll==0) {
                    n=n/2ll;
                    cnt++;
                }
                if(n%3==0){
                    n=n/3ll;
                    cnt+=2ll;
                }
                if(n%5ll==0){
                    n=n/5ll;
                    cnt+=3ll;
                }
                if(n==1) flag=1;
            }
        if(flag)cout<<cnt<<"
    ";
        else cout<<"-1
    ";
        }
        return 0;
    }
    View Code

    Merge it!

    将ai=ai%3(1<=ai<=1e9),统计 0 1 2的个数,res=a[0]+(1+2的个数)+剩余的1的个数/3或者剩余2的个数/3

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    
    
    int t,n,a[4];
    int main(){
        
        cin>>t;
        while(t--){
            for(int i=0;i<=2;i++){
                a[i]=0;
            }
            cin>>n;
            int c,res;
            for(int i=0;i<n;i++){
                cin>>c;
                c=c%3;
                a[c]++;
            }
            if(a[1]>a[2]){
                a[1]=a[1]-a[2];
                res=a[2];
                res=res+a[1]/3;
            }else{
                res=a[1];
                a[2]=a[2]-a[1];
                res+=a[2]/3;
            }
            res=res+a[0];
            cout<<res<<"
    ";
        }
        return 0;
    }
    View Code

    Lose it!

    4,8,15,16,23,42 分别记为 1 2 3 4 5 6

    b[i]表示有b[i]个从1到i连续的序列

    if b[i-1]>0 那么b[i]++,b[i-1]--;

    最后得到b[6]个从1到6连续的序列

    需要删除的数 n-b[6]*6

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int N=1e6;
    
    
    int n;
    int a[N],p[50],b[10]={0};
    int main(){
        p[4]=1,p[8]=2,p[15]=3,p[16]=4,p[23]=5,p[42]=6;
        b[0]=N;
        cin>>n;
        int res=0;
        int c;
        for(int i=0;i<n;i++){
            cin>>c;
            if(b[p[c]-1]>0) b[p[c]]++,b[p[c]-1]--;
        }
        res=n-b[6]*6;
        cout<<res<<"
    ";
        return 0;
    }
    View Code

    Cover it!

    二分染色,dfs bfs 都行,选择点少的颜色输出

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int N=2e5+100;
    
    int t;
    int n,m;
    int vis[N];
    int cnt[2];
    struct Edge{
        int to,next;
    }e[N*2];
    int head[N],tot;
    void addEdge(int u,int v){
        e[tot].to=v;
        e[tot].next=head[u];
        head[u]=tot++;
    }
    
    int dfs(int u,int c){
        vis[u]=c;
        cnt[c]++;
        for(int i=head[u];i!=-1;i=e[i].next){
            int v=e[i].to;
            if(vis[v]==-1){
                dfs(v,c^1);
            }
        }
    }
    int main(){
        std::ios::sync_with_stdio(false);
        cin>>t;
        while(t--){
            cin>>n>>m;
            memset(head,-1,sizeof(int)*(n+100));
            memset(vis,-1,sizeof(int)*(n+100));
            tot=0;
            cnt[0]=0,cnt[1]=0;
            int u,v;
            for(int i=0;i<m;i++){
                cin>>u>>v;
                addEdge(u,v);
                addEdge(v,u);
            }
            dfs(1,0);
            int c,d;
            if(cnt[0]>cnt[1]) c=1,d=cnt[1];
            else c=0,d=cnt[0];
            cout<<d<<"
    ";
            for(int i=1;i<=n;i++){
                if(vis[i]==c) cout<<i<<" ";
            }
            cout<<"
    ";
        }
        return 0;
    }
    View Code
  • 相关阅读:
    标签的讲解
    属性分类
    LeetCode 003. 无重复字符的最长子串 双指针
    Leetcode 136. 只出现一次的数字 异或性质
    Leetcode 231. 2的幂 数学
    LeetCode 21. 合并两个有序链表
    象棋博弈资源
    acwing 343. 排序 topsort floyd 传播闭包
    Leetcode 945 使数组唯一的最小增量 贪心
    Leetcode 785 判断二分图 BFS 二分染色
  • 原文地址:https://www.cnblogs.com/YJing814/p/11004792.html
Copyright © 2011-2022 走看看