| Task: | Jelly Raid |
| Sender: | wavelets |
| Submission time: | 2015-11-25 20:43:38 +0200 |
| Language: | C++ |
| Status: | READY |
| Result: | WRONG ANSWER |
| test | verdict | time | |
|---|---|---|---|
| #1 | ACCEPTED | 0.06 s | details |
| #2 | ACCEPTED | 0.34 s | details |
| #3 | ACCEPTED | 0.45 s | details |
| #4 | ACCEPTED | 0.43 s | details |
| #5 | WRONG ANSWER | 0.06 s | details |
| #6 | ACCEPTED | 0.46 s | details |
| #7 | RUNTIME ERROR | 0.14 s | details |
Compiler report
input/code.cpp: In lambda function:
input/code.cpp:95:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for (int i = 0; i < masters.size(); ++i)
^
input/code.cpp:99:14: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
if (idx >= m.size())
^
input/code.cpp: In function 'int main()':
input/code.cpp:31:35: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%d %d\n", &rows, &columns);
^
input/code.cpp:34:37: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("(%d %d)\n", &srow, &scolumn);
^
input/code.cpp:35:37: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result...Code
#include <iostream>
#include <vector>
#include <cstdio>
#include <queue>
using namespace std;
struct node
{
int t;
int row;
int column;
bool operator<(const node& o) const
{
return t > o.t;
}
};
int main()
{
const int MAGIC = 120;
std::vector<int> s[60][60];
for (int i = 0; i < 60; ++i)
for (int j = 0; j < 60; ++j)
s[i][j].assign(MAGIC, -1);
int rows, columns;
// cin >> rows >> cols;
scanf("%d %d\n", &rows, &columns);
int srow, scolumn, erow, ecolumn;
scanf("(%d %d)\n", &srow, &scolumn);
scanf("(%d %d)\n", &erow, &ecolumn);
erow--;
ecolumn--;
srow--;
scolumn--;
char map[60][60];
for (int i = 0 ; i < rows; ++i)
{
std::string line;
cin >> line;
for (int j = 0; j < columns; ++j)
{
map[i][j] = line[j];
}
}
int master_count;
scanf("%d\n", &master_count);
vector<vector<pair<int, int>>> masters(master_count);
for (int i = 0; i < master_count; ++i)
{
int steps = 0;
scanf("%d",&steps);
scanf(" ");
masters[i].resize(steps);
for (int j = 0; j < steps; ++j)
{
scanf("(%d %d)", &masters[i][j].first, &masters[i][j].second);
scanf(" ");
masters[i][j].first--;
masters[i][j].second--;
}
scanf("\n");
}
priority_queue<node> q;
q.push({0, srow, scolumn});
while (!q.empty())
{
node n = q.top();
q.pop();
// cout << n.row << ", " << n.column << ", " << n.t << " going to " << erow << ", " << ecolumn << endl;
if (n.row == erow && n.column == ecolumn)
{
cout << n.t << endl;
return 0;
}
s[n.row][n.column][n.t % MAGIC] = n.t;
auto test = [&rows, &columns, &s, &map, &q, &masters](int row, int column, int t)
{
if (row >= 0 && row < rows && column >= 0 && column < columns && s[row][column][t % MAGIC] == -1)
{
for (int i = 0; i < masters.size(); ++i)
{
auto& m = masters[i];
int idx = t % (2*m.size()-2);
if (idx >= m.size())
idx = m.size()-1-(idx-m.size());
auto pos = m[idx];
if (row == pos.first)
{
int mi = min(column, pos.second);
int ma = max(column, pos.second);
bool safe = false;
for (int c = mi; c <= ma; ++c)
{
if (map[row][c] == '#')
{
safe = true;
break;
}
}
if (!safe)
return;
}
if (column == pos.second)
{
int mi = min(row, pos.first);
int ma = max(row, pos.first);
bool safe = false;
for (int r = mi; r <= ma; ++r)
{
if (map[r][column] == '#')
{
safe = true;
break;
}
}
if (!safe)
return;
}
}
if (map[row][column] == '.')
{
s[row][column][t % MAGIC] = t;
q.push({t, row, column});
}
}
};
test(n.row, n.column, n.t+1);
test(n.row+1, n.column, n.t+1);
test(n.row, n.column+1, n.t+1);
test(n.row-1, n.column, n.t+1);
test(n.row, n.column-1, n.t+1);
}
cout << "IMPOSSIBLE" << endl;
}
Test details
Test 1
Verdict: ACCEPTED
| input |
|---|
| 60 3 (1 1) (54 3) ... #.. ... ... |
| correct output |
|---|
| 3242 |
| user output |
|---|
| 3242 |
Test 2
Verdict: ACCEPTED
| input |
|---|
| 60 60 (1 1) (57 59) ................................. |
| correct output |
|---|
| 1683 |
| user output |
|---|
| 1683 |
Test 3
Verdict: ACCEPTED
| input |
|---|
| 60 60 (1 1) (57 59) ...#...#.......#...#...#...#..... |
| correct output |
|---|
| 2643 |
| user output |
|---|
| 2643 |
Test 4
Verdict: ACCEPTED
| input |
|---|
| 60 60 (1 1) (57 59) ...#...#...#...#...#...#...#..... |
| correct output |
|---|
| 47043 |
| user output |
|---|
| 47043 |
Test 5
Verdict: WRONG ANSWER
| input |
|---|
| 20 60 (10 1) (10 60) ...#...#...#...#...#............. |
| correct output |
|---|
| 70 |
| user output |
|---|
| 71 |
Test 6
Verdict: ACCEPTED
| input |
|---|
| 60 60 (1 1) (57 59) ...#...#...#...#...#...#...#..... |
| correct output |
|---|
| 27483 |
| user output |
|---|
| 27483 |
Test 7
Verdict: RUNTIME ERROR
| input |
|---|
| 60 60 (2 2) (58 40) ................................. |
| correct output |
|---|
| 132 |
| user output |
|---|
| (empty) |
