Welcome to Liukejie|

liukejie

园龄:1年8个月粉丝:5关注:11

2023-07-01 10:22阅读: 5评论: 0推荐: 0

CF222D Olympiad 题解

思路

首先,因为小 A 的得分是无上限的,所以很容易得知最好的名次是第一名。

然后我们可以想到贪心策略,因为最大排名其实就等同于最差成绩,所以达成最差成绩就是让成绩高的人在符合情况的条件下最多。

代码如下

#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;
}
posted @   liukejie  阅读(5)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起