70求调(#1,#3,#10,#11TLE)
  • 板块P1141 01迷宫
  • 楼主cgxd
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/4/30 22:06
  • 上次更新2024/5/1 10:12:20
查看原帖
70求调(#1,#3,#10,#11TLE)
1272259
cgxd楼主2024/4/30 22:06
#include<bits/stdc++.h>
#define y1 yone
#define left leftn
using namespace std;
int n, m, x, y, cnt, left;
bool vis[1005][1005];
vector<bitset<1005>> v(1, 0);
deque<complex<int>> dq;
const complex<int> dir[] = {complex<int>(1, 0), complex<int>(0, 1), complex<int>(-1, 0), complex<int>(0, -1)};
int main(){
	int n, m;
	cin >> n >> m;
	for(int i = 0; i < n; i++){
		string s;
		cin >> s;
		reverse(s.begin(), s.end());
		s.push_back('0');
		bitset<1005> bs(s);
		v.push_back(bs);
	}v.push_back(0);
	while(m--){
		memset(vis, 0, sizeof(vis));
		cnt = 1;
		left = n * n - 1;
		cin >> x >> y;
		complex<int> c(x, y);
		vis[x][y] = 1;
		dq.assign(1, c);
		while(dq.size() and left){
			complex<int> c1(dq[0]);
			int x = c1.real(), y = c1.imag();
			dq.pop_front();
			for(complex<int> comp: dir){
				complex<int> c2(c1 + comp);
				int x1 = c2.real(), y1 = c2.imag();
				int k = vis[x1][y1] + 1;
				if(x1 <= 0 or x1 >= n + 1 or y1 <= 0 or y1 >= n + 1)
					continue;
				if(vis[x1][y1] or !(v[x][y] xor v[x1][y1]))
					continue;
				vis[x1][y1] = 1;
				cnt++;
				dq.push_back(c2);
				if(!(--left))
					break;
			}
		}cout << cnt << '\n';
	}return 0;
}
2024/4/30 22:06
加载中...