他的代码:
#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