CF222D Olympiad 题解
思路
首先,因为小
然后我们可以想到贪心策略,因为最大排名其实就等同于最差成绩,所以达成最差成绩就是让成绩高的人在符合情况的条件下最多。
代码如下
#include <bits/stdc++.h>
using namespace std;
// #define int long long
#define rep(i, l, r) for(int i = l; i <= r; ++ i)
#define per(i, r, l) for(int i = r; i >= l; -- i)
#define me0(a); memset(a, 0, sizeof a);
#define me3(a); memset(a, 0x3f, sizeof a);
#define PII pair<int, int>
#define il inline
const int INF = 0x3f3f3f3f, MOD = 1e9 + 7;
il void read(int &n)
{
bool w = 0;
char c = getchar();
for (; c < 48 || c > 57; c = getchar())
w = c == 45;
for (n = 0; c >= 48 && c <= 57; c = getchar())
n = n * 10 + c - 48;
n = w ? -n : n;
}
il void write(int x, char a)
{
char c[40], s = 0;
if (x < 0) putchar(45), x = -x;
for (; x ;) c[s ++] = x % 10, x /= 10;
if (!s) putchar(48);
for (; s -- ;) putchar(c[s] + 48);
putchar(a);
}
const int MAXN = 100010;
int a[MAXN], b[MAXN];
int n, k, ans;
bool cmp(int a, int b)
{
return a > b;
}
main()
{
read(n); read(k);
rep(i, 1, n) read(a[i]);
rep(i, 1, n) read(b[i]);
sort(a + 1, a + n + 1);
sort(b + 1, b + n + 1, cmp);
int j = 1;
rep(i, 1, n)
if (a[i] + b[j] >= k)
{
++ ans;
++ j;
}
write(1, ' '); write(ans, '\n');
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步