QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#128427 | #6739. Teleport | Nicolas125841 | WA | 1ms | 3500kb | C++17 | 2.9kb | 2023-07-20 23:46:20 | 2023-07-20 23:46:22 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
typedef pair<int, int> pii;
const int inf = 1e9;
int dr[4] = {0, 0, 1, -1};
int dc[4] = {-1, 1, 0, 0};
int main(){
cin.tie(NULL)->sync_with_stdio(false);
int n, k;
cin >> n >> k;
vector<string> grid(n);
for(int i = 0; i < n; i++)
cin >> grid[i];
for(int i = 0; i < n; i++)
for(int j = i; j < n; j++)
swap(grid[i][j], grid[j][i]);
vector<vector<int>> paths(n, vector<int>());
vector<vector<pii>> path(n, vector<pii>(n)), rpath(n, vector<pii>());
for(int i = 0; i < n; i++){
int r = i;
int c = 0;
int ind = 0;
while(r < n && c < n){
path[r][c] = {i, ind};
rpath[i].push_back({r, c});
paths[i].push_back(ind++);
r++;
swap(r, c);
}
}
vector<vector<int>> d(n, vector<int>(n, inf));
queue<pii> q;
d[0][0] = 0;
q.emplace(0, 0);
//paths[0].erase(lower_bound(paths[0].begin(), paths[0].end(), path[0].second));
while(!q.empty()){
auto [col, row] = q.front();
if(row == n-1 && col == n-1){
cout << d[col][row] << "\n";
return 0;
}
q.pop();
for(int i = 0; i < 4; i++){
int nrow = row + dr[i];
int ncol = col + dc[i];
if(nrow >= 0 && nrow < n && ncol >= 0 && ncol < n && grid[nrow][ncol] == '.' && d[nrow][ncol] == inf){
d[nrow][ncol] = d[row][col] + 1;
q.emplace(nrow, ncol);
//vector<int> &path_ref = paths[path[compact(nrow, ncol, n)].first];
//path_ref.erase(lower_bound(path_ref.begin(), path_ref.end(), path[compact(nrow, ncol, n)].second));
}
}
int cnt = 0;
int nrow = row;
int ncol = col;
while(cnt <= k){
if(nrow < n && ncol < n){
if(d[nrow][ncol] == inf && grid[nrow][ncol] == '.'){
d[nrow][ncol] = d[row][col] + 1;
q.emplace(nrow, ncol);
}
}
nrow++;
cnt++;
swap(nrow, ncol);
}
/*vector<int> &path_ref = paths[path[loc].first];
auto start_ind = lower_bound(path_ref.begin(), path_ref.end(), path[loc].second);
auto current_ind = start_ind;
while(current_ind != path_ref.end() && *current_ind - path[loc].second <= k){
int jmploc = rpath[path[loc].first][*current_ind];
if(grid[get_r(jmploc, n)][get_c(jmploc, n)] == '.' && d[jmploc] == inf){
d[jmploc] = d[loc] + 1;
q.push(jmploc);
}
current_ind++;
}
if(start_ind != path_ref.end())
path_ref.erase(start_ind, current_ind);*/
}
cout << "-1\n";
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 0
Wrong Answer
time: 1ms
memory: 3500kb
input:
3 2 .*. .*. ...
output:
1000000003
result:
wrong answer 1st numbers differ - expected: '3', found: '1000000003'