洛谷——P1154 奶牛分廄
阿新 • • 發佈:2017-11-22
define 有一個 正整數 cst getchar() 需要 etc tchar -s
輸入樣例#1: 復制
P1154 奶牛分廄
題目描述
農夫約翰有N(1<=N<=5000)頭奶牛,每頭奶牛都有一個唯一的不同於其它奶牛的編號Si,所有的奶牛都睡在一個有K個廄的谷倉中,廄的編號為0到K-1。每頭奶牛都知道自己該睡在哪一個廄中,因為約翰教會了它們做除法,Si MOD K的值就是第i頭奶年所睡的廄的編號。
給出一組奶牛的編號,確定最小的K使得沒有二頭或二頭以上的奶牛睡在同一廄中。
輸入輸出格式
輸入格式:
第一行一個正整數N,第2到N+1行每行一個整數表示一頭奶牛的編號。
輸出格式:
單獨一行一個整數表示要求的最小的K,對所有的測試數據這樣的K是一定存在的
輸入輸出樣例
5 4 6 9 10 13輸出樣例#1: 復制
8
說明
Si(1<=Si<=1000000)
同余定理,我們考慮,a1,a2,若我們需要讓他們兩個對一個數取膜的余數不同,我們先來考慮當什麽時候這兩個數取膜後的余數相同呢?我們如果對a2-a1取膜的話,他們的余數最後一定相等等於a1,這裏我們假定a2>a1,以此類推,我們就可以求出答案了
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define N 1000010 using namespace std; bool check[N]; int n,s[N],maxn; int read() { int x=0,f=1; char ch=getchar(); while(ch<‘0‘||ch>‘9‘){if(ch==‘-‘)f=-1;ch=getchar();} while(ch>=‘0‘&&ch<=‘9‘) x=x*10+ch-‘0‘,ch=getchar(); return x*f; } int main() { n=read(); for(int i=1;i<=n;i++) s[i]=read(),maxn=max(maxn,s[i]); for(int i=1;i<=n;i++) for(int j=i+1;j<=n;j++) check[abs(s[i]-s[j])]=true; for(int i=n;i<=maxn;i++) if(!check[i]) { printf("%d",i); return 0; } }
洛谷——P1154 奶牛分廄