题解 P1732
看数据范围!
看数据范围!
看数据范围!
重要的事情说三遍
0<= ai<=65 536
这意味着,我们只需开一个bool数组储存对应数字是否已经出现过,然后从当前数字开始向左、向右遍历(注意要遍历自己)就可以找到最近已经出现过的的数字aj。最后num[now]=true即可。
所以,这题普及-,代码很短,那就直接上代码吧。
#include<cstdio>
#include<cstring>
bool hav[65537];
int main()
{
int n,t,i,ans,tmp;
scanf("%d",&t);
while(t--){
memset(hav,false,sizeof(hav));
scanf("%d%d",&n,&tmp);
hav[tmp]=true;
ans=tmp;
while(--n){
scanf("%d",&tmp);
for(i=0;;i++){
if(tmp-i>=0)
if(hav[tmp-i]){
ans+=i;
break;
}
if(tmp+i<=65536)
if(hav[tmp+i]){
ans+=i;
break;
}
}
hav[tmp]=true;
}
printf("%d\n",ans);
}
return 0;
}