zoukankan      html  css  js  c++  java
  • Full_of_Boys训练2总结

    题目来源::西安电子科技大学第16届程序设计竞赛网络同步赛

    A, B, C: easy problem

    D. 另一个另一个简单题

    做法是加起来,除n。希望会推导的聚聚指点。

    #include <bits/stdc++.h>
    const int inf =0x3f3f3f3f;
    using namespace std;
    int T;
    int ans;
    int main(){
        scanf("%d",&T);
        while(T--){int n;
            scanf("%d",&n);ans=0;
            for(int i=1;i<=n;++i){int x;
                scanf("%d",&x);
                ans+=x;
            }
            printf("%d
    ",ans/n);
        }
    }
    

    F. Operating System

    贪心,每次替换掉该元素下一个出现的最远的元素。原题:BZOJ1826

    #include <cstdio>
    #include <algorithm>
    #include <queue>
    #include <cstring>
    typedef long long ll;
    const int maxn = 70000+700;
    using namespace std;
    int n,m;
    int a[maxn],pr[maxn],pos[maxn],in[maxn],cnt=0;
    ll b[maxn],v[maxn];
    struct node{
        int w;
        node(){}
        node(int x){w=x;}
        bool operator < (node a)const {
            return pos[a.w] > pos[w];
        }
    };
    priority_queue<node>q;
    int main()
    {
        int qq;
        while(scanf("%d%d%d",&n,&m,&qq)!=EOF){
            cnt=0;
            memset(in,0,sizeof(in));
            memset(pos,0,sizeof(pos));
            memset(pr,0,sizeof(pr));
            memset(a,0,sizeof(a));
            memset(b,0,sizeof(b));
            memset(v,0,sizeof(v));
            while(!q.empty())q.pop();
    
            for(int i=1;i<=qq;++i) scanf("%lld",&b[i]),v[cnt++]=(b[i]);
            sort(v,v+cnt);
            cnt = unique(v,v+cnt)-v;
            for(int i=1;i<=qq;++i){
                a[i]= lower_bound(v,v+cnt,b[i])-v+1;
            }
            for(int i=0;i<maxn;++i) pr[i]=qq+1;
            for(int i=qq;i>=1;--i){
                pos[i]=pr[a[i]];
                pr[a[i]]=i;
            }
            pos[qq+1]=qq+1;
            int ans=0,sz=0;
            for(int i=1;i<=qq;++i){
                if(in[a[i]]){
                    q.push(node{i});
                    continue;
                }
                if(sz==n){
                    while(!q.empty()){
                        int u=q.top().w;q.pop();
                        if(in[a[u]]){
                            in[a[u]]=0;
                            break;
                        }
                    }
                }
                else ++sz;
                in[a[i]]=1;
                ++ans;
                q.push(node{i});
            }
            printf("%d
    ",ans);
        }
        return 0;
    }

    E.Xieldy And His Password

    dp[i][j]表示以i这一位为最高位,模3等于j的方法数。那么转移就是:t=(j*2+a[i])%3 ,dp[i][t] = dp[i-1][j]; 还有一个转移是只包含第i位的方案所以dp[a[i]]]++;

    #include <bits/stdc++.h>
    typedef long long ll;
    using namespace std;
    char s[1000007];
    ll dp[1000007][3];
    int main(){
        while(~scanf(" %s",s)) {int len=strlen(s);
            memset(dp,0,sizeof(dp));
            ++dp[0][s[0]-'0'];
            for(int i=1;i<len;++i){
                for(int j=0;j<3;++j){
                    int t = (2*j%3+s[i]-'0')%3;
                    dp[i][t]=dp[i-1][j];
                }
                ++dp[i][s[i]-'0'];
            }
            ll ans = 0;
            for(int i=0;i<len;++i)ans+=dp[i][0];
            printf("%lld
    ",ans);
        }
    }
    

     J. Database

    大模拟。。。仰慕zyc巨神的200+代码,不贴了

    反思:完全没有罚时意识,自我放弃罚时。。。导致6题倒数。对于有明显确定思路的题,必须过手造数据,才能交。中文题感觉很良好,这题要是英文估计凉一半。对于没思路题的难度可以跟自己做出的其他相同他人数的题对比一下,确定是找规律还是推公式。dp状态确定极其不熟练,很简单的状态就是没思路,需要加强。但是,zyc码力惊人!!!orz

  • 相关阅读:
    阅读计划
    个人介绍
    构建之法阅读笔记04
    结对开发——返回一个整数数组中最大子数组的和 (首尾相接版)
    结对开发——返回一个整数数组中最大子数组的和
    学习进度条(三)
    构建之法阅读笔记03
    结对开发——四则运算(三)
    四则运算——单元测试(测试方法:Right-BICEP )
    学习进度条(二)
  • 原文地址:https://www.cnblogs.com/RRRR-wys/p/8904593.html
Copyright © 2011-2022 走看看