zoukankan      html  css  js  c++  java
  • Codeforces Round #673 (Div. 2) A

    题目链接

    A. Copy-paste

    代码:

    const int N = 1e3 + 10;
    
    int a[N];
    
    int main() {
    
        int t; cin >> t;
        while(t --) {
            int n, k; cin >> n >> k;
            for(int i = 1; i <= n; i ++) cin >> a[i];
            int ans = 0;
            sort(a + 1, a + n + 1);
            int mn = a[1];
            for(int i = 2; i <= n; i ++) {
                int d = k - a[i];
                ans += d / mn;
            }
            cout << ans << endl;
        }
        return 0;
    }
    

    B. Two Arrays

    思路:

    如果 (2 imes a[i] = T),那么就把 (a[i]) 平均放在两边,多出一个就任意。

    否则:就把 (a[i]) 放在一边, (T - a[i]) 放在另一边。

    代码:

    const int N = 1e5 + 10;
    
    int a[N], ans[N];
    
    map<int, int> mp1, mp2, mp3;
    
    int main() {
    
        int t; cin >> t;
        while(t --) {
            mp1.clear();
            mp2.clear();
            mp3.clear();
            int n, T; cin >> n >> T;
            for(int i = 1; i <= n; i ++) cin >> a[i];
            for(int i = 1; i <= n; i ++) { mp1[a[i]] ++; mp2[a[i]] ++; }
            for(int i = 1; i <= n; i ++) {
                if(T - a[i] == a[i]) {
                    if(mp1[a[i]] > mp2[a[i]] / 2) ans[i] = 0;
                    else ans[i] = 1;
                    mp1[a[i]] --;
                } else {
                    if(a[i] > T - a[i]) ans[i] = 0;
                    else ans[i] = 1;
                }
            }
            for(int i = 1; i <= n; i ++) printf("%d ", ans[i]);
            puts("");
        }
        return 0;
    }
    

    C. k-Amazing Numbers

    思路:

    找出相同两个数之间距离的最大值,对于每个数而言,默认第 (0) 个数和第 (n + 1) 个数与自己相同。

    那么对于每个距离,我们可以找出其中对应的最小值。需要注意的是:短距离合法的,长距离一定合法。

    这代码真的丑。

    代码:

    const int N = 3e5 + 10;
    
    int a[N];
    int ans[N];
    
    map<int, int> mp1, mp2;
    
    int main() {
    
        int t; cin >> t;
        while(t --) {
            mp1.clear();
            mp2.clear();
            int n; cin >> n;
            for(int i = 1; i <= n; i ++)  cin >> a[i]; 
            for(int i = 1; i <= n; i ++) {
                if(mp1[a[i]]) mp2[a[i]] = max(mp2[a[i]], i - mp1[a[i]]);
                else mp2[a[i]] = i;
                mp1[a[i]] = i;
            }
            for(int i = 1; i <= n; i ++) {
                mp2[a[i]] = max(mp2[a[i]], n - mp1[a[i]] + 1);
            }
            mp1.clear();
            for(auto it : mp2) {
                if(mp1[it.y] == 0) mp1[it.y] = it.x;
                else mp1[it.y] = min(mp1[it.y], it.x);
            }
            int tmp = INF;
            for(int i = 1; i < n; i ++) {
                if(mp1[i]) {
                    ans[i] = min(tmp, mp1[i]);
                    tmp = min(tmp, mp1[i]);
                } 
                else if(tmp != INF) ans[i] = tmp;
                else ans[i] = -1;
            }
            ans[n] = *min_element(a + 1, a + n + 1);
            for(int i = 1; i <= n; i ++) printf("%d ", ans[i]);
            puts("");
        }
        return 0;
    }
    
    
  • 相关阅读:
    「学习笔记」min_25筛
    HNOI2019游记
    【SDOI2017】数字表格
    【APIO2016】烟火表演
    【SCOI2015】小凸想跑步
    java Thread源码分析
    java ThreadGroup源码分析
    bean获取Spring容器
    spring 管理bean
    thinkphp5.0.19 request
  • 原文地址:https://www.cnblogs.com/nonameless/p/13742735.html
Copyright © 2011-2022 走看看