这题一定要注意开long long
还有刚开始应设置答案为m(见解析)
#include #include using namespace std; long long f1,f2,f3;//计算初始双方气势 long long a[100005],s1,s2; int i,n,m,p1,ans; int main() { cin>>n; for (i=1;i>a[i]; cin>>m>>p1>>s1>>s2; for (i=1;i<m;i++) {if(p1==i) a[i]+=s1; //如果是p1就直接加上计算 f1+=(m-i)*a[i];} for (i=m+1;i<=n;i++) {if (p1==i) a[i]+=s1; f2+=(i-m)*a[i];} long long cha=abs(f1-f2);//计算双方的差 if (cha==0) {cout<<m; return 0;} //差已经为0,直接放在m处,m不属于任何一方 ans=m;//若放置后差反而更大,应放m处 for (i=1;i<m;i++) { f3=abs(f1+s2*(m-i)-f2);//计算新的差 if (f3<cha) ans=i,cha=f3; } for (i=m+1;i<=n;i++) { f3=abs(f2+s2*(i-m)-f1); if (f3<cha) ans=i,cha=f3; } cout<<ans; }