样例略微有点弱,写了个错误的代码但是水过去了,大佬有兴趣可以来hack下
  • 板块CF377A Maze
  • 楼主Exile_Code
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/4/2 23:18
  • 上次更新2024/4/3 14:29:04
查看原帖
样例略微有点弱,写了个错误的代码但是水过去了,大佬有兴趣可以来hack下
819682
Exile_Code楼主2024/4/2 23:18

样例略微有点弱,写了个错误的代码但是水过去了,大佬有兴趣可以来hack下

#define  _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;
#include <vector>
#include <set>
#include <map>
#include <cstdio>
#include <cstring>
#include <queue>
#include <cstdlib>
#include <algorithm>
#include <list>
#include <string>
#include <cmath>
#include <bitset>
#include <stack>
#include <math.h>
#include <functional>
#include <unordered_map>
#include <unordered_set>
 
 
#define ull		        unsigned long long 
#define ll              long long
#define pii             pair<ll ,ll>
#define cy              cout<<"YES"<<endl
#define cn              cout<<"NO"<<endl
#define forn(i,begin,end,add)	for(ll (i)=(begin);(i)<=(end);(i)+=(add))	//begin是i的起始,end是i的终止,add是每次加的大小
#define rforn(i,begin,end,sub)  for(ll (i)=(end);(i)>=(begin);(i)-=(sub))	//r是倒序遍历
#define vv              vector
#define inf32           INT32_MAX/2
#define inf64           INT64_MAX/2
#define LD              double
#define PI              acos(-1)
#define debug(a,b)		cout<<a<<b
#define eps				1e-12
 
 
const int N = 4e5 + 100;
const int mod = 1e9 + 7;
ll T;
 
 
void solve() {
 
	int n, m, k; cin >> n >> m >> k;
	vv<string>area(n + 2);
	forn(i, 0, m, 1)
		area[0] += '#';
	forn(i, 1, n, 1) {
		cin >> area[i];
		area[i] = '#' + area[i] + '#';
	}
	forn(i, 0, m, 1)
		area[n + 1] += '#';
	map<int, pii>mp;
	int dx[4] = { 0,1,0,-1 };
	int dy[4] = { 1,0,-1,0 };
 
	auto dfs = [&](int x, int y, auto&& dfs, int& now) {
 
		if (area[x][y] != '.')
			return;
		area[x][y] = '1';
		now++;
		forn(i, 0, 3, 1)
			dfs(x + dx[i], y + dy[i], dfs, now);
	};
	forn(i, 1, n, 1)
		forn(j, 1, m, 1)
		if (area[i][j] == '.') {
			int now = 0;
			dfs(i, j, dfs, now);
			mp[now] = { i,j };
		}
 
	auto dfs2 = [&](int x, int y, auto&& dfs2, int& k)->int {
		if (area[x][y] != '1')
			return 0;
		area[x][y] = '2';
 
		int all = 0;
		forn(i, 0, 3, 1) {
			all += dfs2(x + dx[i], y + dy[i], dfs2, k);
		}
		if (all == 0 && k) {
			area[x][y] = 'X';
			k--;
			return 0;
		}
		else {
			return 1;
		}
	};
 
	for (auto& a : mp) {
		if (!k)
			break;
		dfs2(a.second.first, a.second.second, dfs2, k);
	}
 
	forn(i, 1, n, 1) {
		forn(j, 1, m, 1) {
			if (area[i][j] == '#')
				cout << '#';
			else if (area[i][j] == 'X')
				cout << 'X';
			else
				cout << '.';
		}
		cout << endl;
	}
	cout << endl;
}
int main() {
 
 
	std::ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
 
	T = 1;
	//cin >> T;
	while (T--)
		solve();
 
 
}
 
	        	 		   	  		  	 			
2024/4/2 23:18
加载中...