P5016 龙虎斗
题解
这题显然没有什么好说的,一个for循环就搞定了
但还是要注意
p2初始化为m,不然有的测试点你会输出0
为啥??
因为没更新啊,也就是,本来这两个人的势力差距很大了,你再补兵,适得其反,又大拉大了差距,这时显然不会更新p2,那么久把兵往m里边补
代码
#include<bits/stdc++.h> using namespace std; int n,m,p1,p2; long long bing[100010],s1,s2; long long dragon,tiger; int main() { // freopen("akk.in","r",stdin); // freopen("yy.out","w",stdout); scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&bing[i]); scanf("%d%d%ld%ld",&m,&p1,&s1,&s2); bing[p1]+=s1; for(int i=m-1;i>=1;i--) dragon+=(bing[i]*(m-i)); for(int i=m+1;i<=n;i++) tiger+=(bing[i]*(i-m)); if(dragon==tiger) { printf("%d",m); return 0; } p2=m; long long cha=abs(tiger-dragon); if(dragon<tiger) { for(int i=m-1;i>=1;i--) { long long sum=s2*(m-i); if(abs(tiger-(dragon+sum))<cha) { cha=abs(tiger-(dragon+sum)); p2=i; } } } if(dragon>tiger) { for(int i=m+1;i<=n;i++) { long long sum=s2*(i-m); if(abs(dragon-(tiger+sum))<cha) { cha=abs(dragon-(tiger+sum)); p2=i; } } } printf("%d",p2); return 0; }