专栏文章

10.6TJ

个人记录参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@minof9zy
此快照首次捕获于
2025/12/02 05:43
3 个月前
此快照最后确认于
2025/12/02 05:43
3 个月前
查看原文

10.6TJ

T1 选手选拔

概述
nn个人有三个成绩,以不同的规则选出几个人
错因
sort(a+1;a+n+1;cmp)%%%
AC CODE:CPP
#include <bits/stdc++.h>
using namespace std;
int n, a, b, c;

struct node {
	int x, y, z, num;
} p[200005];
int ans[200005];

bool cmp1(node p1, node p2) {
	if (p1.x != p2.x)
		return p1.x > p2.x;
	else
		return p1.num < p2.num;
}

bool cmp2(node p1, node p2) {
	if (p1.y != p2.y)
		return p1.y > p2.y;
	else
		return p1.num < p2.num;
}

bool cmp3(node p1, node p2) {
	if (p1.z != p2.z)
		return p1.z > p2.z;
	else
		return p1.num < p2.num;
}

bool cmp(int p1, int p2) {
	return p1 < p2;
}

int main() {
//	freopen("election.in", "r", stdin);
//	freopen("election.out", "w", stdout);
	cin >> n >> a >> b >> c;
	for (int i = 1; i <= n; i++) {
		int v;
		cin >> p[i].x >> p[i].y >> v;
		p[i].z = p[i].x + p[i].y + v;
		p[i].num = i;
	}
	sort(p + 1, p + 1 + n, cmp1);
	int cnt = 0;
	for (int i = 1; i <= b; i++) {

		ans[++cnt] = p[i].num;

	}
	sort(p + 1, p + 1 + n, cmp2);
	for (int i = 1; i <= c; i++) {
		ans[++cnt] = p[i].num;
	}
	sort(p + 1, p + 1 + n, cmp3);
	for (int i = 1; i <= a; i++)
		ans[++cnt] = p[i].num;
	sort(ans + 1, ans + 1 + cnt, cmp);
	for (int i = 1; i <= cnt; i++)
		if (ans[i] != ans[i - 1])
			cout << ans[i] << ' ';
	return 0;
}

T2 比赛安排

概述
给定nn个时间段求交集时间最长的两个时间段的交集时间
错因
神秘玄学代码
没有考虑完情况
AC CODE:CPP
#include <bits/stdc++.h>
using namespace std;
int n;

struct node {
	int a, b;
} p[100005];

bool cmp(node p1, node p2) {
	return p1.a < p2.a;
}
int cnt = 0;

int main() {
//	freopen("match.in", "r", stdin);
//	freopen("match.out", "w", stdout);
	cin >> n;
	for (int i = 1; i <= n; i++) {
		cin >> p[i].a >> p[i].b;
	}
	sort(p + 1, p + 1 + n, cmp);
	for (int i = 1; i < n; i++) {
		for (int j = i + 1; j <= n; j++) {
			if (p[j].a < p[i].b) {
				if (p[j].b <= p[i].b) {
					cnt = max(cnt, p[j].b - p[j].a);
				} else {
					cnt = max(cnt, p[i].b - p[j].a);
				}
			} else
				break;
		}
	}
	cout << cnt;
	return 0;
}

T3 阿斯特拉

概述
给定a,ba,b两个数列寻找a[i]b[i]<=b&&(a[i]+b[i])max|a[i]-b[i]|<=b \&\&(a[i]+b[i])max
错因
只考虑了最大值的比较没有考虑余下的数据
AC CODE:CPP
#include <bits/stdc++.h>
using namespace std;
int t, n, d, a[200005], b[200005];

bool cmp(int p1, int p2) {
	return p1 < p2;
}

void solve() {
	cin >> n >> d;
	int cnt = 0;
	for (int i = 1; i <= n; i++)
		cin >> a[i];
	for (int i = 1; i <= n; i++)
		cin >> b[i];
	sort(b + 1, b + 1 + n, cmp);
	for (int i = 1; i <= n; i++) {
		int key = a[i] + d;
		int id = lower_bound(b + 1, b + 1 + n, key) - b;
		id--;
		if (abs(a[i] - b[id]) <= d && id >= 1) {
			cnt = max(a[i] + b[id], cnt);
		}
	}
	if (cnt == 0)
		cout << "no" << endl;
	else
		cout << cnt << endl;
}

int main() {
//	freopen("astrala.in", "r", stdin);
//	freopen("astrala.out", "w", stdout);
	cin >> t;
	for (int i = 1; i <= t; i++) {
		solve();
	}
	return 0;
}

评论

0 条评论,欢迎与作者交流。

正在加载评论...