zoukankan      html  css  js  c++  java
  • Codeforces Round #559 (Div. 2) (还差2题)

    总结:这次写的太菜了,一个B题写了很久, 这种维护一个最小值在计算的题目,下次要反应快点; 

       C题是一个贪心,写的时候也是想了好久....

       D题这个范围.

    题目链接:https://codeforces.com/contest/1159

    A:

    签到,算一个最开始有多少就行了,注意可以取到0,复杂度O(n)

    #include <cstdio>
    #include <iostream>
    using namespace std;
    
    int main()
    {
        int n; char c;
        int ca=0, cb=0, beg=0;
        cin>>n;
        while(n--)
        {
            cin>>c;
            if(c=='+') ca++;
            else if(c=='-')cb++;
            if(beg+ca-cb<0) beg++;
        }
        //printf("ca=%d
    cb=%d
    beg=%d
    ", ca , cb, beg);
        cout<<beg+ca-cb<<endl;
        return 0;
    }
    View Code

    B:

    给出公式,求k的范围,枚举当前的最小的a[i],求满足条件的k即可,这题反应太慢了...复杂度O(nlogn)

    #include <cstdio>
    #include <iostream>
    #include <cmath>
    #include <algorithm>
    using namespace std;
    
    const int INF=0x3f3f3f3f;
    const int MAXN=1e6+5;
    struct Node{
        int val;
        int cnt;
    }a[MAXN];
    
    bool cmp(Node x, Node y){
        return x.val<y.val;
    }
    
    int main()
    {
        int ans=INF;
        int n; cin>>n;
        for(int i=1; i<=n; i++)
        {
            cin>>a[i].val;
            a[i].cnt=i;
        }
        sort(a, a+n, cmp);
        for(int i=1; i<=n; i++)
            ans=min(ans, a[i].val/max(a[i].cnt-1, n-a[i].cnt));
        cout<<ans<<endl;
        return 0;
    }
    View Code

    C:

    题意:给了n个boys对m个girls的 sweet 的min(n组),m个girls接受到n个boys的sweet的max(m组),求n个男生对m个女生的sweet的最小的和,不满足条件输出-1 ; 

    题解:先判断是否满足条件,对n个男生的min排序,对m个女生的max排序,优先将大的max添加到大的min那一组,在求一个sum;复杂度O(nlogn)

    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <iostream>
    using namespace std; 
    
    const int MAXN=2e6; 
    int a[MAXN], b[MAXN], vis[MAXN], vismin[MAXN]; 
    
    int main()
    {
        //freopen("in.txt", "r", stdin); 
        int n, m; 
        cin>>n>>m; 
        for(int i=1; i<=n; i++)
            cin>>a[i]; 
        for(int i=1; i<=m; i++)
            cin>>b[i]; 
        
        long long sum=0; 
        for(int i=1; i<=n; i++)
            sum+=a[i]; 
        sum*=m; 
        sort(a+1, a+1+n); 
        sort(b+1, b+1+m); 
        memset(vismin, 0, sizeof(vismin));
        for(int i=1; i<=n; i++) vis[i]=m-1; 
        
        int ok=1;
        for(int i=m; i>=1; i--)
        {
            if(b[i]<a[n]){
                ok=0; break;
            }
        }
        
        if(ok==0)
            cout<<"-1"<<endl;
        else 
        {
            int A=n, B=m; 
            for(int B=m; B>=1; B--)
            {
                while(b[B]<a[A]) A--; 
                if(b[B]==a[A]) 
                {
                    if(!vismin[A]) vismin[A]=1; 
                    else if(vis[A]>0) vis[A]--;
                    else if(a[A-1]==b[B]){
                        A--; vismin[A]=1; 
                    } 
                    else {
                        A--; vis[A]--; 
                    }
                    sum+=b[B]-a[A];
                }
                else 
                {
                    if(vis[A]>0) vis[A]--; 
                    else if(a[A-1]==b[B]){
                        A--; vismin[A]=1; 
                    } 
                    else {
                        A--; vis[A]--; 
                    }
                    sum+=b[B]-a[A];
                }
            }
            cout<<sum<<endl; 
        }
        return 0;
    } 
    View Code

    D:

    题意:给了n和k,n代表长度为n由0或者1组成的串,找出一个这样长度的串,且该串中最长的唯一子串的长度是k;重要条件:n,k的奇偶性相同 

    题解:找规律题,

    #include <bits/stdc++.h>
    using namespace std; 
    
    int main()
    {
        int n, k; 
        cin >> n >> k; 
        int a=(n-k)/2+1;
        for(int i=1; i<=n; i++)
        {
            if(i%a==0) printf("1"); 
            else printf("0"); 
        }    
        return 0; 
    } 
    View Code
  • 相关阅读:
    numpy数组(一)
    Iterator和Iterable区别:
    jupyter notebook安装相关问题
    Selenium+Headless Firefox配置
    最长不重复子串
    deprecated conversion from string constant to 'char*
    c++求字符串
    原型模式(Prototype)
    工厂方法模式(Factory Method)
    素数序列的生成及其应用(采用了自研的高效算法)
  • 原文地址:https://www.cnblogs.com/Yokel062/p/10913916.html
Copyright © 2011-2022 走看看