| Task: | Jelly Raid |
| Sender: | Game of Nolife |
| Submission time: | 2015-11-25 19:25:41 +0200 |
| Language: | C++ |
| Status: | READY |
| Result: | ACCEPTED |
| test | verdict | time | |
|---|---|---|---|
| #1 | ACCEPTED | 0.06 s | details |
| #2 | ACCEPTED | 0.05 s | details |
| #3 | ACCEPTED | 0.06 s | details |
| #4 | ACCEPTED | 0.06 s | details |
| #5 | ACCEPTED | 0.04 s | details |
| #6 | ACCEPTED | 0.06 s | details |
| #7 | ACCEPTED | 0.06 s | details |
Code
#include <bits/stdc++.h>
#define F first
#define S second
using namespace std;
typedef long long ll;
typedef long double ld;
const int gmod=120;
char no[gmod+10][66][66];
string ma[66];
int get1(string s){
if (s.size()==2){
return s[1]-'0';
}
else{
return (s[1]-'0')*10+(s[2]-'0');
}
}
int get2(string s){
if (s.size()==2){
return s[0]-'0';
}
else{
return (s[0]-'0')*10+(s[1]-'0');
}
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
int n,m;
cin>>n>>m;
string lol;
cin>>lol;
int y1=get1(lol);
cin>>lol;
int x1=get2(lol);
cin>>lol;
int y2=get1(lol);
cin>>lol;
int x2=get2(lol);
x1--;
y1--;
x2--;
y2--;
for (int i=0;i<n;i++){
cin>>ma[i];
}
int p;
cin>>p;
for (int i=0;i<p;i++){
int pp;
cin>>pp;
vector<pair<int, int> > asd(pp);
for (int j=0;j<pp;j++){
string lol1,lol2;
cin>>lol1>>lol2;
asd[j]={get1(lol1)-1, get2(lol2)-1};
}
int mod=pp+pp-2;
for (int j=0;j<gmod;j++){
pair<int, int> tp;
if (mod==0){
tp=asd[0];
}
else{
if (j%mod>=pp){
tp=asd[pp+pp-2-(j%mod)];
}
else{
tp=asd[j%mod];
}
}
//cout<<j<<" "<<tp.F<<" "<<tp.S<<endl;
for (int y=tp.F;;y++){
if (y>=n||ma[y][tp.S]=='#') break;
no[j][y][tp.S]=1;
}
for (int y=tp.F;;y--){
if (y<0||ma[y][tp.S]=='#') break;
no[j][y][tp.S]=1;
}
for (int x=tp.S;;x++){
if (x>=m||ma[tp.F][x]=='#') break;
no[j][tp.F][x]=1;
}
for (int x=tp.S;;x--){
if (x<0||ma[tp.F][x]=='#') break;
no[j][tp.F][x]=1;
}
}
}
if (x1==x2&&y1==y2){
cout<<0<<endl;
return 0;
}
if (no[0][y1][x1]) {
cout<<"IMPOSSIBLE"<<endl;
return 0;
}
queue<pair<int, pair<int, int> > > bfs;
bfs.push({0, {y1, x1}});
no[0][y1][x1]=1;
while (!bfs.empty()){
auto t=bfs.front();
bfs.pop();
//cout<<t.F<<" "<<t.S.F<<" "<<t.S.S<<endl;
for (int y=-1;y<=1;y++){
for (int x=-1;x<=1;x++){
if ((y==0)||(x==0)){
if (t.S.F+y>=0&&t.S.F+y<n&&t.S.S+x>=0&&t.S.S+x<m){
if (ma[t.S.F+y][t.S.S+x]=='.'){
if (t.S.F+y==y2&&t.S.S+x==x2){
cout<<t.F+1<<endl;
return 0;
}
if (!no[(t.F+1)%gmod][t.S.F+y][t.S.S+x]){
no[(t.F+1)%gmod][t.S.F+y][t.S.S+x]=1;
bfs.push({t.F+1, {t.S.F+y, t.S.S+x}});
}
}
}
}
}
}
}
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: ACCEPTED
| input |
|---|
| 20 60 (10 1) (10 60) ...#...#...#...#...#............. |
| correct output |
|---|
| 70 |
| user output |
|---|
| 70 |
Test 6
Verdict: ACCEPTED
| input |
|---|
| 60 60 (1 1) (57 59) ...#...#...#...#...#...#...#..... |
| correct output |
|---|
| 27483 |
| user output |
|---|
| 27483 |
Test 7
Verdict: ACCEPTED
| input |
|---|
| 60 60 (2 2) (58 40) ................................. |
| correct output |
|---|
| 132 |
| user output |
|---|
| 132 |
