問題はこちら
No.406 鴨等間隔の法則 - yukicoder
定義どおりやるだけ
ソートして、その間隔が一定かつ0でないことを確かめれば良い
c(int*a,int*b){return *a-*b;} int main(){ int x,a[1<<17],s,i,n,f; scanf("%d",&n); for(i=0;i<n;i++)scanf("%d",a+i); qsort(a,n,4,c); f=1; s=a[1]-a[0]; for(i=1;i<n;i++)if(a[i]-a[i-1]!=s)f=0; puts(f==0||s==0?"YES":"NO"); return 0; }
読み込みはいつもどおりやるとして問題は初期化
よく考えると
s=0; for(i=1;i<n;i++){ if(s!=0&&a[i]-a[i-1]!=s)f=0; s=a[i]-a[i-1]; }
という感じで困るのはサンプル3のような「間隔が全て0」のときだけなので、代入をうまくループ終了条件のところにぶち込んで
x,a[1<<17],s; c(int*a,int*b){x=*a-*b;} main(i){ for(;~scanf("%d",a-i);i--); for(qsort(a,-i,4,c);++i&&s==(x=a[-i]-a[~i])|!s?s=x:0;); x=!puts(i?"NO":"YES"); }
150B