首页 > 太阳之华
头像 pandaC222
发表于 2026-03-24 00:43:54
本题是博弈题,思路很简单,只要观察一下我们就能注意到蓝色只有一种赢得情况,就是图中没有红色块,而对于红色这种情况也成立,由于红色是先手,所以只要红色第一次选择可以把蓝色全部变为红色就可以获胜,如果不可以就会陷入势均力敌的状态,大概手模一下就能知道。分析完毕,我们来用代码实现这个过程,我们首先存图记录 展开全文
头像 AliLexiWalker
发表于 2026-03-24 08:41:28
先把所有红色连通块找出来,然后统计每个红块“挨着”的蓝格数量:如果存在一个红块能挨到全部蓝格,红方先手第一步直接全染红,答案就是 Red。 如果一开始全蓝就是 Blue;否则红方做不到一步清场时,蓝方也永远不可能把红格变蓝,结果是 Draw。 void solve(){ int n,m;ci 展开全文
头像 憨憨的竹林
发表于 2026-03-24 01:24:03
不难发现,由于红色先手,那么蓝色只有一种情况可以赢,就是开始的时候全是蓝色的那么红色怎么能赢呢,不难发现如果可以通过一次吞并直接把所有蓝色变成红色,那么红色能赢,否则没有斩草除根的后果就是达成平局假设初始有cnt个蓝色块那我们要做的也就是遍历每个红色连通块,看看他能不能吞掉所有蓝色块(即查看与他接壤 展开全文
头像 IA3000
发表于 2026-03-24 09:19:34
#include <bits/stdc++.h> using namespace std; const int N=2e3+5; bitset<N> mat[N]; bool vis[N][N]; int cnt,tot; int n,m; array<int, 2&g 展开全文
头像 为芙宁娜献出心脏
发表于 2026-03-24 09:32:00
纯BFS,首先最开始模拟的时候我们很容易就会发现,对于红色,必须存在一个连通块和所有蓝色格子四联通,否则平局。 对于蓝色,则是除非全部都是蓝色格子,不然赢不了 所以直接BFS所有红色的连通块查找是否存在一个连通块和所有蓝色格子四联通就行了 代码如下: // BggBB 展开全文
头像 leo_ccc
发表于 2026-03-24 13:48:06
#include<bits/stdc++.h> #define ll long long #define all(a) a.begin(),a.end() #define rall(a) a.rbegin(),a.rend() #define endl "\n" #d 展开全文
头像 olone
发表于 2026-03-24 15:31:36
import java.util.*; public class Main{ static int N = 2005; public static class pos{ int x; int y; pos(){} po 展开全文
头像 chenlan114
发表于 2026-03-24 16:17:44
#include<bits/stdc++.h> using namespace std; using ll=long long; const ll N=2e3+5; vector<vector<char>>g; vector<vector<bool&g 展开全文