zoukankan      html  css  js  c++  java
  • 2019银联高校极客挑战赛初赛第一场总结

     
    2题,97名,T恤到手~
    不愧是银联的比赛,密码的安全性很高,整得我自己都快记不住了。。
    话说实名认证做晚了,emmm不知道会不会有影响
    题目的话难度适中,思路也比较清晰,就是自己代码写得有点挫,WA了好几发-_-
     
    上题解
     
    码队女朋友的王者之路
     
    简单模拟即可,注意净胜场最大可能在赛季过程中,注意long long
     
    #include<bits/stdc++.h>
    #define MAX 105
    using namespace std;
    typedef long long ll;
    
    string s;
    
    int main()
    {
        int t,n,m,i,j,k;
        scanf("%d",&t);
        while(t--){
            scanf("%d%d%d",&n,&k,&m);
            scanf(" ");
            cin>>s;
            ll c=0,cc=0,ans=0;
            for(i=0;i<n;i++){
                if(s[i]=='1') c++;
                else{
                    if(k>0) k--;
                    else c--;
                }
                cc=max(cc,c);
            }
            if(c<0) printf("%lld
    ",max(0ll,cc));
            else printf("%lld
    ",max(0ll,c*(m-1)+cc));
        }
        return 0;
    }
    码队女朋友的王者之路
     
    自学图论的码队弟弟
     
    先用dfs找到奇数环,然后二分确定环内元素的值,最后跑一边bfs找出环外元素的值。
     
    #include<bits/stdc++.h>
    #define MAX 100005
    using namespace std;
    typedef long long ll;
    
    vector<int> v[MAX],vv,vvv;
    map<int,map<int,int> > mp;
    queue<int> q;
    int a[MAX],b[MAX],bb[MAX];
    int f;
    void dfs(int pre,int x){
        if(f==1) return;
        for(int i=0;i<v[x].size();i++){
            int to=v[x][i];
            if(to==pre) continue;
            if(b[to]){
                vv.push_back(to);
                f=1;
                return;
            }
            b[to]=1;
            vv.push_back(to);
            dfs(x,to);
            if(f==1) return;
            vv.pop_back();
        }
    }
    int main()
    {
        int t,n,x,y,z,i,j;
        scanf("%d",&n);
        for(i=1;i<=n;i++){
            scanf("%d%d%d",&x,&y,&z);
            v[x].push_back(y);
            v[y].push_back(x);
            mp[x][y]=z;
            mp[y][x]=z;
        }
        if(n==1){
            printf("%d
    ",z);
            return 0;
        }
        f=0;
        b[1]=1;
        vv.push_back(1);
        dfs(-1,1);
        for(i=0;i<vv.size();i++){
            if(vv[i]==vv[vv.size()-1]){
                for(j=i;j<vv.size();j++){
                    vvv.push_back(vv[j]);
                }
                break;
            }
        }
    //    for(i=0;i<vvv.size();i++){
    //        printf("%d ",vvv[i]);
    //    }printf("
    ");
        int l=-32768,r=32768,m;
        while(l<=r){
            m=(l+r)/2;
            int ff=0;
            a[vvv[0]]=m;
            for(i=1;i<vvv.size()-1;i++){
                a[vvv[i]]=mp[vvv[i-1]][vvv[i]]-a[vvv[i-1]];
                if(a[vvv[i]]<-32768&&(i&1)){
                    ff=1;
                    break;
                }
                else if(a[vvv[i]]<-32768&&(i%2==0)){
                    ff=2;
                    break;
                }
                else if(a[vvv[i]]>32768&&(i&1)){
                    ff=2;
                    break;
                }
                else if(a[vvv[i]]>32768&&(i%2==0)){
                    ff=1;
                    break;
                }
            }
            if(ff==1){
                r=m-1;
            }
            else if(ff==2){
                l=m+1;
            }
            else{
                int z=mp[vvv[vvv.size()-2]][vvv[vvv.size()-1]]-a[vvv[vvv.size()-2]];
                if(z<-32768){
                    r=m-1;
                }
                else if(z>32768){
                    l=m+1;
                }
                else if(a[vvv[0]]==z){
                    break;
                }
                else if(a[vvv[0]]<z){
                    l=m+1; 
                }
                else{
                    r=m-1;
                }
            }
        }
        for(i=0;i<vvv.size()-1;i++){
            q.push(vvv[i]);
            bb[vvv[i]]=1;
        }
        while(q.size()){
            int p=q.front();
            for(i=0;i<v[p].size();i++){
                int to=v[p][i];
                if(bb[to]) continue;
                bb[to]=1;
                a[to]=mp[p][to]-a[p];
                q.push(to);
            }
            q.pop();
        }
        for(i=1;i<=n;i++){
            printf("%d
    ",a[i]);
        }
        return 0;
    }
    /*
    8
    1 2 11
    2 3 7
    2 4 9
    4 5 2
    4 6 8
    5 7 13
    6 8 -1
    7 8 -2
    */
    自学图论的码队弟弟
    折扇染色(非正解)
     
    猜的结论,只能过样例。。正解貌似要用到状态转移
     
    #include<bits/stdc++.h>
    #define MAX 500005
    #define MOD 1000000007
    using namespace std;
    typedef long long ll;
    
    ll a[MAX];
    
    int main()
    {
        int t,i,j,k;
        a[1]=1;
        for(i=2;i<=500002;i++){
            a[i]=a[i-1]*i%MOD;
        }
        scanf("%d",&t);
        while(t--){
            ll n,m;
            scanf("%lld%lld",&n,&m);
            if(m==4) printf("%lld
    ",a[m]*n%MOD);
            else if(m>4) printf("%lld
    ",a[m+1]*(n-1)%MOD);
            else printf("%lld
    ",a[m-1]*(n+1)%MOD);
        }
        return 0;
    }
    折扇染色(非正解)
  • 相关阅读:
    人件阅读笔记之三
    明日计划:团队开发Fooks第十天
    明日计划:团队开发Fooks第九天
    明日计划:团队开发Fooks第八天
    明日计划:团队开发Fooks第七天
    明日计划:团队开发Fooks第六天
    优先队列
    KMP
    django-中间件
    Ajax--参数,csrf跨站请求伪造,serialize(),上传文件formdata
  • 原文地址:https://www.cnblogs.com/yzm10/p/11218461.html
Copyright © 2011-2022 走看看