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 21∼2 | 222 | |
| 3∼63\sim 63∼6 | 100100100 | ai,bi≤2a_i,b_i\le 2ai,bi≤2 |
| 777 | 100010001000 | 每次考试两人成绩都相等 |
| 8∼118\sim 118∼11 | 100010001000 | 迅风成绩递增,他朋友成绩递减 |
| 12∼1512\sim 1512∼15 | 100010001000 | 每次考试两人成绩都不相等 |
| 16∼2016\sim 2016∼20 | 100010001000 |
关于测试点 8∼118\sim 118∼11,这里的递增和递减是不严格的,如 1,5,5,8,101,5,5,8,101,5,5,8,10 也视为递增。
特别地,编号为奇数的测试点 nnn 为奇数,编号为偶数的测试点 nnn 为偶数。
对于全体数据,保证 1≤n≤10001\le n\le 10001≤n≤1000,1≤ai,bi≤1041\le a_i,b_i\le 10^41≤ai,bi≤104(也就是 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考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容
用C++实现信奥 B4033 语言月赛 202409 考试&spm=1001.2101.3001.5002&articleId=148181034&d=1&t=3&u=3766dd3c5145408b8a2b9481fa1a7ab8)
1663

被折叠的 条评论
为什么被折叠?



