比赛链接
A:Olympiad Date
让我们开始一个数字计数器 cnt[i] ( 0≤i≤9) 3≤cnt[0],1≤cnt[1],2≤cnt[2], 1≤cnt[3],1≤cnt[5] 答案已找到。如果在计算所有数字之后,没有满足其中一个条件,则没有解决方案,答案为 0. 代码如下
#include <bits/stdc++.h>
using namespace std;int main() {int t;cin >> t; for (int test = 0; test < t; test++) {int n;cin >> n; vector<int> a(n);for (int i = 0; i < n; i++) {cin >> a[i];}vector<int> cnt(10, 0);bool found = false;for (int i = 0; i < n; i++) {cnt[a[i]]++; if (cnt[0] >= 3 && cnt[1] >= 1 && cnt[2] >= 2 && cnt[3] >= 1 && cnt[5] >= 1) {cout << i + 1 << endl;found = true;break;}}if (!found) {cout << 0 << endl;}}return 0;
}
B. Team Training
为了最大化强队的数量,我们需要将学生按技能值从高到低排序,然后贪心地尽可能多地组成满足条件的队伍。具体步骤如下:
排序:将学生的技能值按降序排列,以便优先使用高技能的学生组成队伍。
贪心组队:遍历排序后的学生,维护当前可以组成的队伍数量(cnt)。当当前学生的技能值乘以当前队伍数量(a[i] * cnt)满足强度要求时,确认一个队伍,并重置计数器。
#include <iostream>
#include <algorithm>using namespace std;void solve() {int n, x;cin >> n >> x;int a[n];for (int i = 0; i < n; i++) {cin >> a[i];}sort(a, a + n);reverse(a, a + n);int ans = 0;for (int i = 0, cnt = 1; i < n; i++, cnt++) {if (a[i] * cnt >= x) {ans++;cnt = 0;}}cout << ans << endl;
}int main() {int t;cin >> t;while (t--) {solve();}
}
C. Combination Lock
规律如下
直接看出来
#include <iostream>using namespace std;void solve() {int n;cin >> n;if (n % 2 == 0) {cout << -1 << endl;return;}for (int i = n; i > 0; i--) {cout << i << ' ';}cout << endl;
}int main() {int t = 1;cin >> t;while (t--) solve();
}
D. Place of the Olympiad
直接细节取整
#include<bits/stdc++.h>
#define IOS \ios_base::sync_with_stdio(0); \cin.tie(0); \cout.tie(0);
#define ll long long
using namespace std;
ll mtt(ll n,ll m,ll k){k=(k+n-1)/n;//向上取整k=m/(m-k+1);//优化分配,向下取整,控制了每行最多能放多少个桌子,避免产生不均匀的分配return k;
}int main() {IOS;ll t;cin >> t;while (t--) {ll n, m, k;cin >> n >> m >> k;cout << mtt(n, m, k) << '\n';}return 0;
}
二分
#include <iostream>using namespace std;void solve() {long long n, m, k, l, r, mid;cin >> n >> m >> k;l = 0, r = m;while (l + 1 < r) {mid = (l + r) / 2;if ((m / (mid + 1) * mid + m % (mid + 1)) * n >= k) {r = mid;} else {l = mid;}}cout << r << endl;
} int main() {int t = 1;cin >> t;while (t--) {solve();}}