CF658A Bear and Reverse Radewoosh 题解

Content

一场比赛有 \(n\) 道题目,其中第 \(i\) 道题目的分值为 \(p_i\),需要花费的时间为 \(t_i\)。需要说明的是,\(t_i\) 越大,这道题目的难度越大。在第 \(x\) 分钟交上第 \(i\) 道题目可获得的分数是 \(\max(0,p_i-c\times x)\)

有两个人要参加这场比赛,但他们有不同的策略:第一个人会按照从易到难的顺序做题,第二个人会按照从难到易的顺序做题。请求出谁将会这场比赛的赢家,或者他们两个打成平手。

数据范围:\(1\leqslant n\leqslant 50,1\leqslant c\leqslant 1000,1\leqslant p_i,t_i\leqslant 1000,p_i\leqslant p_{i+1},t_i\leqslant t_{i+1}\)

Solution

由于这道题目良心的数据范围,这题目甚至连排序都不要,简单的模拟一下就好了。除了之前要预先处理一下 \(t_i\) 的前缀和和后缀和之外,其他的都很简单。

Code

#include <cstdio>
#include <algorithm>
using namespace std;

int n, c, ssheng[57], sjiang[57], sum1, sum2;
struct problem {int p, t;}a[57];

int main() {
	scanf("%d%d", &n, &c);
	for(int i = 1; i <= n; ++i)	scanf("%d", &a[i].p);
	for(int i = 1; i <= n; ++i)	scanf("%d", &a[i].t);
	for(int i = 1; i <= n; ++i)	ssheng[i] = ssheng[i - 1] + a[i].t, sum1 += max(0, a[i].p - c * ssheng[i]);
	for(int i = n; i >= 1; --i)	sjiang[i] = sjiang[i + 1] + a[i].t, sum2 += max(0, a[i].p - c * sjiang[i]);
	if(sum1 > sum2)	printf("Limak");
	else if(sum1 < sum2)	printf("Radewoosh");
	else	printf("Tie");
	return 0;
}
posted @ 2021-12-21 20:57  Eason_AC  阅读(27)  评论(0)    收藏  举报