Codeforces Round #766 C-D

D. Not Adding

正着显然不好做
我们观察数据范围 ai 居然是小于1e6的
我们考虑反想 看一个数如何才能被得到
我们设他能被gcd(a,b)得到 那么a,b一定是得是这个数的倍数
并且其前面的系数的gcd只能是1
这样答案就呼之欲出了

#include <bits/stdc++.h>
using namespace std;
const int N = 1e6+10;
const int M = 998244353;
const int mod = 998244353;
#define int long long
#define endl '\n'
#define all(x) (x).begin(),(x).end()
#define YES cout<<"YES"<<endl;
#define NO cout<<"NO"<<endl;
#define _ 0
#define pi acos(-1)
#define INF 0x3f3f3f3f3f3f3f3f
#define fast ios::sync_with_stdio(false);cin.tie(nullptr);

void solve() {
    int n;cin>>n;
    vector<int>vis(N);
    for(int i=1;i<=n;i++){
        int x;cin>>x;
        vis[x]=1;
    }
    int cnt=0;
    for(int i=1;i<=N-10;i++){
        if(vis[i])continue;
        int res=0;
        for(int j=i*2;j<=N-10;j+=i)
            if(vis[j])res=__gcd(res,j/i);
        if(res==1)vis[i]=1,cnt++;
    }
    cout<<cnt<<endl;
}
signed main(){
    fast
    int T;T=1;
    while(T--) {
        solve();
    }
    return ~~(0^_^0);
}

C. Not Assigning

因为素数除了2之外都是奇数
而奇数刚刚好 和奇数相加是一定不是素数
所以我们中间一定要是2相连 再穿插其他数
我们考虑多个节点 发现要是有两个2的话显然不可以的
所以我们认定答案只是一条链
并且一定要用2穿插其他素数 因为只是一条链 我们232323这样即可

#include <bits/stdc++.h>
using namespace std;
const int N = 1e6+10;
const int M = 998244353;
const int mod = 998244353;
#define int long long
#define endl '\n'
#define all(x) (x).begin(),(x).end()
#define YES cout<<"YES"<<endl;
#define NO cout<<"NO"<<endl;
#define _ 0
#define pi acos(-1)
#define INF 0x3f3f3f3f3f3f3f3f
#define fast ios::sync_with_stdio(false);cin.tie(nullptr);

void solve() {
    int n;cin>>n;
    vector<int>vis(N);
    for(int i=1;i<=n;i++){
        int x;cin>>x;
        vis[x]=1;
    }
    int cnt=0;
    for(int i=1;i<=N-10;i++){
        if(vis[i])continue;
        int res=0;
        for(int j=i*2;j<=N-10;j+=i)
            if(vis[j])res=__gcd(res,j/i);
        if(res==1)vis[i]=1,cnt++;
    }
    cout<<cnt<<endl;
}
signed main(){
    fast
    int T;T=1;
    while(T--) {
        solve();
    }
    return ~~(0^_^0);
}
posted @ 2022-10-04 15:57  ycllz  阅读(23)  评论(0)    收藏  举报