zoukankan      html  css  js  c++  java
  • Codeforces_831

    A.线性判断。

    #include<bits/stdc++.h>
    using namespace std;
    
    int n,a[105] = {0};
    
    int main()
    {
        ios::sync_with_stdio(0);
        cin >> n;
        for(int i = 1;i <= n;i++)   cin >> a[i];
        int t = 1;
        while(a[t] > a[t-1])    t++;
        while(a[t] == a[t-1])   t++;
        while(a[t] < a[t-1])    t++;
        if(t > n)    cout << "YES" << endl;
        else    cout << "NO" << endl;
        return 0;
    }
    View Code

    B.map转换一下。

    #include<bits/stdc++.h>
    using namespace std;
    
    map<char,char> mp;
    string s,s1,s2;
    int main()
    {
        ios::sync_with_stdio(0);
        cin >> s1 >> s2 >> s;
        for(int i = 0;i < 26;i++)
        {
            mp[s1[i]] = s2[i];
            mp[s1[i]+'A'-'a'] = s2[i]+'A'-'a';
        }
        for(int i = 0;i < s.length();i++)
        {
            if(mp.count(s[i]))  cout << mp[s[i]];
            else    cout << s[i];
        }
        cout << endl;
        return 0;
    }
    View Code

    C.先求评委前缀和,若要某方案符合,则必须所有n个点在k个评委的评分间隔内,枚举每个评委,对应一个点,判断是否符合要求即可,注意重复的情况。

    #include<bits/stdc++.h>
    using namespace std;
    
    int n,k,a[2005],b[2005];
    map<int,int> mp,ok;
    
    int main()
    {
        ios::sync_with_stdio(0);
        cin >> k >> n;
        for(int i = 1;i <= k;i++)   cin >> a[i];
        for(int i = 2;i <= k;i++)   a[i] += a[i-1];
        for(int i = 1;i <= k;i++)   mp[a[i]] = 1;
        for(int i = 1;i <= n;i++)   cin >> b[i];
        for(int i = n;i >= 1;i--)   b[i] -= b[1];
        int ans = 0;
        for(int i = 1;i <= k;i++)
        {
            int flag = 1;
            for(int j = 1;j <= n;j++)
            {
                if(!mp.count(a[i]+b[j]))
                {
                    flag = 0;
                    break;
                }
            }
            if(flag && !ok.count(a[i]))
            {
                ans++;
                ok[a[i]] = 1;
            }
        }
        cout << ans << endl;
        return 0;
    }
    View Code

    D.先对人和钥匙排序,最优的结果肯定是人在钥匙中连续的某一段,暴力枚举每一段就可以了。

    #include<bits/stdc++.h>
    using namespace std;
    
    int n,k,p,a[2005],b[2005];
    
    
    int main()
    {
        ios::sync_with_stdio(0);
        cin >> n >> k >> p;
        for(int i = 1;i <= n;i++)   cin >> a[i];
        for(int i = 1;i <= k;i++)   cin >> b[i];
        sort(a+1,a+1+n);
        sort(b+1,b+1+k);
        int ans = INT_MAX;
        for(int i = 1;i+n-1 <= k;i++)
        {
            int maxx = 0;
            for(int j = 1;j <= n;j++)
            {
                int t = i+j-1;
                maxx = max(maxx,abs(a[j]-b[t])+abs(b[t]-p));
            }
            ans = min(ans,maxx);
        }
        cout << ans << endl;
        return 0;
    }
    View Code

    E.给每个数字开个set,储存每个数字下标,原数组排序一下,从小到大开始操作,用树状数组计数。

    #include<bits/stdc++.h>
    using namespace std;
    
    int n,a[100005],tree[100005] = {0};
    set<int> s[100005];
    
    inline int lowbit(int x)
    {
        return x&-x;
    }
    
    void update(int pos,int x)
    {
        while(pos <= n)
        {
            tree[pos] += x;
            pos += lowbit(pos);
        }
    }
    
    int getsum(int pos)
    {
        int sum = 0;
        while(pos > 0)
        {
            sum += tree[pos];
            pos -= lowbit(pos);
        }
        return sum;
    }
    
    int main()
    {
        ios::sync_with_stdio(0);
        cin >> n;
        for(int i = 1;i <= n;i++)
        {
             cin >> a[i];
             s[a[i]].insert(i);
             update(i,1);
        }
        sort(a+1,a+1+n);
        int now = 0;
        long long ans = 0;
        for(int i = 1;i <= n;i++)
        {
            int t = a[i];
            auto it = s[t].lower_bound(now);
            if(it == s[t].end())
            {
                ans += getsum(n)-getsum(now);
                it = s[t].lower_bound(0);
                now = 0;
            }
            ans += getsum(*it)-getsum(now);
            now = *it;
            update(*it,-1);
            s[t].erase(it);
        }
        cout << ans << endl;
        return 0;
    }
    View Code

    F.要求最大的d,使得 

     

    枚举每一个可能的 中d的值,对每一个可能的值计算d再判断。

    #include<bits/stdc++.h>
    using namespace std;
    
    long long n,k,a[105],b[8000000];
    
    int main()
    {
        ios::sync_with_stdio(0);
        cin >> n >> k;
        int cnt = 0;
        long long sum = k;
        for(int i = 1;i <= n;i++)
        {
            cin >> a[i];
            sum += a[i];
            for(int j = 1;j*j <= a[i];j++)
            {
                b[++cnt] = j;
                b[++cnt] = (a[i]+j-1)/j;
            }
        }
        sort(b+1,b+1+cnt);
        cnt = unique(b,b+1+cnt)-b-1;
        long long ans = 0;
        for(int i = 1;i <= cnt;i++)
        {
            long long now = 0;
            for(int j = 1;j <= n;j++)   now += (a[j]+b[i]-1)/b[i];
            if(sum/now >= b[i])   ans = max(ans,sum/now);
        }
        cout << ans << endl;
        return 0;
    }
    View Code
  • 相关阅读:
    python-day24(模块语法)
    python-day23(正则表达式,RE)
    python-day22(序列化)
    python-day21(模块初级)
    python-day20(继承)
    python-day19(约束和异常处理)
    python-day18(反射)
    延迟任务
    亚马逊服务器创建root用户
    sqlalchemy orm
  • 原文地址:https://www.cnblogs.com/zhurb/p/7224599.html
Copyright © 2011-2022 走看看