求解代码
publicstaticvoidmain(String[]args)throwsIOException{BufferedReaderbr=newBufferedReader(newInputStreamReader(System.in));StringTokenizerin=newStringTokenizer(br.readLine());PrintWriterout=newPrintWriter(newOutputStreamWriter(System.out));intt=Integer.parseInt(in.nextToken());for(inti=0;i<t;i++){in=newStringTokenizer(br.readLine());intn=Integer.parseInt(in.nextToken());int[]nums=newint[n];intcount=0;in=newStringTokenizer(br.readLine());for(intj=0;j<n;j++){nums[j]=Integer.parseInt(in.nextToken());count+=nums[j];}if(count%n!=0){out.println("NO");}else{/** * 问题转化为:能否通过题目允许的操作,将所有偏差值变为0。 */for(intj=0;j<n;j++){nums[j]-=(count/n);}/** * 将j-1位置的所有偏差值,全部累加到j+1位置,然后将j-1置为 0; * 说人话就是模拟能量从左向右转移,清空左侧方碑的偏差。 */for(intj=1;j<n-1;j++){nums[j+1]+=nums[j-1];nums[j-1]=0;}booleanflag=true;for(intj=0;j<n;j++){if(nums[j]!=0){flag=false;break;}}out.println(flag?"YES":"NO");}}out.flush();out.close();br.close();}