zoukankan      html  css  js  c++  java
  • 2019东北农业大学省赛积分赛第二场订正(b,k)

    b题

    只需要把递增的地方累加起来,最后加上最大值减去最后一点的值即可

    ac代码

    #include<cstdio>
    #include<algorithm>
    using namespace std;
    int a[100005];
    int main()
    {
        int t;
        scanf("%d",&t);
        while(t--)
        {
            int n;
            int ans=0;
            int Max=0;
            a[0]=1e13+1000;
            scanf("%d",&n);
            for(int i=1;i<=n;i++)
            scanf("%d",&a[i]);
            for(int i=1;i<=n;i++)
            {
                if(a[i]>a[i-1])  ans+=a[i]-a[i-1];
                Max=max(Max,a[i]);
            }
            if(a[n]!=Max) ans+=Max-a[n];
            printf("%d
    ",ans);
        }
    }

    k题

    去掉m个字母保持字典序最小

    在m未耗尽之前保持双端队列内的字母为递增

    最后若m若有剩余 队列内的字母一定是非递减的 只需去掉后m个即可

    #include<cstdio>
    #include<algorithm>
    #include<queue>
    #include<string>
    #include<iostream>
    #include<list>
    #include<stack>
    #include<deque>
    using namespace std;
    char tmp[100005];
    int main()
    {
        //freopen("in.txt","r",stdin);
        int t;
        scanf("%d",&t);
        while(t--)
        {
            deque<char>s;
            int n,m;
            scanf("%d%d",&n,&m);
            scanf("%s",tmp+1);
            for(int i=1; i<=n; i++)
            {
                while(s.size()&&s.back()>tmp[i]&&m>0) s.pop_back(),m--;
                s.push_back(tmp[i]);
            }
            //cout<<m<<endl;
            while(s.size()>m) printf("%c",s.front()),s.pop_front();
            printf("
    ");
            if(!s.empty()) s.pop_front();
        }
    }
  • 相关阅读:
    07组合,模版
    06享元、责任链
    05观察,命令
    04代理,迭代器
    03单例,策略
    02工厂,创建者
    01基础
    css随记02布局
    css随记01编辑技巧,背景与边框
    nodejs随记03
  • 原文地址:https://www.cnblogs.com/caowenbo/p/11852321.html
Copyright © 2011-2022 走看看