zoukankan      html  css  js  c++  java
  • codeforces 368(div 2)前三题

    第一题
    很多人没看到G,被坑了

    #include<cstdio>
    #include<iostream>
    int main(){
        int n,m;
        char x,y;
        scanf("%d%d
    ",&n,&m);
        bool ok = 1;
        for (int i=1;i<=n;i++){
            for (int j=1;j<=m;j++){
                scanf("%c%c",&x,&y);
                if (x=='C'||x=='M'||x=='Y')ok = 0;
            }
        }
        if (ok)puts("#Black&White");
        else puts("#Color");
    }

    第二题,
    a[i]=1表示i位置是个仓库
    然后按边的权值排序,找一条边两个点一个是仓库一个不是仓库的

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    const int N=1e5 + 10;
    struct Edge{
        int x,y,w;
        Edge(){}
        Edge(int _x,int _y,int _w):x(_x),y(_y),w(_w){}
        bool operator < (Edge a)const {
            return w < a.w ;
        }
    }edges[N];
    int a[N];
    
    int main(){
        int n,m,k,x,y,z;
        scanf("%d%d%d",&n,&m,&k);
        for (int i=1;i<=m;i++){
            scanf("%d%d%d",&x,&y,&z);
            edges[i]=Edge(x,y,z);
        }
        if (k==0)puts("-1");
        else {
            memset(a,0,sizeof(a));
            for (int i=1;i<=k;i++){
                scanf("%d",&x);a[x]=1;
            }
            sort(edges+1,edges+m+1);
            int ans = -1;
            for (int i=1;i<=m;i++){
                if (a[edges[i].x]^a[edges[i].y]){
                    ans = edges[i].w;break;
                }
            }
            printf("%d
    ",ans);
        }
        return 0;
    }
    

    第三题

    找勾股数。。。分类讨论就行了

    #include<cstdio>
    #include<iostream>
    using namespace std;
    
    int main(){
        long long n;
        cin >> n;
        if (n==1 ||n==2 )puts("-1");
        else {
            if (n&1){
                n *= n ;
                printf("%I64d %I64d
    ",(n-1)>>1,(n+1)>>1);
            }
            else {
                n >>= 1 ;
                printf("%I64d %I64d
    ",n*n-1,n*n+1);
            }
        }
        return 0;
    }
    

    第四题

    听说是主席树

    可持久化数据结构
    承旭老师说rope可以秒,

    http://blog.csdn.net/iamzky/article/details/38348653

    暴力修改版本的,,,TLE的死死的

    这里写图片描述

    #include<cstdio>
    #include<string>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #include<ext/rope>
    using namespace std;
    using namespace __gnu_cxx;
    const int N=1e5 + 10;
    struct node{
        int pos,num;
        string a;
        node(){}
        node(int x,int y,string st){
            pos=x,num=y,a=st;
        }
    }bo;
    rope <node> *book[N];
    int ans[N];
    
    int main(){
        //freopen("fuck.in","r",stdin);
        int n,m,q,x,y,ord,tot=0;
        scanf("%d%d%d",&n,&m,&q);
        string zero = "";
        for (int i=1;i<=m;i++)zero+="0";
        book[0]=new rope<node>();
        book[0]->push_back(node(0,0,""));
        for (int i=1;i<=n;i++)
            book[0]->push_back(node(i,0,zero));
        for (int ti=1;ti<=q;ti++){
            book[ti] = new rope <node>(*book[ti-1]);
            ans[ti] = ans[ti-1];
            scanf("%d%d",&ord,&x);
            if (ord==1){
                scanf("%d",&y);
                bo = book[ti]->at(x);
                if (bo.a[y-1]=='0'){
                    bo.a[y-1]='1';
                    bo.num++;
                    book[ti]->replace(x,bo);
                    ans[ti]++;
                }
            }else if (ord==2){
                scanf("%d",&y);
                bo = book[ti]->at(x);
                if (bo.a[y-1]=='1'){
                    bo.a[y-1]='0';
                    bo.num--;
                    book[ti]->replace(x,bo);
                    ans[ti]--;
                }
            }else if (ord==3){
                bo = book[ti]->at(x);
                for (int i=0;i<m;i++){
                    bo.a[i]=(bo.a[i]=='1')?'0':'1';
                }
                bo.num = m - bo.num;
                book[ti]->replace(x,bo);
                bo = book[ti]->at(0);
                ans[ti] += m - bo.num*2 ;
            }else if (ord==4){
                book[ti]= book[x];
                ans[ti] = x;
            }
            printf("%d
    ",ans[ti]);
        }
        return 0;
    }
    
    

    承旭老师改出个优雅的修改个版本的
    MLE了

    这里写图片描述

    #include<cstdio>
    #include<string>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #include<ext/rope>
    using namespace std;
    using namespace __gnu_cxx;
    const int N=1e5+5,M=1e3+5;
    struct node{
        int num;
        bool a[M],re;
        node(){}
    }bo;
    rope <node> *book[N];
    int ans[N];
    int main(){
        //freopen("fuck.in","r",stdin);
        int n,m,q,x,y,ord;
        book[0]=new rope<node>();
        scanf("%d%d%d",&n,&m,&q);
        for (int i=0;i<n;i++)
            book[0]->insert(i,bo);
        for (int ti=1;ti<=q;ti++){
            scanf("%d%d",&ord,&x);
            if (ord==4){
                book[ti] = new rope <node>(*book[x]);
                ans[ti]=ans[x];
            }else{
                book[ti] = new rope <node>(*book[ti-1]);
                ans[ti]=ans[ti-1];
            }
            if (ord==1){
                scanf("%d",&y);
                bo=book[ti]->at(x-1);
                if (bo.a[y-1]^bo.re==0){
                    bo.a[y-1]^=1;
                    bo.num ++;
                    book[ti]->replace(x-1,bo);
                    ans[ti]++;
                }
            }
            if (ord==2){
                scanf("%d",&y);
                bo=book[ti]->at(x-1);
                if (bo.a[y-1]^bo.re==1){
                    bo.a[y-1]^=1;
                    bo.num --;
                    book[ti]->replace(x-1,bo);
                    ans[ti]--;
                }
            }
            if (ord==3){
                bo=book[ti]->at(x-1);
                bo.re^=1;
                ans[ti]+=m - bo.num*2;
                bo.num = m - bo.num;
                book[ti]->replace(x-1,bo);
            }
            printf("%d
    ",ans[ti]);
        }
        return 0;
    }
    

    搞出个树套树

    TLE,要疯了

    #include<cstdio>
    #include<string>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #include<ext/rope>
    using namespace std;
    using namespace __gnu_cxx;
    const int N=1e5 + 10,M=10e3+5;
    rope <rope<bool>* > *book[N];
    rope<bool> *tmp,*re[N];
    rope<int> *num[N];
    int ans[N];
    int main(){
       // freopen("1.in","r",stdin);
      //  freopen("1.out","w",stdout);
        int n,m,q,x,y,ord;
        book[0]=new rope<rope<bool>* >();
        tmp=new rope<bool>();
        num[0]=new rope<int>();
        re[0]=new rope<bool>();
        scanf("%d%d%d",&n,&m,&q);
        for (int i=0;i<m;i++)
            tmp->insert(i,false);
        for (int i=0;i<n;i++){
            tmp=new rope<bool>(*tmp);
            book[0]->insert(i,tmp);
            num[0]->insert(i,0);
            re[0]->insert(i,false);
        }
        for (int ti=1;ti<=q;ti++){
            scanf("%d%d",&ord,&x);
         //   printf("%d: %d %d
    ",ti,ord,x);
            if (ord==4){
                book[ti] = new rope <rope<bool>* >(*book[x]);
                num[ti] = new rope<int>(*num[x]);
                re[ti] = new rope<bool>(*re[x]);
                ans[ti]=ans[x];
            }else{
                book[ti] = new rope <rope<bool>* >(*book[ti-1]);
                num[ti] = new rope<int>(*num[ti-1]);
                re[ti] = new rope<bool>(*re[ti-1]);
                ans[ti]=ans[ti-1];
            }
            if (ord==1){
                scanf("%d",&y);
                tmp=book[ti]->at(x-1);
                bool f=tmp->at(y-1),flag=re[ti]->at(x-1);
                if (f^flag==0){
                    tmp=new rope<bool>(*tmp);
                    f^=1;
                    tmp->replace(y-1,f);
                    book[ti]->replace(x-1,tmp);
                    int nu=num[ti]->at(x-1);
                    nu++;
                    num[ti]->replace(x-1,nu);
                    ans[ti]++;
                }
            }
            if (ord==2){
                scanf("%d",&y);
                tmp=book[ti]->at(x-1);
                bool f=tmp->at(y-1),flag=re[ti]->at(x-1);
                if (f^flag==1){
                    tmp=new rope<bool>(*tmp);
                    f^=1;
                    tmp->replace(y-1,f);
                    book[ti]->replace(x-1,tmp);
                    int nu=num[ti]->at(x-1);
                    nu--;
                    num[ti]->replace(x-1,nu);
                    ans[ti]--;
                }
            }
            if (ord==3){
                re[ti]->replace(x-1,re[ti]->at(x-1)^1);
                //printf("%d %d
    ",bo.num,bo.cnt);
                ans[ti]+=m - num[ti]->at(x-1)*2;
                num[ti]->replace(x-1,m-num[ti]->at(x-1));
            }
          /*  for (int i=0;i<n;i++){
                tmp=book[0]->at(i);
                for (int j=0;j<m;j++){
                    bool f=tmp->at(j);
                    printf("%d ",f^re[0]->at(i));
                }
                puts("");
            }*/
            printf("%d
    ",ans[ti]);
        }
        return 0;
    }
    

    丧心病狂的STL
    http://tieba.baidu.com/p/2215390730

  • 相关阅读:
    ajax代码及简单封装
    web开发中不同设备浏览器的区分
    JS实现带复选框的下拉菜单
    常用浏览器的编码设置
    PHP实现实现数字补零格式化
    Linux杂碎2/SHELL
    OS
    Linux sudoers
    代理缓存服务器squid
    es6
  • 原文地址:https://www.cnblogs.com/cww97/p/12349380.html
Copyright © 2011-2022 走看看