洛谷 P1154 奶牛分廄

題目傳送門

其實本題就是要找一個整數k,使得 \(\forall a_i,a_j \in A\)\(i\neq j\),

滿足 \(a_i\mod k\neq a_j\mod k\)

而不滿足上述條件的情況爲 \(\exists a_i,a_j,滿足a_i=b_1*k+r,a_j=b_2*k+r\)

發現它等價於\(a_i - a_j = (b_1-b_2)*k\)

所以可以得出結論,如果k滿足要求,則\(\forall a_i,a_j \in A\)都能滿足\(|a_j-a_i|\)不是k的倍數.

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>

using namespace std;

int n,a[5001],sum;
bool vis[1000005];

inline int _read() {
	int s = 0,w = 1;
	char p = getchar();
	while(p < '0' || p > '9') {
		if(p == '-1') w = -1;
		p = getchar();
	}
	while(p >= '0' && p <= '9') {
		s = s * 10 + (p - '0');
		p = getchar();
	}
	return s * w;
}

int main() {
	n = _read();
	for(int i = 1;i <= n; i++) {
		a[i] = _read();
		sum = max(sum,a[i]);
	}
	for(int i = 1;i <= n; i++)
		for(int j = i + 1;j <= n; j++)
			vis[abs(a[j] - a[i])] = 1;
	for(int i = n;i <= sum; i++) {
		if(!vis[i]) {
			for(int j = i + i;j <= sum; j += i)
				if(vis[j]) {
					vis[i] = 1;
					break;
				}
		}
		if(!vis[i]) {
			printf("%d",i);
			return 0;
		}
	}
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章