洛谷 P1154 奶牛分廄
阿新 • • 發佈:2020-11-01
題目傳送門
其實本題就是要找一個整數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; }