Codeforces Round #766 (Div. 2)补题 E.Not Adding 数论GCD

Codeforces Round #766 (Div. 2)补题 E.Not Adding 数论GCD

题目大意

给定序列Codeforces Round #766 (Div. 2)补题 E.Not Adding 数论GCD,包含Codeforces Round #766 (Div. 2)补题 E.Not Adding 数论GCD个不同的整数。每次可以从序列中选择两个元素Codeforces Round #766 (Div. 2)补题 E.Not Adding 数论GCDCodeforces Round #766 (Div. 2)补题 E.Not Adding 数论GCD(要求Codeforces Round #766 (Div. 2)补题 E.Not Adding 数论GCD不位于序列中),将他们从序列中删除,同时将Codeforces Round #766 (Div. 2)补题 E.Not Adding 数论GCD插入序列中。求最大的操作次数。

思路

首先,原序列中任意数字的Codeforces Round #766 (Div. 2)补题 E.Not Adding 数论GCD一定小于序列中的最大值,即Codeforces Round #766 (Div. 2)补题 E.Not Adding 数论GCD,且对于操作后的子集仍然成立。

那么我们可以假设将Codeforces Round #766 (Div. 2)补题 E.Not Adding 数论GCD中的所有数字都加入集合中来,然后判断每个数究竟能否出现在集合中。

考虑某个数Codeforces Round #766 (Div. 2)补题 E.Not Adding 数论GCD如何出现在序列中:

  1. Codeforces Round #766 (Div. 2)补题 E.Not Adding 数论GCD
  2. Codeforces Round #766 (Div. 2)补题 E.Not Adding 数论GCDCodeforces Round #766 (Div. 2)补题 E.Not Adding 数论GCD是通过Codeforces Round #766 (Div. 2)补题 E.Not Adding 数论GCD操作得到的Codeforces Round #766 (Div. 2)补题 E.Not Adding 数论GCD的子集中的元素)

那么显然第二种情况的Codeforces Round #766 (Div. 2)补题 E.Not Adding 数论GCD是通过Codeforces Round #766 (Div. 2)补题 E.Not Adding 数论GCD得到的,那么一定存在Codeforces Round #766 (Div. 2)补题 E.Not Adding 数论GCD使得Codeforces Round #766 (Div. 2)补题 E.Not Adding 数论GCDCodeforces Round #766 (Div. 2)补题 E.Not Adding 数论GCD的倍数。

所以我们可以枚举Codeforces Round #766 (Div. 2)补题 E.Not Adding 数论GCD的所有倍数,对于每个存在于Codeforces Round #766 (Div. 2)补题 E.Not Adding 数论GCD序列中的倍数Codeforces Round #766 (Div. 2)补题 E.Not Adding 数论GCDCodeforces Round #766 (Div. 2)补题 E.Not Adding 数论GCD,如果最终的Codeforces Round #766 (Div. 2)补题 E.Not Adding 数论GCD结果是Codeforces Round #766 (Div. 2)补题 E.Not Adding 数论GCD,那么代表Codeforces Round #766 (Div. 2)补题 E.Not Adding 数论GCD一定能被凑出来,也就是Codeforces Round #766 (Div. 2)补题 E.Not Adding 数论GCD会以第二种方式出现在集合中。我们从Codeforces Round #766 (Div. 2)补题 E.Not Adding 数论GCD统计所有满足条件的Codeforces Round #766 (Div. 2)补题 E.Not Adding 数论GCD

额外注意,因为第一种情况(Codeforces Round #766 (Div. 2)补题 E.Not Adding 数论GCD本身存在于Codeforces Round #766 (Div. 2)补题 E.Not Adding 数论GCD序列中),所以在枚举的过程中一定会多统计Codeforces Round #766 (Div. 2)补题 E.Not Adding 数论GCDCodeforces Round #766 (Div. 2)补题 E.Not Adding 数论GCD,所以最终结果减去Codeforces Round #766 (Div. 2)补题 E.Not Adding 数论GCDCodeforces Round #766 (Div. 2)补题 E.Not Adding 数论GCD

Accepted Code

#include <bits/stdc++.h>
using namespace std;

const int N = 1e6 + 10;
int a[N];

inline void solve(){
    int n = 0, maxx = -1, ans = 0; cin >> n;
    for(int i = 1; i <= n; i++){
        int x = 0; cin >> x;
        maxx = max(maxx, x), a[x]++;
    }
    for(int i = 1; i <= maxx; i++){
        int gcd = 0;
        for(int j = i; j <= maxx; j += i) 
            if(a[j]) gcd = __gcd(gcd, j);
        if(gcd == i) ans++;
    }
    cout << ans - n << endl;
}

signed main(){
    solve();
    return 0;
}

版权声明:本文为博主HeartFireY原创文章,版权归属原作者,如果侵权,请联系我们删除!

原文链接:https://blog.csdn.net/yanweiqi1754989931/article/details/122568369

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
社会演员多的头像社会演员多普通用户
上一篇 2022年1月18日 下午8:52
下一篇 2022年1月18日 下午9:07

相关推荐