1593D1 - All are Same(数学规律+数论+入门级)

1593D1 - All are Same(源地址自⇔CF1593D1

Problem

3d7f2dd231267e85a925a65e3deb7ef8.png

Example

3
6
1 5 3 1 1 5
8
-1 0 1 -1 0 1 -1 0
4
100 -1000 -1000 -1000
2
1
1100

tag:

⇔数学规律、⇔数论、⇔入门级(*1100)

题意:

对于一串数字,找到最大的 \(k\) ,使得每一位数字减去若干个 \(k\) 后变成一样。

思路:

找到这串数字中最小的那个,然后计算所有数字与最小数字的差的最大公因数。

简易证明:假设 \(a<b<c\) ,将 \(b\)\(c\) 变成 \(a\) 分别需要减去 \(k_b\)\(k_c\) ,则答案即为 \(gcd(k_b,k_c)\)

AC代码:

//A WIDA Project
#include<bits/stdc++.h>
using namespace std;
const int MAX=1e6+5;
int T,n,k,ans,a[MAX];
//===============================================================
int main(){
	cin>>T;
	while(T-->0){
		k=MAX9;ans=0;
		cin>>n;
		for(int i=1;i<=n;i++){
			cin>>a[i];
			k=min(k,a[i]);
		}
		for(int i=1;i<=n;i++){
			ans=__gcd(ans,a[i]-k);
		}
		if(ans==0) cout<<-1<<endl;
		else cout<<ans<<endl;
	}
	return 0;
}

错误次数:1次

原因:未判断 \(-1\) 的情况(即 \(k\) 可以取任何值的情况)。


文 / WIDA
2021.10.15成文
首发于WIDA个人博客,仅供学习讨论


更新日记:
2021.10.15 成文

posted @ 2021-10-15 19:33  hh2048  阅读(119)  评论(0编辑  收藏  举报