Skip to content

2026夏组队训练赛第三场

E. Evil Judges

cpp
#include <bits/stdc++.h>
using namespace std;
using ll = long long;

#define debug(x) cout << #x << '=' << x << ' ';
#define DL cout << '\n';

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	
	string s;
	ll m;

	cin >> s >> m;
	int n = s.size();
	s = ' ' + s;

	ll fi = -1;
	for (int i = 1; i <= n; i ++) {
		if (m == 0) break;
		if (s[i] == 'A') {
			if (fi == -1) fi = i;
		} else {
			if (fi == -1) continue;

			if (m >= i - fi) {
				m -= i - fi;
				swap(s[fi], s[i]);
				fi ++;
			} else {
				swap(s[i], s[i - m]);
				break;
			}
		}
	}

	ll ans = 0;
	ll a = 0;
	for (int i = 1; i <= n; i ++) {
		if (s[i] == 'A') a ++;
		else ans += a;
	}
	cout << ans;
}

F. Friend Meetup

cpp
#include <bits/stdc++.h>
using namespace std;
using ll = long long;

#define debug(x) cout << #x << '=' << x << ' ';
#define DL cout << '\n';

const double eps = 1e-7;

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	
	int n;
	cin >> n;

	vector<double> X(n), Y(n), v(n);
	for (int i = 0; i < n; i ++) {
		cin >> X[i] >> Y[i] >> v[i];
	}
	
	ll mx = 0;
	
	auto check = [&](double t) ->bool{
		double mx1 = -1e18, mx2 = -1e18, mx3 = -1e18, mx4 = -1e18;

		for (int i = 0; i < n; i ++) {
			mx1 = max(mx1, -X[i] - Y[i] - t * v[i]);
			mx2 = max(mx2, -X[i] + Y[i] - t * v[i]);
			mx3 = max(mx3, X[i] - Y[i] - t * v[i]);
			mx4 = max(mx4, X[i] + Y[i] - t * v[i]);
		}

		for (int i = 0; i < n; i ++) {
			if (t * v[i] - X[i] - Y[i] < mx1) return 0;
			if (t * v[i] - X[i] + Y[i] < mx2) return 0;
			if (t * v[i] + X[i] - Y[i] < mx3) return 0;
			if (t * v[i] + X[i] + Y[i] < mx4) return 0;
		}
		return 1;
	};
	
	double l = 0, r = 1e18;

	while (r - l > eps) {
		double mid = (l + r) / 2;
		if (check(mid)) r = mid;
		else l = mid;
	}
	cout << fixed << setprecision(10) << l;
}

H. Heist of the Century

cpp
#pragma GCC optimize("O2")
#include <bits/stdc++.h>
#include <numeric>
using namespace std;
#define int long long
#define i64 int64_t
#define db long double
#define pii pair<int, int>
#define tiii tuple<int, int, int>
#define ull unsigned long long
#define vi vector<int>
using i128 = __int128;
#define vpii vector<pii>
#define vvpii vector<vector<pii>>
#define vvi vector<vi>
#define pqpii priority_queue<pii, vector<pii>, greater<pii>>
#define pqi priority_queue<int, vi, greater<int>>
#define f first
#define s second
#define all(x) (x).begin(), (x).end()
#define pb push_back
#define eb emplace_back
#define sz(x) (x).size()
#define mp make_pair
// #define endl '\n'
const int mod = 998244353;
const int INF = 1e18;
const int N = 5e5 + 5;

void init() {}

int ask(vi a) {
    for (auto i : a) cout << i << " ";
    cout << endl;
    int x;
    cin >> x;
    if (x == -1 || x == 0) exit(0);
    return x;
}

void solve() {
    int n;
    cin >> n;
    int mx = ask(vi(n, 1)) + 1;
    int mn = n * 2 - ask(vi(n, n * 2));
    if (n == 1) {
        ask(vi(n, mx));
        return;
    }
    if (n == 2) {
        ask({mx, mn});
        ask({mn, mx});
        return;
    }
    vi ans(n);
    vi u;
    int L = mx - mn;
    int R = (L + 1) / 2;
    int l = mn + L / 2;
    int r = mn + (L + 1) / 2;
    for (int i = 0; i < n; i++) {
        vi c(n, r);
        c[i] = mn;
        int a = ask(c);
        if (a > R) {
            ans[i] = mn + a;
            continue;
        }
        c = vi(n, l);
        c[i] = mx;
        int b = ask(c);
        if (b > R) {
            ans[i] = mx - b;
            continue;
        }
        if (L % 2 == 0) {
            ans[i] = l;
        } else {
            ans[i] = l;
            u.pb(i);
        }
    }

    for (int i : u) {
        vi c = ans;
        if (l > 2) {
            c[i] = 1;
            int x = ask(c);
            ans[i] = 1 + x;
        } else {
            c[i] = 2 * n;
            int x = ask(c);
            ans[i] = 2 * n - x;
        }
    }
    ask(ans);
}

signed main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    init();

    int t = 1;
    // cin >> t;
    while (t--)
        solve();

    return 0;
}

I. I Don’t Miss Pennies

cpp
#include <bits/stdc++.h>
using namespace std;
using ll = long long;

#define debug(x) cout << #x << '=' << x << ' ';
#define DL cout << '\n';

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	
	int n;
	cin >> n;

	vector<int> a(5);
	for (int i = 1; i <= n; i ++) {
		int x;
		cin >> x;
		a[x % 5] ++;
	}

	ll ans = 0;
	ans += a[2] * 2;
	
	ll need = min(a[3], a[4]);
	ans += need * 2;
	a[3] -= need;
	a[4] -= need;
	ans += a[1];

	ll t = a[3] / 2;
	ans += t;
	a[3] %= 2;
	ans -= a[3] * 2;

	t = a[4] / 3;
	ans += t * 2;
	a[4] %= 3;
	ans -= a[4];

	cout << ans;
}

K. Kindergarten Revisited

cpp
#pragma GCC optimize("O2")
#include <bits/stdc++.h>
#include <numeric>
using namespace std;
#define int long long
#define i64 int64_t
#define db long double
#define pii pair<int, int>
#define tiii tuple<int, int, int>
#define ull unsigned long long
#define vi vector<int>
using i128 = __int128;
#define vpii vector<pii>
#define vvpii vector<vector<pii>>
#define vvi vector<vi>
#define pqpii priority_queue<pii, vector<pii>, greater<pii>>
#define pqi priority_queue<int, vi, greater<int>>
#define f first
#define s second
#define all(x) (x).begin(), (x).end()
#define pb push_back
#define eb emplace_back
#define sz(x) (x).size()
#define mp make_pair
// #define endl '\n'
const int mod = 998244353;
const int INF = 1e18;
const int N = 5e5 + 5;

void init() {}
struct Rec {
    int x1, y1, x2, y2;
    pii p[4];
};
vector<Rec> a;
i128 cross(pii a, pii b, pii c) {
    return (i128)(b.f - a.f) * (c.s - a.s) - (i128)(b.s - a.s) * (c.f - a.f);
}
bool check(const vi& id, vi& A, vi& B) {
    vpii p;
    for (auto x : id) {
        for (int k = 0; k < 4; k++) {
            p.pb(a[x].p[k]);
        }
    }
    int m = sz(p);
    for (int i = 0; i < m; i++) {
        for (int j = i + 1; j < m; j++) {
            if (p[i] == p[j]) continue;
            A.clear();
            B.clear();
            bool flag = true;
            for (auto x : id) {
                bool pos = false, n = false;
                for (int k = 0; k < 4; k++) {
                    i128 v = cross(p[i], p[j], a[x].p[k]);
                    if (v > 0) pos = true;
                    if (v < 0) n = true;
                }
                if (pos && n) {
                    flag = false;
                    break;
                }
                if (pos) A.pb(x);
                else if (n) B.pb(x);
            }
            if (flag && !A.empty() && !B.empty()) {
                return true;
            }
        }
    }

    return false;
}

void solve() {
    int n;
    cin >> n;
    a.resize(n);
    for (int i = 0; i < n; i++) {
        cin >> a[i].x1 >> a[i].y1 >> a[i].x2 >> a[i].y2;
        a[i].p[0] = {a[i].x1, a[i].y1};
        a[i].p[1] = {a[i].x1, a[i].y2};
        a[i].p[2] = {a[i].x2, a[i].y1};
        a[i].p[3] = {a[i].x2, a[i].y2};
    }
    vi st(n);
    iota(all(st), 0);
    queue<vi> q;
    q.push(st);
    int ans = 0;
    while (!q.empty()) {
        vi id = q.front();
        q.pop();
        if (sz(id) == 1) continue;
        vi A, B;
        if (!check(id, A, B)) {
            cout << "impossible\n";
            return;
        }
        ans++;
        q.push(A);
        q.push(B);
    }
    cout << ans << '\n';
}

signed main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    init();

    int t = 1;
    // cin >> t;
    while (t--)
        solve();

    return 0;
}

其他没做的题

  • Acorn Quarrels
  • Boss Rush
  • Cable Pruning
  • Draw Your Deck
  • Gemstone Dowsing
  • Jelly Fusion
  • Leaking Santa’s Secrets
  • Maki Conveyor Belt