[枚举][NOIP普及组2018]龙虎斗

思路很简单,但是要注意两个问题

一是要开long long

二就是用math库中的abs函数时请务必注意 其只能是 int 类型,一旦把long long中大的数塞进去就会报错。这第二条卡了我一中午

 

 1 #include <cstdio>
 2 #include <cmath>
 3 typedef long long ll;
 4 
 5 
 6 ll Bing[100005];
 7 int Pos,n,m,p1,s1,s2,End;
 8 ll Sum[100005];
 9 ll Cha,Ltot,Rtot,Update;
10 
11 
12 int main(){
13     scanf("%d",&n);
14     for(int i = 1; i <= n ; ++i) scanf("%lld",&Bing[i]);
15     scanf("%d %d %d %d",&m,&p1,&s1,&s2);
16     Bing[p1] += s1;
17     for(int i = 1; i < m ; ++i){
18         Sum[i] = Bing[i] * abs(m-i);
19         Ltot += Sum[i];
20     }
21     for(int i = m+1; i <= n; ++i){
22         Sum[i] = Bing[i] * abs(i-m);
23         Rtot += Sum[i];
24     }
25     Update = abs(Ltot - Rtot);
26     for(Pos = 1; Pos <= m ; ++Pos){
27         ll linshi = s2 * abs(m - Pos);
28         Cha = abs(Ltot + linshi - Rtot);
29         if(Cha <= Update){
30             End = Pos;
31             Update = Cha;
32         }
33     }
34     for(Pos = m; Pos <= n ; ++Pos){
35         ll linshi = s2 * abs(m - Pos);
36         Cha = abs(Rtot + linshi - Ltot);
37         if(Cha <= Update){
38             End = Pos;
39             Update = Cha;
40         }
41     }
42     printf("%d",End);
43     return 0;
44 }
AC Code

 

转载于:https://www.cnblogs.com/OIerLYF/p/11219393.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值