前7个点稳过,#8 9 10 一直WA
(Windows下倒数第5行800000记得改成800)
#include<bits/stdc++.h>
#define int long long
using namespace std;
int v[1005];
int n,ans;
int cal(){
int sum1=0,sum2=0;
for(int i=1;i<=(n+1)/2;i++) sum1+=v[i];
for(int i=(n+1)/2+1;i<=n;i++) sum2+=v[i];
return abs(sum1-sum2);
}
void SA(){
int T=5000;
while(T>1e-15){
int a=rand()%n+1,b=rand()%n+1;
swap(v[a],v[b]);
int dw=cal();
int de=dw-ans;
if(de<0) ans=dw;
else if(exp(-de/T)*RAND_MAX<rand()) swap(v[a],v[b]);
T*=0.9112;
}
}
signed main(){
int t;
scanf("%lld",&t);
for(int k=1;k<=t;k++){
scanf("%lld",&n);
srand(time(0));
int st=clock();
for(int i=1;i<=n;i++) scanf("%lld",&v[i]);
if(n==0){
printf("0");
break;
}
if(n==1){
printf("%lld\n",v[1]);
break;
}
ans=cal();
while(clock()-st<800000/t) SA();
printf("%lld\n",ans);
}
return 0;
}