首页 > 其他 > 详细

洛谷 P5016 龙虎斗(模拟)

时间:2019-11-09 21:05:21      阅读:74      评论:0      收藏:0      [点我收藏+]

嗯...

 

题目链接:https://www.luogu.org/problem/P5016

 

这道题是一道模拟,不要考虑复杂,直接暴力枚举每一个点,看看加上s2之后两个势力的差值,找最小,记录下标。

注意数据很大,用long long, 最小值的初始值要足够大。

 

AC代码:

技术分享图片
 1 #include<cstdio>
 2 #include<iostream>
 3 #include<cmath>
 4 
 5 using namespace std;
 6 
 7 long long n, p1, s1, s2, sum1, sum2, ans = 1e19, m, now, t1, t2, tmp;
 8 long long c[10000005];
 9 
10 int main(){
11     scanf("%lld", &n);
12     for(int i = 1; i <= n; i++) scanf("%lld", &c[i]);
13     scanf("%lld%lld%lld%lld", &m, &p1, &s1, &s2);
14     c[p1] += s1;
15     for(int i = 1; i <= m - 1; i++) sum1 += c[i] * (m - i);
16     for(int i = m + 1; i <= n; i++) sum2 += c[i] * (i - m);
17     if(sum1 == sum2) {printf("%lld", m); return 0;}
18     for(int i = 1; i <= n; i++){
19         t1 = sum1, t2 = sum2;
20         if(i < m) t1 += (m - i) * s2;
21         else t2 += (i - m) * s2;
22         tmp = abs(t1 - t2); 
23         if(tmp < ans) {ans = tmp; now = i;}
24     }
25     printf("%lld", now);
26     return 0;
27 }
AC代码

 

洛谷 P5016 龙虎斗(模拟)

原文:https://www.cnblogs.com/New-ljx/p/11827433.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!