Problem D. Black Magic
题意:
给出n个方块,每个方块左右可能是黑色或者白色,如果两个相邻面都是黑色,这两个方块会连在一起,问最大和最小的连通块数量。
题解:
分类讨论,对于连通块最多的情况,要让能够相连的方块对尽量少。
可以发现,所有L可以全放在最左边,所有R可以全放在最右边,这样他们就不会和中间的方块相连,之后
尽可能用E把B隔开即可。对于连通块最少的情况,要让能够相连的方块对尽可能多。可以先把所有B拼在一起,之后可以把一个L和一个R分为一组拼起来。注意如果有至少一组LR并且也有至少一块B的话,可以把一组LR拆开拼在B的两边,这样可以再减少一个连通块。
代码:
#include<iostream>
#include<algorithm>
#define int long long
using namespace std;
int e, l, r, b;
void solve(){
cin >> e >> l >> r >> b;
if(b){
if(l + r) cout << e + 1 + max(l - 1, r - 1) << ' ';
else cout << e + 1 << ' ';
}
else {
if(l + r)cout << e + max(l, r) << ' ';
else cout << e << ' ';
}
if(b > e + 1) cout << e + l + r + b - (b - (e + 1)) << '\n';
else cout << e + l + r + b << '\n';
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int t;
cin >> t;
while(t--){
solve();
}
}
Problem H. Triangle Game
题意:
给出三角形的三条边,每个人每次可以选择一条边并减少这条边,不能操作的人输。问先手是否必胜。
题解:
每条边减一之后异或和不为零则为必胜。
代码:
#include<iostream>
using namespace std;
int a, b, c;
void solve(){
cin >> a >> b >> c;
if((a - 1) ^ (b - 1) ^ (c - 1)) cout << "Win\n";
else cout << "Lose\n";
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int t;
cin >> t;
while(t--){
solve();
}
}
Problem C. Counting Stickmen
题意:
给定一张图,求符合要求的火柴人的数量。
题解:
先预处理可以做手、脚等的节点并记录有几种方案,最后组合数在去重即可。
代码:
#include<iostream>
#include<vector>
#define int long long
using namespace std;
const int N = 1e6 + 10;
const int mod = 998244353;
int n, u, v, ans;
int d[N], shou[N], tui[N];
vector<int> edg[N];
int C2(int x){
return (x * (x - 1) / 2) % mod;
}
void init(){
ans = 0;
for(int i = 1; i <= n; i++){
d[i] = tui[i] = shou[i] = 0;
edg[i].clear();
}
}
void dfs1(int u, int fa){
for(int v : edg[u]){
shou[u] += d[v] - 1;
if(d[v] >= 3) tui[u] += C2(d[v] - 1);
if(v == fa) continue;
dfs1(v, u);
}
}
void dfs2(int u, int fa){
for(int v : edg[u]){
if(d[v] >= 3 && d[u] >= 4) (ans += C2(d[v] - 1) * (C2(shou[u] - (d[v] - 1)) - (tui[u] - C2(d[v] - 1)) + mod) % mod * (d[u] - 3) % mod) %= mod;
if(v == fa) continue;
dfs2(v, u);
}
}
void solve(){
init();
cin >> n;
for(int i = 1; i < n; i++){
cin >

最低0.47元/天 解锁文章
870

被折叠的 条评论
为什么被折叠?



