• 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;
    }
    
    
  • 相关阅读:
    如何基于日志,同步实现数据的一致性和实时抽取?
    实例解说AngularJS在自动化测试中的应用
    漏洞管理平台『洞察』部署指南
    UAVStack的慢SQL数据库监控功能及其实现
    淡说Linux 的发展史
    一张图告诉你E-R图怎么画
    一张图告诉你UML图怎么画❀
    最简单,最明了,看了就会的VScode和C++的配置!(Visual Studio Code)
    用Eclipse开发项目,你不能不知道的快捷键
    什么年代了,你还不会用油猴刷网课!
  • 原文地址:https://www.cnblogs.com/nonameless/p/13742735.html
Copyright © 2020-2023  润新知