結果

問題 No.1588 Connection
ユーザー 👑Zack Ni👑Zack Ni
提出日時 2021-07-17 13:50:07
言語 C++14
(gcc 12.3.0 + boost 1.83.0)
結果
WA  
実行時間 -
コード長 4,178 bytes
コンパイル時間 2,020 ms
コンパイル使用メモリ 178,400 KB
実行使用メモリ 26,564 KB
平均クエリ数 21.69
最終ジャッジ日時 2024-07-17 13:04:37
合計ジャッジ時間 4,835 ms
ジャッジサーバーID
(参考情報)
judge4 / judge2
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 28 ms
25,520 KB
testcase_01 WA -
testcase_02 AC 25 ms
24,964 KB
testcase_03 AC 25 ms
24,668 KB
testcase_04 AC 25 ms
24,580 KB
testcase_05 AC 25 ms
25,208 KB
testcase_06 AC 24 ms
24,580 KB
testcase_07 AC 25 ms
24,988 KB
testcase_08 AC 26 ms
25,392 KB
testcase_09 WA -
testcase_10 WA -
testcase_11 WA -
testcase_12 WA -
testcase_13 WA -
testcase_14 AC 25 ms
25,476 KB
testcase_15 AC 27 ms
25,516 KB
testcase_16 AC 25 ms
25,380 KB
testcase_17 AC 27 ms
25,604 KB
testcase_18 AC 25 ms
25,380 KB
testcase_19 AC 25 ms
25,152 KB
testcase_20 AC 27 ms
25,476 KB
testcase_21 WA -
testcase_22 WA -
testcase_23 WA -
testcase_24 WA -
testcase_25 AC 27 ms
25,220 KB
testcase_26 AC 28 ms
25,284 KB
testcase_27 AC 26 ms
25,564 KB
testcase_28 AC 26 ms
25,628 KB
testcase_29 WA -
testcase_30 WA -
testcase_31 WA -
権限があれば一括ダウンロードができます

ソースコード

diff #

#pragma GCC optimize ("Ofast")
#include<bits/stdc++.h>
using namespace std;
inline int my_getchar(){
  return getchar();
}
inline void rd(int &x){
  int k;
  int m=0;
  x=0;
  for(;;){
    k = my_getchar();
    if(k=='-'){
      m=1;
      break;
    }
    if('0'<=k&&k<='9'){
      x=k-'0';
      break;
    }
  }
  for(;;){
    k = my_getchar();
    if(k<'0'||k>'9'){
      break;
    }
    x=x*10+k-'0';
  }
  if(m){
    x=-x;
  }
}
inline void rd(char &c){
  int i;
  for(;;){
    i = my_getchar();
    if(i!=' '&&i!='\n'&&i!='\r'&&i!='\t'&&i!=EOF){
      break;
    }
  }
  c = i;
}
inline int rd(char c[]){
  int i;
  int sz = 0;
  for(;;){
    i = my_getchar();
    if(i!=' '&&i!='\n'&&i!='\r'&&i!='\t'&&i!=EOF){
      break;
    }
  }
  c[sz++] = i;
  for(;;){
    i = my_getchar();
    if(i==' '||i=='\n'||i=='\r'||i=='\t'||i==EOF){
      break;
    }
    c[sz++] = i;
  }
  c[sz]='\0';
  return sz;
}
inline void my_putchar(const int k){
  putchar(k);
  if(k=='\n'){
    fflush(stdout);
  }
}
inline void wt_L(char a){
  my_putchar(a);
}
inline void wt_L(int x){
  int s=0;
  int m=0;
  char f[10];
  if(x<0){
    m=1;
    x=-x;
  }
  while(x){
    f[s++]=x%10;
    x/=10;
  }
  if(!s){
    f[s++]=0;
  }
  if(m){
    my_putchar('-');
  }
  while(s--){
    my_putchar(f[s]+'0');
  }
}
inline void wt_L(const char c[]){
  int i=0;
  for(i=0;c[i]!='\0';i++){
    my_putchar(c[i]);
  }
}
int x[1000000];
int y[1000000];
int qsz;
const int dx[] = {1, -1, 0, 0};
const int dy[] = {0, 0, 1, -1};
int path[510][1100];
int N;
int M;
bool within(int a, int b){
  return (0 <= a  &&  a < N) && ( 0  <= b  &&  b < M);
}
char res[100];
int counts = 0;
int ask(int a, int b){
  if(path[a][b] != -1){
    return path[a][b];
  }
  ++counts;
  if(counts > 3000){
    return -1;
  }
  wt_L(a+1);
  wt_L(' ');
  wt_L(b+1);
  wt_L('\n');
  rd(res);
  if(res[0] == 'B'){
    path[a][b] = 0;
  }
  if(res[0] == 'W'){
    path[a][b] = 1;
  }
  return path[a][b];
}
int main(){
  int i;
  memset(path, 0xff, sizeof(path));
  rd(N);
  rd(M);
  x[0] = 0;
  y[0] = 0;
  qsz = 1;
  bool ended = false;
  path[0][0] = 0;
  for(i=(0);i<(qsz);i++){
    int j;
    for(j=(0);j<(4);j++){
      int nx = x[i] + dx[j];
      int ny = y[i] + dy[j];
      if(path[nx][ny] != -1){
        continue;
      }
      if(!within(nx, ny)){
        continue;
      }
      int resx = ask(nx, ny);
      if(resx == -1){
        wt_L("No");
        wt_L('\n');
        exit(0);
      }
      if(resx == 0){
        x[qsz++] = nx;
        y[qsz++] = ny;
        if(nx == N-1 && ny == M-1){
          wt_L("Yes");
          wt_L('\n');
          exit(0);
        }
      }
    }
  }
  wt_L("No");
  wt_L('\n');
  exit(0);
  return 0;
}
// cLay version 20210405-1

// --- original code ---
// //no-unlocked
// //interactive
// int x[1d6], y[1d6], qsz;
// const int dx[] = {1, -1, 0, 0};
// const int dy[] = {0, 0, 1, -1};
// int path[510][1100];
// int N, M;
// 
// bool within(int a, int b){
//     return (0 <= a < N) && ( 0  <= b < M);
// }
// char res[100];
// int counts = 0;
// int ask(int a, int b){
//     if(path[a][b] != -1){
//         return path[a][b];
//     }
//     ++counts;
//     if(counts > 3000){
//         return -1;
//     }
//     wt(a+1, b+1);
//     rd(res);
//     if(res[0] == 'B') path[a][b] = 0;
//     if(res[0] == 'W') path[a][b] = 1;
//     return path[a][b];
// }
// 
// { 
//     memset(path, 0xff, sizeof(path));
//     rd(N, M);
//     x[0] = 0; y[0] = 0; qsz = 1;
//     bool ended = false;
//     path[0][0] = 0;
//     
//     rep(i, qsz){
//         rep(j , 4){
//             int nx = x[i] + dx[j];
//             int ny = y[i] + dy[j];
//             if(path[nx][ny] != -1) continue;
//             if(!within(nx, ny)) continue;
//             int resx = ask(nx, ny);
//             if(resx == -1){
//                 wt("No");
//                 exit(0);
//             }
//             if(resx == 0){
//                 x[qsz++] = nx;
//                 y[qsz++] = ny;
//                 if(nx == N-1 && ny == M-1){
//                     wt("Yes");
//                     exit(0);
//                 }
//             }
//         }
//     }
//     wt("No");exit(0);
// }
0