Published on

Codeforces Round (2021-01-19)

Authors
  • avatar
    Name
    Zhiheng Wang
    Twitter

A

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstring>
using namespace std;

const int maxn = 1e5 + 17;
int T, n, b[maxn], a[maxn];
string str;

int main() {
	cin >> T;
	while(T--) {
		cin >> n;
		cin >> str;
		for(int i = 1; i <= n; i++) b[i] = str[i - 1] - '0';
		for(int i = 1; i <= n; i++) {
			if(b[i]) {
				if(b[i - 1]) {
					a[i] = 1 - a[i - 1];
				}
				else {
					a[i] = 1;
				}
			}
			else {
				if(b[i - 1]) {
					a[i] = a[i - 1];
				}
				else {
					a[i] = 1 - a[i - 1];
				}
			}
		}
		for(int i = 1; i <= n; i++) printf("%d", a[i]);
		puts("");
	}
	return 0;
}

B

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;

const int maxn = 1e6 + 17;
int T, d, n = 1000000;
int p[maxn], vis[maxn], cnt;

int main() {
	vis[0] = vis[1] = 1;
	for(int i = 2; i <= n; i++) {
		if(!vis[i]) p[++cnt] = i;
		for(int j = 1; j <= cnt && 1ll * p[j] *i <= n; j++) {
			vis[i * p[j]] = p[j];
			if(!(i % p[j])) break;
		}
	}
	// for(int i = 1; i <= 20; i++) cout << p[i] << endl;
	cin >> T;
	while(T--) {
		cin >> d;
		int p1, p2;
		for(p1 = 1; p[p1] - 1 < d; p1++);
		for(p2 = p1; p[p2] - p[p1] < d; p2++);
		cout << 1ll * p[p1] * p[p2] << endl;
	}
	return 0;
}

C

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>
#define mp make_pair
#define pb push_back
using namespace std;

typedef pair<int, int> pii;
const int maxn = 2e6 + 17;
int T, n, a[maxn], c[maxn];
int ans[maxn][2], f;

bool cmp(int x, int y) {
	return x > y;
}

void dfs(int u, int p) {
	while(c[a[p]] > 0 && p <= n * 2) p++;
	if(p > n * 2) {
		f = 1;
		return;
	}
	int tmp = ans[u - 1][1] - a[p];
	if(c[tmp] > 0) {
		c[a[p]]--, c[tmp]--;
		ans[u][0] = tmp, ans[u][1] = a[p];
		dfs(u + 1, p + 1);
		c[a[p]]++, c[tmp]++;
	}
}

int main() {
	scanf("%d", &T);
	while(T--) {
		int flg = 0;
		scanf("%d", &n);
		for(int i = 1; i <= 2 * n; i++) scanf("%d", &a[i]), c[a[i]]++;
		sort(a + 1, a + 1 + 2 * n, cmp);
		for(int i = 2; i <= n * 2; i++) {
			f = 0;
			ans[0][1] = a[1] + a[i];
			dfs(1, 1);
			if(f) {
				puts("YES");
				flg = 1;
				printf("%d\n", ans[1][0] + ans[1][1]);
				for(int j = 1; j <= n; j++) printf("%d %d\n", ans[j][0], ans[j][1]);
				break;
			}
		}
		if(!flg) puts("NO");
		for(int i = 1; i <= 2 * n; i++) c[a[i]]--;
	}
	return 0;
}