题解 P5016 【龙虎斗 】

jianzihao

2018-11-11 18:33:07

Solution

## 前言:我只是个蒟蒻,请大佬们多包容. ``` #include<bits/stdc++.h> using namespace std; struct longhudou{ long long sbs; long long sq; long long jl; }a[1000005]; long long zb(long long n) { if(n>=0)return n; else return n*-1; } int main() { long long n,dra=0,tig=0,min=9e18,cz; cin>>n; for(int i=1;i<=n;i++) { scanf("%lld",&a[i].sbs); } long long m,p1,p2,s1,s2; scanf("%lld%lld%lld%lld",&m,&p1,&s1,&s2); a[p1].sbs+=s1; for(int i=1;i<=n;i++) { if((m-i)>0) { a[i].jl=m-i; a[i].sq=a[i].jl*a[i].sbs; dra+=a[i].sq; } else if((m-i)<0) { a[i].jl=i-m; a[i].sq=a[i].jl*a[i].sbs; tig+=a[i].sq; } else { a[i].sq=0; a[i].jl=0; } } if(dra==tig){ printf("%lld",m); return 0; } if(dra>tig) { cz=dra-tig; for(int i=m;i<=n;i++) { if(zb(a[i].jl*s2-cz)<min) { p2=i; min=zb(a[i].jl*s2-cz); } } } if(dra<tig) { cz=tig-dra; for(int i=1;i<=m;i++) { if(zb(a[i].jl*s2-cz)<min) { p2=i; min=zb(a[i].jl*s2-cz); } } } printf("%lld",p2); return 0; } ```