WA了。帮同学问的,他被禁言了
查看原帖
WA了。帮同学问的,他被禁言了
170588
stevenzhc楼主2022/9/17 10:35

他的代码:

#include <cstdio>
#include <iostream>

using namespace std;

struct Unit
{
	int line, col;
	Unit(int li = 0, int co = 0)
	{
		line = li;
		col = co;
	}
}_q[10000001];

int _n, _m;
int _grid[505][505];
bool _vis[505][505];
bool _flag[505];
int _l[505], _r[505];
int _dl[4] = {1, -1, 0, 0};
int _dc[4] = {0, 0, 1, -1};
//queue <Unit> _q;

inline void BFS(int s)
{
	int sp = 1, ep = 1;
	//while (!_q.empty()) _q.pop();
	_q[++ep] = Unit(1, s);
	//_q.push(Unit(1, s));
	while (sp <= ep)
	{
		//Unit t = _q.front();
		Unit t = _q[sp];
		_vis[t.line][t.col] = 1;
		sp++;
		//_q.pop();
		for (int i = 0; i < 4; ++i)
		{
			int nl = t.line + _dl[i];
			int nc = t.col + _dc[i];
			if (nl < 1 || nl > _n) continue;
			if (nc < 1 || nc > _m) continue;
			if (_vis[nl][nc]) continue;
			if (_grid[nl][nc] >= _grid[t.line][t.col]) continue;
			//_q.push(Unit(nl, nc));
			_q[++ep] = Unit(nl, nc);
		}
	}
}

int main()
{
//	freopen("P1514_5.in", "r", stdin);
	scanf("%d%d", &_n, &_m);
	for (int i = 1; i <= _n; ++i) 
	{
		for (int j = 1; j <= _m; ++j)
		{
			scanf("%d", &_grid[i][j]);
		}
	}
	for (int i = 1; i <= _m; ++i)
	{
//		printf("Searching %d\n", i);
		if (_vis[1][i])
		{
			_l[i] = _l[_vis[1][i]];
			_r[i] = _r[_vis[1][i]];
			continue;
		} 
		for (int i = 1; i <= _n; ++i)
		{
			for (int j = 1; j <= _m; ++j)
			{
				_vis[i][j] = 0;
			}
		}
		BFS(i);
		bool flag = false;
		for (int j = 1; j <= _m; ++j)
		{
			if (_vis[_n][j]) _flag[j] = 1;
			if (!flag && _vis[_n][j])
			{
				_l[i] = j;
				flag = true;
			}
			if (flag && !_vis[_n][j])
			{
				_r[i] = j - 1;
				flag = false; 
			}
		}
		if (flag) _r[i] = _m;
		//cout << _l[i] << ' ' << _r[i] << endl;
	}
	int cnt = 0;
	for (int i = 1; i <= _m; ++i)
	{
		if (!_flag[i])
		{
			cnt++;
		}
	}
	if (cnt) 
	{
		printf("0\n%d", cnt);
		return 0;
	}
	int lp = 1, rp = _r[1];
	int ans = 0;
	while (rp < _m)
	{
		for (int i = 1; i <= _m; ++i)
		{
			if (_l[i] <= lp)
			{
				rp = max(rp, _r[i]);
			}
		}
		lp = rp + 1;
		++ans;
	}
	printf("1\n%d", ans);
  	return 0;
    //pyyakioi!
}	

问题是:不开O2 WA #5, 开O2 RE #5,都是90分
评测记录: 86791469

2022/9/17 10:35
加载中...