Solution -「營業」「ABC 170」Not Divisible
阿新 • • 發佈:2021-07-08
Description
Link.
給出一個長度為 \(n\) 的序列 \(a\),求 \(\sum_{i=1}^{n}[\forall j\in[1,i)\cup(i,n],a_{j}\nmid a_{i}]\)。
Solution
首先特判序列中有 \(1\) 的情況。
然後調和級數把每個數的倍數開桶記錄。
最後掃一遍序列,看該元素在桶裡面出現的次數不超過一就有貢獻。
#include<bits/stdc++.h> using namespace std; typedef long long ll; inline ll read() { ll x=0,f=0; char ch=getchar(); while(ch<'0'||ch>'9') f|=(ch=='-'),ch=getchar(); while(ch>='0'&&ch<='9') x=x*10+(ch&15),ch=getchar(); return f?-x:x; } const int N=200100,M=1000000; int a[N],bc[M]; signed main() { int n=read(); for(int i=1;i<=n;++i) a[i]=read(); int cnt=0,ans=0; for(int i=1;i<=n;++i) (a[i]==1)&&(++cnt); if(cnt) return printf("%d\n",cnt>1?0:1),0; for(int i=1;i<=n;++i) for(int j=a[i];j<=M;j+=a[i]) ++bc[j]; for(int i=1;i<=n;++i) (bc[a[i]]<=1)&&(++ans); printf("%d\n",ans); return 0; }