NOIP2018 [PJ] 龙虎斗

第一篇题解,只是发发看;

 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 }

猜你喜欢

转载自www.cnblogs.com/Snowindfly/p/11241088.html