第一篇题解,只是发发看;
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 using namespace std; 5 const int N=100005; 6 int n; 7 long long c[N]; 8 long long qsl[N],qsr[N]; 9 long long suml,sumr; 10 long long m,p1,s1,s2; 11 long long p2; 12 long long abs(long long x) 13 { 14 return x>0?x:-x; 15 } 16 int main() 17 { 18 freopen("fight.in","r",stdin); 19 freopen("fight.out","w",stdout); 20 scanf("%d",&n); 21 for (int i=1;i<=n;i++) 22 scanf("%lld",&c[i]); 23 scanf("%lld %lld %lld %lld",&m,&p1,&s1,&s2); 24 for (int i=1;i<m;i++) 25 { 26 qsl[i]=(m-i)*c[i]; 27 suml+=qsl[i]; 28 } 29 for (int i=n;i>m;i--) 30 { 31 qsr[i]=(i-m)*c[i]; 32 sumr+=qsr[i]; 33 } 34 if (p1<m) 35 suml+=s1*(m-p1); 36 if (p1>m) sumr+=s1*(p1-m); 37 int mymin=1e9; 38 for (int i=1;i<=n;i++) 39 { 40 if(i<m) 41 { 42 long long c=abs(suml+(long long)(m-i)*s2-sumr); 43 if(c<mymin) 44 mymin=c,p2=i; 45 } 46 else if(i>m) 47 { 48 long long c=abs(sumr+(long long)(i-m)*s2-suml); 49 if(c<mymin) 50 mymin=c,p2=i; 51 } 52 else if(i==m) 53 { 54 long long c=abs(sumr-suml); 55 if(c<mymin) 56 mymin=c,p2=i; 57 } 58 } 59 printf("%lld",p2); 60 return 0; 61 }