• Codeforces Round #673 (Div. 2)


    题目传送门

    A. Copy-paste

    把最小的数加到其他数上。

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    #define rep(i, a, b) for (register int i = a; i <= b; i++)
     
    int n, k, a[1010];
    void solve(int T) {
        
        cin >> n >> k;
        rep(i, 1, n) cin >> a[i];
        sort(a + 1, a + n + 1);
        int ans = 0;
        rep(i, 2, n) ans += ceil((k - a[i]) / a[1]);
        cout << ans << endl;
    }
     
    int main()
    {
        ios_base::sync_with_stdio(0);
        cin.tie(0);
        cout.tie(0);
     
        // freopen("in.txt", "r", stdin);
        // freopen("out.txt", "w", stdout);
     
        int T = 1;
        cin >> T;
        rep(i, 1, T) solve(i);
    }
    View Code

    B. Two Arrays

    小于$frac{x}{2}$的涂黑,大于$frac{x}{2}$的涂白,等于$frac{x}{2}$间隔着涂。

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    #define rep(i, a, b) for (register int i = a; i <= b; i++)
     
    ll n, k, a[100010], flag;
    void solve(int T) {
        
        cin >> n >> k;
        rep(i, 1, n) cin >> a[i];
        rep(i, 1, n) {
            if(a[i] * 2 < k) cout << "1 ";
            else if(a[i] * 2 > k) cout << "0 ";
            else {
                cout << flag << " ";
                flag ^= 1;
            }
        }
        cout << endl;
     
    }
     
    int main()
    {
        ios_base::sync_with_stdio(0);
        cin.tie(0);
        cout.tie(0);
     
        // freopen("in.txt", "r", stdin);
        // freopen("out.txt", "w", stdout);
     
        int T = 1;
        cin >> T;
        rep(i, 1, T) solve(i);
    }
    View Code

    C.k-Amazing Numbers

    预处理每个数字的最大间隔,转化以下即可。

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    #define rep(i, a, b) for (register int i = a; i <= b; i++)
     
    ll n, a[300010], itv[300010], cnt[300010];
    ll ans[300010];
    void solve(int T) {
        
        cin >> n;
        rep(i, 1, n) cin >> a[i], itv[i] = cnt[i] = 0, ans[i] = -1;
        rep(i, 1, n) itv[a[i]] = max(itv[a[i]], i - cnt[a[i]]), cnt[a[i]] = i;
        rep(i, 1, n) itv[i] = max(itv[i], n + 1 - cnt[i]);
        int tmp = 1;
        for(int i = 1; i <= n; i++) for(; tmp <= n + 1 - itv[i]; tmp++) ans[tmp] = i;
        for(int i = n; i; i--) cout << ans[i] << " ";
        cout << endl;
     
     
    }
     
    int main()
    {
        ios_base::sync_with_stdio(0);
        cin.tie(0);
        cout.tie(0);
     
        // freopen("in.txt", "r", stdin);
        // freopen("ans.txt", "w", stdans);
     
        int T = 1;
        cin >> T;
        rep(i, 1, T) solve(i);
    }
    View Code

    D - Make Them Equal

    要把所有数都变成一样,贪心构造。

    首先可以花费至多$(n-1)*2$将所有数加到a[1]上,然后再花费$n-1$再把a[1]平均分到每个数上。

    这里我用的优先队列是防止把$a[i]$变为$i$的倍数的时候$a[1]$为负。

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    #define rep(i, a, b) for (register int i = a; i <= b; i++)
    
    struct point {
        int id, v;
        bool operator<(const point & f) const {
            return ceil(1.0 * v / id) * id - v > ceil(1.0 * f.v / f.id) * f.id - f.v;
        }
    };
    
    
    vector<int> ans[300010];
    int n, a[100010], tot;
    priority_queue<point> q;
    int sum;
    void solve(int T) {
        cin >> n;
        cin >> a[1];
        sum = a[1];
        while(!q.empty()) q.pop();
        rep(i, 2, n) cin >> a[i], sum += a[i], q.push((point){i, a[i]});
        if(sum % n) {
            cout << "-1" << endl;
            return;
        }
        tot = 0;
        while(!q.empty()) {
            point x = q.top();
            q.pop();
            if(x.v % x.id) {
                a[1] -= ceil(1.0 * x.v / x.id) * x.id - x.v;
                if(a[1] < 0) {
                    cout << "-1" << endl;
                    return;
                }
                ans[++tot].clear();
                ans[tot].push_back(1);
                ans[tot].push_back(x.id);
                ans[tot].push_back(ceil(1.0 * x.v / x.id) * x.id - x.v);
                x.v = ceil(1.0 * x.v / x.id) * x.id;
            }
            a[1] += x.v;
            ans[++tot].clear();
            ans[tot].push_back(x.id);
            ans[tot].push_back(1);
            ans[tot].push_back(x.v / x.id);
        }
        rep(i, 2, n) {
            ans[++tot].clear();
            ans[tot].push_back(1);
            ans[tot].push_back(i);
            ans[tot].push_back(sum / n);
        }
        cout << tot << endl;
        rep(i, 1, tot) {
            rep(j, 0, 2) cout << ans[i][j] << " ";
            cout << endl;
        }
    }
    
    int main()
    {
        ios_base::sync_with_stdio(0);
        cin.tie(0);
        cout.tie(0);
    
        // freopen("in.txt", "r", stdin);
        // freopen("ans.txt", "w", stdans);
     
        int T = 1;
        cin >> T;
        rep(i, 1, T) solve(i);
    }
    View Code
  • 相关阅读:
    EJB究竟是什么,真的那么神奇吗??
    使用GDAL图书馆RPC校正问题
    使用python写appium用例
    IOS_多线程_ASI_AFN_UIWebView
    android集成apk对一些问题经常遇到系统
    ajax j跨域请求sonp
    11gR2更换OCR和VOTE
    nyoj 47 江 河问题 【贪婪】
    JavaScript实现的购物车效果-效果好友列表
    Cocos2d-x学习笔记(五岁以下儿童) 精灵两种方式播放动画
  • 原文地址:https://www.cnblogs.com/likunhong/p/13751725.html
Copyright © 2020-2023  润新知