竞赛讨论区 > 出题人参考代码 (非题解/std)
头像
蔡光
发布于 05-13 16:23
+ 关注

出题人参考代码 (非题解/std)

题解移步 orz

A

#include <bits/stdc++.h>

using namespace std;

void solve() {
	int n;
	std::cin >> n;

	std::vector<pair<int, int>> p(n + 1); 

	for (int i = 1; i <= n; i++) {
		auto &[x, y] = p[i];
		std::cin >> x;
		y = i;
	}

	std::sort(p.begin() + 1, p.end());

	for (int i = 1; i <= n; i++) {
		std::cout << p[i].second << " \n"[i == n];
	}
}

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

	int t = 1;
	// std::cin >> t;
	while (t--) {
		solve();
	}
}

B

#include <bits/stdc++.h>

using namespace std;

#define int long long

void solve() {
	int n, x, y;
	std::cin >> n >> x >> y;

	std::vector<std::array<int, 4>> p;

	std::function<void(int, int, int, int)> dfs = [&](int x1, int y1, int x2, int y2) {
		// std::cout << x1 << ' ' << y1 << ' ' << x2 << ' ' << y2 << '\n';
		if (x1 == x2 && y1 == y2) return;
		int len1 = (x2 - x1 + 1), len2 = len1 - 1;
		if (x != x1) {
			if (y != y1) {
				p.push_back({len1, x1, y1, 1});
				p.push_back({len2, x1 + 1, y1, 0});
				dfs(x1 + 1, y1 + 1, x2, y2);
				return;
			} else {
				p.push_back({len1, x1, y1, 1});
				p.push_back({len2, x1 + 1, y2, 0});
				dfs(x1 + 1, y1, x2, y2 - 1);
				return;
			}
		} else {
			if (y != y1) {
				p.push_back({len1, x2, y1, 1});
				p.push_back({len2, x1, y1, 0});
				dfs(x1, y1 + 1, x2 - 1, y2);
				return;
			} else {
				p.push_back({len1, x2, y1, 1});
				p.push_back({len2, x1, y2, 0});
				dfs(x1, y1, x2 - 1, y2 - 1);
				return;
			}
		}
	};
	dfs(1, 1, n, n);
	std::cout << "Yes\n";
		for (auto [a, b, c, d] : p) {
			std::cout << a << ' ' << b << ' ' << c << ' ' << d << '\n';
		}
}

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

	int t = 1;
	// std::cin >> t;
	while (t--) {
		solve();
	}
}

C

#include <bits/stdc++.h>

using namespace std;

#define int long long

void solve() {
	int n, l, r;
	std::cin >> n >> l >> r;

	std::cout << l << '\n';
}

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

	int t = 1;
	std::cin >> t;
	while (t--) {
		solve();
	}
}

D

#include <bits/stdc++.h>

using namespace std;

#define int long long

void solve() {
	int n, m;
	std::cin >> n >> m;

	std::map<int, int> mp;
	for (int i = 1; i <= n; i++) {
		std::string s;
		std::cin >> s;
		for (auto x : s) {
			mp[x - '0']++;
		}
	}

	int a = mp[1], b = mp[2], c = mp[3];

	int y = c - b;
	a -= y, b -= y;

	a *= 2;

	int x = (a - b) / 3;
	int z = (b - x) / 2;

	std::cout << x << ' ' << y << ' ' << z << '\n';
}

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

	int t = 1;
	// std::cin >> t;
	while (t--) {
		solve();
	}
}

E

#include <bits/stdc++.h>

using namespace std;

#define int long long

void solve() {
	int n, m, k;
	std::cin >> n >> m >> k;

	std::vector<std::vector<int>> is(n + 2, std::vector<int>(m + 2));
	auto t = is;
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= m; j++) {
			std::cin >> is[i][j];
		}
	}

	std::map<std::string, int> to;
	to["l"] = 0;
	to["r"] = 1;
	to["u"] = 2;
	to["d"] = 3;
	std::map<int, std::string> fto;
	fto[10] = "l";
	fto[11] = "r";
	fto[12] = "u";
	fto[13] = "d";
	fto[20] = "L";
	fto[21] = "R";
	fto[22] = "U";
	fto[23] = "D";
	fto[0] = "X";
	fto[1] = "O";
	int dy[] = {-1, 1, 0, 0};
	int dx[] = {0, 0, -1, 1};

	auto sml = [&](int x) {
		return x == 11 || x == 12 || x == 13 || x == 10;
	};

	auto big = [&](int x) {
		return x == 21 || x == 22 || x == 23 || x == 20;
	};

	for (int i = 1; i <= k; i++) {
		int x, y;
		std::string o;
		std::cin >> x >> y >> o;
		if (is[x][y] != 1) {
			continue;
		}
		// std::cout << i << ' ' << x + dx[to[o]] << ' ' << y + dy[to[o]] << ' ' << is[x + dx[to[o]]][y + dy[to[o]]] << '\n';
		if (sml(is[x + dx[to[o]]][y + dy[to[o]]])) {
			is[x + dx[to[o]]][y + dy[to[o]]] += 10;
			continue;
		}
		is[x][y] = to[o] + 10;
		t[x][y] = i;
		std::vector<std::array<int, 4>> a;
		for (int j = 0; j < 4; j++) {
			int rj = j ^ 1;
			if (is[x + dx[j]][y + dy[j]] == rj + 10) {
				a.push_back({-t[x + dx[j]][y + dy[j]], x + dx[j], y + dy[j], j});
			} 
		}
		std::sort(a.begin(), a.end());

		for (auto [T, X, Y, j] : a) {
			is[x][y] += 10;
			is[X][Y] = 1;
			t[X][Y] = 0;
			break;
		}
	}

	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= m; j++) {
			std::cout << fto[is[i][j]];
		} std::cout << '\n';
	}
}

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

	int t = 1;
	// std::cin >> t;
	while (t--) {
		solve();
	}
}

F

#include <bits/stdc++.h>

using namespace std;

#define int long long


int tr[2000000][21], idx;

int id[2000000];

int to_int(char c) {
	if (c >= 'A' && c <= 'Z') {
		return c - 'A' + 10;
	}
	return c - '0';
} 

char to_chr(int c) {
	if (c < 10) {
		return c + '0';
	} return c - 10 + 'A';
} 

void build(std::string s, int x) {
	int now = 0;
	for (int i = 0; i < s.size(); i++) {
		if (!tr[now][to_int(s[i])]) {
			tr[now][to_int(s[i])] = ++idx;
		}
		now = tr[now][to_int(s[i])];
	}
	id[now] = x;
}

int query(std::string s) {
	int now = 0;
	for (int i = 0; i < s.size(); i++) {
		for (int j = 15 - to_int(s[i]); j >= 0; j--) {
			if (tr[now][j]) {
				now = tr[now][j];
				goto G;
			}
		}
		for (int j = 15; j > 15 - to_int(s[i]); j--) {
			if (tr[now][j]) {
				now = tr[now][j];
				goto G;
			}
		}
		G:;
	}
	return id[now];
}

void solve() {
	int n, q;
	std::cin >> n >> q;

	for (int i = 1; i <= n; i++) {
		std::string s, t = "";
		std::cin >> s;
		for (int i = 1; i + s.size() <= 20; i++) {
			t += '0';
		}
		t += s;
		build(t, i);
		// std::cout << t << '\n';
	}

	for (int i = 1; i <= q; i++) {
		int x;
		std::cin >> x;

		std::string t = "";
		while (x) {
			t += to_chr(x % 16);
			x /= 16;
		}
		while (t.size() < 20) {
			t += '0';
		}

		std::reverse(t.begin(), t.end());

		// std::cout << t << '\n';
		std::cout << query(t) << '\n';
	}
}

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

	int t = 1;
	// std::cin >> t;
	while (t--) {
		solve();
	}
}

G

#include <bits/stdc++.h>

using namespace std;

#define int long long

int SG[1000][1000];

int sg(int x, int k) {
	if (x >= k) {
		return 0;
	}
	if (SG[x][k]) return SG[x][k];

	std::set<int> s;
	for (int i = 1; i <= x; i++) {
		s.insert(sg(x + i, k));
	}

	
	for (int i = 0; ; i++) {
		if (!s.count(i)) {
			return SG[x][k] = i;
		}
	}
	return -1;
}

void solve() {
	int n, k;
	std::cin >> n >> k;

	// for (int i = 1; i <= 50; i++) {
	// 	for (int j = i; j <= 50; j++) {
	// 		std::cout << (sg(i, j) == 0 ? 0 : 1) << " \n"[j == 50];
	// 	}
	// }

	if (n >= k) {
		std::cout << "Bob\n";
		return;
	}

	k -= n - 1;
	for (int i = n, j = 1; ; i *= 2, j *= 2) {
		k -= j;
		if (k <= 0) {
			std::cout << "Bob\n";
			return;
		}
		k -= i;
		if (k <= 0) {
			std::cout << "Alice\n";
			return;
		}
	}
}

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

	int t = 1;
	std::cin >> t;
	while (t--) {
		solve();
	}
}

H

#include <bits/stdc++.h>

using namespace std;

#define int long long

int to_int(char c) {
	if (c >= 'A' && c <= 'Z') {
		return c - 'A' + 10;
	}
	return c - '0';
} 

char to_chr(int c) {
	if (c < 10) {
		return c + '0';
	} return c - 10 + 'A';
} 


void solve() {
	int n;
	std::cin >> n;

	std::map<std::string, int> pos, neg;

	int ans = 0;
	for (int i = 1; i <= n; i++) {
		std::string s;
		std::cin >> s;

		if (s[0] == '-') {
			int m = 16;
			std::string t = "", rs = "";
			for (int j = s.size() - 1; j; j--) {
				if (m - to_int(s[j]) != 16) {
					t += to_chr(m - to_int(s[j]));
					m = 15;
				} else {
					t += '0';
				}
				rs += s[j];
			}
			std::string r = t;

			while (r.size() < 100) {
				r += 'F';
				if (neg.count(r)) {
					ans += neg[r];
					// std::cout << s << ' ' << r << '\n';
				}
			}
			int pre0 = 1;
			r = "";
			for (int j = t.size() - 1; j >= 0; j--) {
				if (pre0) {
					if (to_int(t[j])) {
						pre0 = 0;
					}
				}
				if (!pre0) {
					r += t[j];
				}
			}
			if (r == "") {
				r = "0";
			}
			std::reverse(r.begin(), r.end());
			if (neg.count(r)) {
				// std::cout << s << ' ' << r << '\n';
				ans += neg[r];
			}
			neg[rs]++;
		} else {
			ans += pos[s];
			pos[s]++;
		}
	}
	std::cout << ans * 2 << '\n';
}

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

	int t = 1;
	// std::cin >> t;
	while (t--) {
		solve();
	}
}

#include <bits/stdc++.h>

using namespace std;

#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#pragma GCC target("avx2")
#pragma GCC optimize(3, "inline")
// #define int long long
#ifndef Cai_Guang
#define debug //
#define test //
#endif

int fto(char c) {
	if ('0' <= c && c <= '9') return c - '0';
	else return c - 'A' + 10;
}
 
char to(int x) {
	if (0 <= x && x <= 9) return x + '0';
	else return x - 10 + 'A';
}

void solve() {
	int n;
	std::cin >> n;
	
	std::unordered_map<std::string, int> mp_pos, mp_neg;
	
	long long ans = 0;
	
	for (int i = 1; i <= n; i++) {
		std::string s;
		std::cin >> s;
		if (s[0] != '-') {
			if (mp_pos.count(s)) {
				ans += mp_pos[s];
			}
			mp_pos[s]++;
		} else {
			std::string r = "", t = "";
			std::reverse(s.begin(), s.end());
			auto id = s.end();
			s.erase(--id);
			int minus = 16;
			for (int i = 0; i <= s.size() - 1; i++) {
				int g = fto(s[i]);
				r += to((minus - g) % 16);
				if (g && minus == 16) {
					minus = 15;
				}
			}
			t = r;
			for (; t.size() <= 100; ) {
				t += 'F';
				if (mp_neg.count(t)) {
					ans += mp_neg[t];
				}
			}
			t = "";
			int pre0 = 1;
			for (int i = r.size() - 1; i >= 0; i--) {
				char x = r[i];
				if (x != '0') {
					pre0 = 0;
				}
				if (!pre0) {
					t += x;
				}
			}
			if (t == "") {
				t = "0";
			}
			std::reverse(t.begin(), t.end());
			ans += mp_neg[t];
			// std::cout << "!" << s << ' ' << t << '\n';
			mp_neg[s]++;
		}
	}
	std::cout << ans * 2 << '\n';
}

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

#ifdef Cai_Guang
//freopen("1.in", "r", stdin);
localTest = true;
#endif
     
    int t = 1;
    // std::cin >> t;
    while(t--) {
        solve();
    }
}

I

#include <bits/stdc++.h>

using namespace std;

#define int long long

struct C {
	int x, y, r;
	void read() {
		std::cin >> x >> y >> r;
	}
};

C c[10];
void solve() {
	c[1].read(), c[2].read();

	int d2 = (c[1].x - c[2].x) * (c[1].x - c[2].x) + (c[1].y - c[2].y) * (c[1].y - c[2].y);

	int rp2 = (c[1].r + c[2].r) * (c[1].r + c[2].r);

	int rm2 = (c[1].r - c[2].r) * (c[1].r - c[2].r);

	if (c[1].x == c[2].x && c[1].y == c[2].y && c[1].r == c[2].r) {
		std::cout << -1 << '\n';
		return;
	}

	if (d2 == rm2) {
		std::cout << 1 << '\n';
		return;
	}

	if (d2 == rp2) {
		std::cout << 3 << '\n';
		return;
	}

	if (d2 > rp2) {
		std::cout << 4 << '\n';
		return;
	}

	if (d2 > rm2) {
		std::cout << 2 << '\n';
		return;
	}

	std::cout << 0 << '\n';
}

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

	int t = 1;
	std::cin >> t;
	while (t--) {
		solve();
	}
}

J

#include <bits/stdc++.h>

using namespace std;

#define int long long

void solve() {
	int n;
	std::cin >> n;

	std::vector<std::vector<int>> G(n + 1, std::vector<int>());
	for (int i = 1; i < n; i++) {
		int u, v;
		std::cin >> u >> v;
		G[u].push_back(v);
		G[v].push_back(u);
	}

	std::vector<int> dep(n + 1);
	G[0].push_back(1);
	int ans = n * (n - 1) * (n - 2) / 6;
	std::function<void(int, int)> dfs = [&](int x, int fx) {
		dep[x] = dep[fx] + 1;
		for (auto y : G[x]) {
			if (y == fx) continue;
			dfs(y, x);
		}
		// std::cout << x << ' ' << G[x].size() << ' ' << dep[x] << ' ' << ans << '\n';
		if (G[x].size() == 1) {
			ans -= dep[x] * (dep[x] - 1) * (dep[x] - 2) / 6;
		} else { 
			ans += dep[x] * (dep[x] - 1) * (dep[x] - 2) / 6 * (G[x].size() - 2);
		}
	};

	dfs(1, 0);

	std::cout << ans << '\n';
}	

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

	int t = 1;
	// std::cin >> t;
	while (t--) {
		solve();
	}
}

K

#include <bits/stdc++.h>

using namespace std;

#define int long long


int dx[] = {0, 1, 0, -1};
int dy[] = {1, 0, -1, 0};

void solve() {
	int n, m;
	std::cin >> n >> m;

	int x = 1, y = 0;
	std::vector<std::vector<int>> a(n + 1, std::vector<int>(m + 1));
	for (int i = 1, j = 0; i <= n * m; i++) {
		int nx = x + dx[j], ny = y + dy[j];
		if (nx > n || nx < 1 || ny > m || ny < 1 || a[nx][ny]) {
			j ++;
			j %= 4;
		}
		x += dx[j], y += dy[j];	
		a[x][y] = i;
	}

	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= m; j++) {
			std::cout << a[i][j] << " \n"[j == m];
		}
	}
}

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

	int t = 1;
	// std::cin >> t;
	while (t--) {
		solve();
	}
}

L

其中开 __int128 是因为原本的数据范围较大,后续对题目进行了调整。

#include <bits/stdc++.h>

using namespace std;

#define int long long

void solve() {
	int n, m, x;
	std::cin >> n >> m >> x;

	int l = 0, r = min(n, m) / 2 + 1;

	while (l + 1 < r) {
		int mid = (l + r + 1) >> 1;

		int b = n + n + m + m - 4, e = b - (mid - 1) * 8;

		__int128 sum = (__int128)(b + e) * mid / 2;
		if (sum < x) {
			l = mid;
		} else {
			r = mid;
		}
	}

	r--;
	int b = n + n + m + m - 4, e = b - (r - 1) * 8;

	__int128 sum = (__int128)(b + e) * r / 2; 
	x -= sum;
	int L = n - r * 2 - 1, R = m - r * 2 - 1;
	if (x <= R) {
		std::cout << r + 1 << ' ' << r + x << '\n';
	} else if (x <= L + R) {
		std::cout << r + x - R << ' ' << r + R + 1 << '\n';
	} else if (x <= L + R + R) {
		std::cout << r + L + 1 << ' ' << r + R + 1 - (x - L - R) + 1 << '\n';
	} else {
		std::cout << r + L + 1 - (x - L - R - R) + 1 << ' ' << r + 1 << '\n';
	}
}

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

	int t = 1;
	std::cin >> t;
	while (t--) {
		solve();
	}
}

M

#include <bits/stdc++.h>

using namespace std;

void solve() {
	int a, b, c, d;
	std::cin >> a >> b >> c >> d;
	if (a != b && b == c && c != d && a != d) {
		std::cout << "YES\n";
	} else {
		std::cout << "NO\n";
	}
}

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

	int t = 1;
	// std::cin >> t;
	while (t--) {
		solve();
	}
}

验题榜单,感谢各位的参与与批评指正/

全部评论

(0) 回帖
加载中...
话题 回帖

等你来战

查看全部

热门推荐