B. Restore Modulo
忘了当时怎么乱搞的了~
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
constexpr int N=200010;
int n;
ll a[N],d[N],d0[N];
int main()
{
ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);
int T=1;
cin>>T;
while(T--)
{
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
if(n==1)
{
cout<<0<<'\n';
continue;
}
int fg=0;
for(int i=2;i<=n;i++)
if(a[i]==a[i-1]) fg++;
if(fg)
{
cout<<(fg==n-1?0:-1)<<'\n';
continue;
}
for(int i=2;i<=n;i++) d[i]=a[i]-a[i-1];
for(int i=3;i<=n;i++) d0[i]=d[i]-d[i-1];
int m=0;
for(int i=3;i<=n;i++) m=__gcd(1ll*m,d0[i]);
m=abs(m);
if(m==0) cout<<0<<'\n';
else if(a[1]>=m) cout<<-1<<'\n';
else
{
bool f=1;
int c=((a[2]-a[1])%m+m)%m;
for(int i=2;i<=n;i++)
if((a[i-1]+c)%m!=a[i]) f=0;
if(f)
cout<<m<<' '<<c<<'\n';
else
cout<<-1<<'\n';
}
}
return 0;
}
本文介绍了一种名为RestoreModulo的算法,用于处理数字序列中的重复元素问题,并通过求模操作寻找最小公共周期。它在处理特定模式和判断相等性方面具有应用,适用于编程竞赛或数据结构挑战。
&spm=1001.2101.3001.5002&articleId=118693211&d=1&t=3&u=501d2963464a40bdab19864fbdde8d30)
198

被折叠的 条评论
为什么被折叠?



