鍙鎵鏈夌殑鏁扮殑gcd涓嶆槸1灝辨病鏈夋渶澶у?/span>,鍏跺疄榪欎竴鐐瑰彲浠ョ敱涓婇潰2涓暟鐨勫叕寮忔帹鍑烘潵,涔熷氨鏄厛姹傚墠n-1涓暟鐨刧cd鐒跺悗鍐嶆眰gcd鍜岀n涓暟鐨刧cd,閭d箞榪欐牱鐨勮瘽,榪欓榪樻湁涓涓暟璁烘柟娉?涔熷氨鏄洿鎺ョ畻鍓峮-1涓暟鐨刧cd,鐒跺悗鐪嬭繖涓猤cd鍜岀n涓暟鐨刧cd鏄惁涓?,涓嶄負1灝辮緭鍑?,涓?灝辯敤a*b-a-b榪欎釜鍏紡綆?br>浠g爜濡備笅
/*
ID:qcx97811
LANG:C++
PROG:nuggets
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
int n;
int num[16];
int idx[16],total_idx;
int can[2000000];
int cmp(const void *a,const void *b)
{//蹇熸帓搴忎粠灝忓埌澶фā鏉?/span>
int *c = (int *)a;
int *d = (int *)b;
if(*c > *d)
return 1;
if(*c == *d)
return 0;
return -1;
}
int gcd(int a,int b)
{//鍏害鏁?/span>
int tmp;
if(a < b)
{
tmp = a;
a = b;
b =tmp;
}
while(b)
{
tmp = a;
a = b;
b = tmp%b;
}
return a;
}
int main(void)
{
freopen("nuggets.in","r",stdin);
freopen("nuggets.out","w",stdout);
int i,j;
int k,tmp;
scanf("%d",&n);
for(i = 0;i < n;i++)
{//scanf
scanf("%d",&num[i]);
}
qsort(num,n,sizeof(num[0]),cmp);//sort the number
if((1 == num[0]) || (1 == n))
{//only one num or an one in the num
printf("0\n");
return 0;
}
else
{
memset(idx,0,sizeof(idx));
memset(can,0,sizeof(can));
if(2 == n)
{//2涓暟鐨勮瘽鍙互鐩存帴綆楀嚭鏉?/span>
if(1 == gcd(num[0],num[1]))
{//濡傛灉浜掔礌鐨勮瘽
printf("%d\n",num[0]*num[1]-num[0]-num[1]);
return 0;
}
else
{//涓嶄簰绱?鑲畾鏃?/span>
printf("0\n");
return 0;
}
}
tmp = num[1] - num[0];
for(i = 2;i < n;i++)
{//鐪嬫槸鍚︿負絳夊樊鏁板垪
if(num[i]-num[i-1] != tmp)
break;
}
if(i == n)
{//濡傛灉鏄瓑宸暟鍒楃殑璇?涔熶笉鍙兘鏈?/span>
printf("0\n");
return 0;
}
can[0] = 0;
total_idx = 0;
for(i = num[0];i < 2000000;i++ )
{//涓嬫爣鏄負浜嗕笉瓚呰繃鍐呭瓨16M 鍚屾椂鏈澶?/span>
j = 0;
for(k = 1;k < n;k++)
{//澧炲ぇ鑳借〃紺虹殑鏁?/span>
if(num[k]+can[idx[k]]<num[j]+can[idx[j]])
j = k;
}
tmp = num[j]+can[idx[j]];
can[++total_idx] = tmp;
if(total_idx > num[0]-1 && (can[total_idx]-can[total_idx-num[0]+1] == num[0]-1))
{//濡傛灉宸茬粡鎵懼埌鏈澶ф暟,鍥犱負鍚庨潰鐨勬暟閮借繛緇簡
tmp = total_idx-num[0]+1;
while(can[tmp] - can[tmp-1] == 1)
{//瀵繪壘鏈澶х殑鏁?/span>
tmp--;
}
printf("%d\n",can[tmp]-1);//杈撳嚭鏈澶ф暟
return 0;
}
for(k = 0;k < n;k++)
{//鏀瑰彉鐩稿簲鐨勪笅鏍?/span>
if(num[k]+can[idx[k]] == tmp)
idx[k]++;
}
}
// for(i = 0;i <= total_idx;i++)
// printf("%d\n",can[i]);
printf("0\n");
}
return 0;
}

]]>