NOIP2018普及组第二题解析

题目链接:

https://www.luogu.com.cn/problem/P5016

这道题算是水题了。

我们假设已算出两边兵营的气势分别为sum1,sum2,且sum1<sum2,自然要将工兵放在sum1一边,那么我们需保证sum1+工兵的数量*工兵距m号的距离与sum2的差距最小,不妨先假设两式相等。
等式中除工兵距m号的距离(其实也就是答案)未知,其余都是已知量,便可以将此量用其他量表示出来,化简可得:工兵距m号的距离=(sum2-sum1)/工兵的数量。
由于用此等式算出的距离可能是浮点数,所以我们只需要进行四舍五入,算出离这个值最近的整数,便是答案。
还有就是边界值的处理,这个整数必然是在1~n的范围内,只要最后进行一个特判就行了。

代码:

#include <bits/stdc++.h>
using namespace std;
int main()
{
	//freopen ("fight.in","r",stdin);
	//freopen ("fight.out","w",stdout);
	int m, n;
	long long sum=0, mul=0;
	long long c, p1, p2, s1, s2;
	int i;
	cin >> n;
	for(i=1; i<=n; i++)
	{
		cin >> c;
		sum += c;
		mul += c * i;
	}
	cin >> m >> p1 >> s1 >> s2;
	sum += s1;
	mul += p1 * s1;
	sum += s2;
	mul -= sum * m;
	p2 = -(mul-s2/2)/s2;
	
	if(p2 < 1)
	{
		p2 = 1;
	} else if (p2 > n)
	{
		p2 = n;
	}
	cout << p2;
	return 0;
}
版权声明:本文为博主Zhang, Xuheng原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://nth.ink/cpp/P2167.html

(广告由我们的赞助商提供,内容与本站无关)

评论

  1. Xuheng Zhang
    Xuheng Zhang
    Windows Edge 18.18362
    11月前
    2020-6-26 12:16:47

    忘了说了。一定要开long long,否则只有80分。

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇