zoukankan      html  css  js  c++  java
  • ccpc网络邀请赛部分

    A - ^&^

     HDU - 6702 

    给出 a,b  求

    最小

    结果即为    a&b

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    #define pb push_back
    const int N=1e2+50;
    int main(){
        int t;scanf("%d",&t);
        while(t--){
            ll a,b,c=0;
            scanf("%lld %lld",&a,&b);
            for(int bt=0;bt<=32;bt++){
                if(( ( (a>>bt)&1 )==1ll) && ( ( (b>>bt)&1 )==1ll))c+=(1ll<<bt);
            }
            if(c==0ll)puts("1");
            else printf("%lld
    ",c);
    
        }
    
    
        // system("pause");
        return 0;
    }
    View Code

    D - path

     HDU - 6705

    一张有向图,求 m次 路径第k小的路径长

    解法:考虑如何得到有向图的所有路径,先把所有边放进小顶堆里,不断合并边得到新的路径,这时按优先队列出队顺序得到第k小,

    但这样扩展所有边会MLE,考虑不需要扩充所有边,队列里只需要维持Max条路径即可,复杂度O(  K*mlog(k))

    #include<bits/stdc++.h>
    using namespace std;
    const int N=1e5+600;
    typedef long long ll;
    #define mp make_pair
    vector<pair<int,int> >G[N];
    int n,m;
    int b[N];
    ll book[N];
    void init(){
        for(int i=1;i<=n;i++)G[i].clear();
    }
    struct node{
        int u,v;ll w;
        friend bool operator<(node a,node b){
            return a.w>b.w;
        }
    };
    int main(){ 
            int t;scanf("%d",&t);
        while(t--){
            int q;scanf("%d %d %d",&n,&m,&q);
            init();
            priority_queue<node>Q;           
            priority_queue< ll,vector<ll>,less<ll> >q1;
            
            for(int i=1;i<=m;i++){
                int u,v,w;scanf("%d %d %d",&u,&v,&w);
                G[u].push_back(mp(w,v));
                Q.push(node{u,v,w});
                q1.push(w);
            }
            for(int i=1;i<=n;i++)if(G[i].size())sort(G[i].begin(),G[i].end());
            int Max=-1;
            for(int i=1;i<=q;i++)scanf("%d",&b[i]),Max=max(Max,b[i]);
            
            int cnt=0;
            
            while(cnt<=Max&&!Q.empty()){
                int u=Q.top().u,v=Q.top().v;ll w=Q.top().w;
                book[++cnt]=w;Q.pop();
                for(int i=0;i<G[v].size();i++){
                    int tv=G[v][i].second;
                    ll tw=w+G[v][i].first;
                    if(q1.size()==Max){
                        if(tw>q1.top())break;
                        else {q1.pop();q1.push(tw);Q.push(node{u,tv,tw});}
                    }
                    else q1.push(tw),Q.push(node{u,tv,tw});
    // 
                }
            }
    
            for(int i=1;i<=q;i++)printf("%d
    ",book[ b[i] ]);
    
        }
            // system("pause");
        return 0;
    }
    View Code

    F - Shuffle Card

     HDU - 6707 

    模拟洗牌过程,倒序输出即可。

    #include<bits/stdc++.h>
    using namespace std;
    const int N=1e5+600;
    int b[N],vis[N];
    int main(){
            int n,m,x;
            scanf("%d %d",&n,&m);
            for(int i=1;i<=n;i++)scanf("%d",&x);
                for(int i=1;i<=m;i++)scanf("%d",&b[i]);
                memset(vis,0,sizeof vis);
            for(int i=m;i>=1;i--){
                if(!vis[ b[i] ]){
                    printf("%d ",b[i]);
                }
                vis[b[i]]=1;
            }
            for(int i=1;i<=n;i++){
                if(!vis[i])printf("%d ",i);
            }
            
            // system("pause");
        return 0;
    
    }
    View Code

    G - Windows Of CCPC

     HDU - 6708 

    置换规则为:将c变成ccpc,将p变成ppcp,

    不难发现左下角与k-1阶相反,其他均为k-1阶,递归处理即可。

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    #define pb push_back
    const int N=1e3+50;
    int A[N][N];
    void copy(int s,int t,int len){
        for(int i=0;i<len;i++){
            for(int j=0;j<len;j++){
                A[s+i][t+j]=A[i][j];
            }
        }
    }
    void make(int step){
        if(step==0){A[0][0]=1;return ;}
        make(step-1);
        int len=1<<(step-1);
        copy(0,len,len);
        copy(len,len,len);
        for(int i=0;i<len;i++){
            for(int j=0;j<len;j++){
                A[len+i][j]=A[i][j]^1;
            }
        }
    }
    void print(int len){
        for(int i=0;i<len;i++){
            for(int j=0;j<len;j++){
                printf("%c",A[i][j]?'C':'P');
            }
            puts("");
        }
    }
    
    int main(){
        int t;scanf("%d",&t);
            while(t--){
                int k;scanf("%d",&k);
                make(k);
                k=(1<<k);
                print(k);
            }
    
        // system("pause");
        return 0;
    }
    View Code
  • 相关阅读:
    oss blob上传
    app中画一条细线
    antd和原生交互,原生掉前端的方法
    -webkit-touch-callout 图片下载
    ifram嵌入网址 有跨域问题
    ...state
    数组对象的复制
    在vue中使用tinymce组件
    autofs自动挂载服务
    podmen
  • 原文地址:https://www.cnblogs.com/littlerita/p/13667060.html
Copyright © 2011-2022 走看看