10.6TJ
10.6TJ
T1 选手选拔
概述
>错因 ~~sort(a+1;a+n+1;cmp)~~%%% ::::info[*AC CODE:*] ``` #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 比赛安排
>>概述
>
>给定$n$个时间段求交集时间最长的两个时间段的交集时间
>>错因
>
>~~神秘玄学代码~~
>没有考虑完情况
::::info[*AC CODE:*]
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,b$两个数列寻找$|a[i]-b[i]|<=b \&\&(a[i]+b[i])max$
>>错因
>
>只考虑了最大值的比较没有考虑余下的数据
::::info[*AC CODE:*]
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; }
::::