聯賽模擬測試9 A. 嚎叫響徹在貪婪的廠房
阿新 • • 發佈:2020-10-05
題目描述
分析
一個序列是等差數列且公差不為1的條件就是各項差的絕對值的\(gcd!=1\)
從前往後依次掃即可
一定要判重
程式碼
#include<cstdio> #include<algorithm> #include<iostream> #include<cmath> #include<map> inline int read(){ int x=0,fh=1; char ch=getchar(); while(ch<'0' || ch>'9'){ if(ch=='-') fh=-1; ch=getchar(); } while(ch>='0' && ch<='9'){ x=(x<<1)+(x<<3)+(ch^48); ch=getchar(); } return x*fh; } const int maxn=1e6+5; int gcd(int aa,int bb){ if(bb==0) return aa; return gcd(bb,aa%bb); } int n,a[maxn]; std::map<int,int> vis; int main(){ freopen("factory.in","r",stdin); freopen("factory.out","w",stdout); n=read(); for(int i=1;i<=n;i++){ a[i]=read(); } int cnt=0,now,cs; for(int i=1;i<=n;i++){ cnt++; if(i==n) break; now=std::abs(a[i]-a[i+1]); vis[a[i]]=vis[a[i+1]]=cnt; if(now<=1) continue; i++; while(1){ if(vis[a[i+1]]==cnt) break; vis[a[i+1]]=cnt; cs=std::abs(a[i]-a[i+1]); if(cs<=1) break; now=gcd(now,cs); if(now<=1) break; i++; } } printf("%d\n",cnt); return 0; }