1. 程式人生 > >第十屆河南省acm省賽 最小祕鑰

第十屆河南省acm省賽 最小祕鑰

問題 C: 最小祕鑰

時間限制: 1 Sec  記憶體限制: 128 MB
提交: 35  解決: 22
[提交][狀態][討論版]

題目描述

在中國近代史上,暫編***軍絕對是一支能打硬仗,大名鼎鼎的行動部隊。“一二八”上海抗戰,暫編***軍就曾打得小日本四易主帥。

*月**號,暫編***軍計劃組成一個行動大隊,派出N名隊員潛伏在***地,發動一次大規模的巷戰行動。每名隊員有自己的代號Ai,為了更好的配合作戰,他們需要獲得一個金鑰Key,  然後各自迅速移動到Ai  MOD  Key位置,**時刻一起開戰。

作戰方案已經定好,你能幫***行動大隊快速找個滿足條件的最小金鑰Key嗎?

MOD表示取模運算,要求不能有多名隊員待在同一個位置。

輸入

第一行: T        表示以下有T組測試資料             ( 1≤T ≤5 )

對每組資料,  

第一行:N     表示行動人員數  (1<=N<=3000)

接下來一行有N個整數,分別表示每個隊員的代號Ai       (1<=Ai<=20000)

輸出

對每組測試資料,輸出佔一行,一個整數 Key.  

樣例輸入

231 2 354 6 9 10 13

樣例輸出

3
8
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
    int t,n,a1[3003]={0},b1[20013]={0},k1=0;
    cin>>t;
    while(t--)
    {
        memset(a1,0,sizeof(a1));
        memset(b1,0,sizeof(b1));
        cin>>n;
        for(int i=0;i<n;i++){
            cin>>a1[i];
        }
        for(int j=2;j<20000;j++){
            k1=0;
            memset(b1,0,sizeof(b1));
            for(int i=0;i<n;i++){
                if(b1[a1[i]%j]==0){
                    b1[a1[i]%j]=1;
                }else{
                    k1=1;
                    break;
                }
            }
            if(k1==0){k1=j;break;}
        }
        cout<<k1<<endl;
    }
    return 0;
}