ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

C. Partitioning the Array

2026/8/11 2:24:25 拓冰建站 浏览量
C. Partitioning the Array

原题:Problem - C - Codeforces

官方题解:Editorial for Codeforces Round #919 (Div. 2) - Codeforces

收获及反思:

同余推理,如:

判断x,y两数是否可能同余,并找出模数m.

设相同的余数为k, x=a*m+k, y=b*m+k

两式相减,x-y=(a-b)m,

可见,若要x,y同余,则应使m能整除 x-y.

#include<bits/stdc++.h> using namespace std; int main(){ int t;cin>>t; while(t--){ int n;cin>>n; vector<int> a(n+1); for(int i=1;i<=n;i++) cin>>a[i]; int ans=0; for(int k=1;k<=n;k++){ if(n%k==0){ int g=0; for(int i=1;i<=n/k;i++){ for(int j=n/k;i+j<=n;j+=n/k){ g=__gcd(g,abs(a[i+j]-a[i+j-n/k])); } } if(g!=1) ans++; } } cout<<ans<<endl; } }