이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
int inf = 1e9;
vector<int> dl;
vector<int> dc;
int r,c,n;
int xs,ys,xf,yf;
vector<vector<char>> a;
vector<vector<int>> d;
vector<vector<bool>> viz;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin >> r >> c >> n >> xs >> ys >> xf >> yf;
a.resize(r + 1);
for (int i = 1; i <= r; i++)
{
a[i].resize(c + 1);
for (int j = 1; j <= c; j++)
cin >> a[i][j];
}
d.resize(r + 1);
for (int i = 1; i <= r; i++)
d[i].resize(c + 1);
viz.resize(r + 1);
for (int i = 1; i <= r; i++)
viz[i].resize(c + 1);
deque<pair<int,int>> dq;
for (int i = 1; i <= r; i++)
for (int j = 1; j <= c; j++)
d[i][j] = inf;
d[xs][ys] = 0;
dq.push_back({xs,ys});
dl = {-1,0,1,0,-n,-n,-(n - 1),(n - 1),n,n,(n - 1),-(n - 1)};
dc = {0,1,0,-1,-(n - 1),(n - 1),n,n,(n - 1),-(n - 1),-n,-n};
while (!dq.empty())
{
pair<int,int> nod = dq.front();
dq.pop_front();
if (viz[nod.first][nod.second])
break;
viz[nod.first][nod.second] = true;
if (abs(nod.first - xf) <= n and abs(nod.second - yf) <= n and abs(nod.first - xf) + abs(nod.second - yf) != 2 * n)
{
if (d[xf][yf] > 1 + d[nod.first][nod.second])
{
d[xf][yf] = 1 + d[nod.first][nod.second];
dq.push_back({xf,yf});
}
}
for (int i = 0; i < dl.size(); i++)
{
int nx = nod.first + dl[i],ny = nod.second + dc[i];
nx = max(nx,1);
nx = min(nx,r);
ny = max(ny,1);
ny = min(ny,c);
if (i >= 4 or a[nx][ny] == '#')
{
if (d[nx][ny] > 1 + d[nod.first][nod.second])
{
d[nx][ny] = 1 + d[nod.first][nod.second];
dq.push_back({nx,ny});
}
}
else
{
if (d[nx][ny] > d[nod.first][nod.second])
{
d[nx][ny] = d[nod.first][nod.second];
dq.push_front({nx,ny});
}
}
}
}
cout << d[xf][yf];
return 0;
}
///nu m-as fi gandit acum cateva luni ca doar colturile sunt relevante (man ce bot eram)
컴파일 시 표준 에러 (stderr) 메시지
Main.cpp: In function 'int main()':
Main.cpp:57:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
57 | for (int i = 0; i < dl.size(); i++)
| ~~^~~~~~~~~~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |