1. 程式人生 > >洛谷——P1154 奶牛分廄

洛谷——P1154 奶牛分廄

define 有一個 正整數 cst getchar() 需要 etc tchar -s

P1154 奶牛分廄

題目描述

農夫約翰有N(1<=N<=5000)頭奶牛,每頭奶牛都有一個唯一的不同於其它奶牛的編號Si,所有的奶牛都睡在一個有K個廄的谷倉中,廄的編號為0到K-1。每頭奶牛都知道自己該睡在哪一個廄中,因為約翰教會了它們做除法,Si MOD K的值就是第i頭奶年所睡的廄的編號。

給出一組奶牛的編號,確定最小的K使得沒有二頭或二頭以上的奶牛睡在同一廄中。

輸入輸出格式

輸入格式:

第一行一個正整數N,第2到N+1行每行一個整數表示一頭奶牛的編號。

輸出格式:

單獨一行一個整數表示要求的最小的K,對所有的測試數據這樣的K是一定存在的

輸入輸出樣例

輸入樣例#1: 復制
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 奶牛分廄