打卡信奥刷题(1378)用C++实现信奥 B4033 [语言月赛 202409] 考试

B4033 [语言月赛 202409] 考试

题目描述

迅风和他的好朋友一同参加了 nnn 场考试,而迅风拥有预知未来和提升自己分数的能力。

在第 iii 场考试中,迅风知道他自己原来取得 aia_iai 分,他的好朋友一定会取得 bib_ibi 分。

而他们很喜欢争个高下,设迅风在 xxx 场考试中分数比他的好朋友高,在 yyy 场考试中分数比他的好朋友低,那么:

  • x>yx>yx>y,则说明在这 nnn 场考试中,迅风更胜一筹。
  • x<yx<yx<y,则说明迅风的好朋友更胜一筹。
  • x=yx=yx=y,则说明两人打平。

迅风发现自己可能会输给他的朋友,于是他可以选择若干场考试提升自己的分数,记增加的分数总和为 sumsumsum

迅风想知道,自己要在这 nnn 场考试中更胜一筹,所需的 sumsumsum 最小为多少?

输入格式

输入的第一行有一个正整数 nnn 表示考试数量。

第二行有 nnn 个正整数 a1,…,ana_1,\ldots,a_na1,,an,表示迅风每场考试的分数。

第三行有 nnn 个正整数 b1,…,bnb_1,\ldots, b_nb1,,bn,表示迅风的朋友每场考试的分数。

输出格式

输出一个非负整数 sumsumsum 表示答案。

输入输出样例 #1

输入 #1

3
30 10 9995
100 1 10000

输出 #1

6

输入输出样例 #2

输入 #2

4
10 20 50 90
11 22 50 90

输出 #2

3

输入输出样例 #3

输入 #3

3
100 100 1
3 3 1

输出 #3

0

说明/提示

【样例 1 解释】

只要把第 333 次考试的得分提升 666 分,就可以在第 2,32,32,3 次考试中获得比朋友更高的分数,从而 x=2,y=1x=2,y=1x=2,y=1,迅风更胜一筹。

【样例 2 解释】

只要把第 1,3,41,3,41,3,4 次考试的得分各提升 111 分,就可以让 x=2,y=1x=2,y=1x=2,y=1,从而让迅风更胜一筹。

【样例 3 解释】

哪怕不提升分数,也有 x=2,y=0x=2,y=0x=2,y=0 了,迅风已经更胜一筹。

【数据范围】

本题共有 202020 个测试点,测试点等分。

测试点编号n≤n\len特殊性质
1∼21\sim 212222
3∼63\sim 636100100100ai,bi≤2a_i,b_i\le 2ai,bi2
777100010001000每次考试两人成绩都相等
8∼118\sim 11811100010001000迅风成绩递增,他朋友成绩递减
12∼1512\sim 151215100010001000每次考试两人成绩都不相等
16∼2016\sim 201620100010001000

关于测试点 8∼118\sim 11811,这里的递增和递减是不严格的,如 1,5,5,8,101,5,5,8,101,5,5,8,10 也视为递增。

特别地,编号为奇数的测试点 nnn 为奇数,编号为偶数的测试点 nnn 为偶数。

对于全体数据,保证 1≤n≤10001\le n\le 10001n10001≤ai,bi≤1041\le a_i,b_i\le 10^41ai,bi104(也就是 100001000010000),输入皆为整数。

【后记】
祝各位参加 202420242024 年 CSP 比赛的选手 rp++!

C++实现

#include <bits/stdc++.h>
using namespace std;
int a[1005], b[1005], c[1005];
int main() {
	int n;
	cin >> n;
	for (int i = 1; i <= n; i++)
		cin >> a[i];
	for (int i = 1; i <= n; i++)
		cin >> b[i];
	for (int i = 1; i <= n; i++)
		c[i] = b[i] - a[i];
	sort(c + 1, c + n + 1);
	int x = 0, y = 0;
	for (int i = 1; i <= n; i++) {
		if (c[i] == 0)
			continue;
		if (c[i] < 0)
			x++;
		else
			y++;
	}
	int ans = 0;
	for (int i = 1; i <= n; i++) {
		if (x > y)
			break;
		if (c[i] < 0)
			continue;
		if (c[i] > 0) {
			ans += c[i];
			y--;
		}
		if (x > y)
			break;
		ans++;
		x++;
	}
	cout << ans;
}

在这里插入图片描述

后续

接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值