1. 程式人生 > 實用技巧 >Codeforces Round #668 (Div. 1)題解

Codeforces Round #668 (Div. 1)題解

自閉場,VP的時候一道題都不會做,我退役罷

A.Balanced Bitstring

題解:找性質題

注意到如果要使每個長為$k$的子串中$0,1$數量相等,則$a[i]=a[i+k],i \in [1,n-k]$

於是如果有$a[i%k]$互不相等,則無解

這樣我們就有了一段長為$k$的字串

統計它之中$0,1$的個數

如果$>k/2$則無解

否則一定有解

#include <bits/stdc++.h>
using namespace std;
int n, k, sum1, sum2;
string a;
int f[300011];
void solve() {
	scanf("%d%d", &n, &k); 
	cin >> a; memset(f, -1, sizeof(f));
	for(int i = 0; i < n; i++) {
		if(a[i] != '?') {
			if(f[i%k] == -1) f[i % k] = a[i] - '0';
			else if(f[i%k] != (int)(a[i] - '0')) {
				cout << "NO" << endl;
				return;
			}
		}
	}
	sum1 = sum2 = 0;
	for(int i = 0; i < k; i++) {
		sum1 += (f[i] == 0);
		sum2 += (f[i] == 1);
	}
	if(sum1 > k/2 || sum2 > k/2) cout << "NO" << endl;
	else cout << "YES" << endl;
}
int main() {
	int T; scanf("%d", &T);
	while(T--) solve();
	return 0;
}


B.Tree Tag

題解:我們考慮什麼情況下Alice可以獲勝

如果$dis_{a,b} \leq da$,則Alice可以一步就追上Bob

如果Alice處在一個能覆蓋整棵樹的點,即$da*2+1 \geq$樹的直徑,那麼Bob也無處可走了

其它情況下,Alice會一步一步逼近Bob,並一定能把Bob逼近某棵子樹

如果當前Alice佔據一個點,使Bob無論怎麼走都還在Alice的控制範圍內,那麼Alice必勝

此時條件即為$2da \geq db$

除以上條件外,Bob獲勝

#include <bits/stdc++.h>
using namespace std;
int n, a, b, da, db, dis[100011];
vector <int> e[100011];
void dfs(int w, int fa) {
	dis[w] = dis[fa] + 1;
	for(int i = 0; i < (int)e[w].size(); i++) {
		int ver = e[w][i];
		if(ver != fa) dfs(ver, w);
	}
}
void solve() {
	scanf("%d%d%d%d%d", &n, &a, &b, &da, &db);
	for(int i = 1; i <= n; i++) e[i].clear();
	for(int i = 1; i < n; i++) {
		int u, v; scanf("%d%d", &u, &v);
		e[u].push_back(v); e[v].push_back(u);
	}
	dfs(1, 0); int maxw = 0;
	for(int i = 1; i <= n; i++) 
		if(dis[maxw] < dis[i]) maxw = i;
	dfs(maxw, 0);
	maxw = 0;
	for(int i = 1; i <= n; i++) 
		if(dis[maxw] < dis[i]) maxw = i;
	if(dis[maxw] <= da*2+1) {
		printf("Alice\n");
		return;
	}
	dfs(a, 0);
	if(dis[b] <= da+1) {
		printf("Alice\n");
		return;
	}
	if(2*da >= db) {
		printf("Alice\n");
		return;
	}
	printf("Bob\n");
}
int main() {
	int t; scanf("%d", &t);
	while(t--) solve();
	return 0;
}