请教大佬,尝试了很多种写法,wsl下也跑过了,还是RE
查看原帖
请教大佬,尝试了很多种写法,wsl下也跑过了,还是RE
49660
愤鸟先飞楼主2020/7/26 22:55

尝试过判断坐标写成函数和break;形式,尝试过改大flag数组,尝试过判断死循环写在模拟移动操作前、后,也试过用C++11和C++14提交,都是在wsl(ubuntu 18.04)下得到答案但是交上去RE

#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
int wm=1,wc=1,xm,ym,xc,yc,ans=0,tt=1;
bool rr(){
  bool r=true;
  if(xm == xc && ym == yc){
    r=false;
  }
  return r;
}
int main(){
  bool flag[200005],r=true;
  for(int i=0;i<200005;i++) flag[i] = false;
  char f[13][13];
  for(int i=0;i<=11;i++){
    f[0][i] = f[i][0] = f[11][i] = f[i][11] = '*';
  }
  for(int j=1;j<=10;j++){
    for(int i=1;i<=10;i++){
      std::cin>>f[i][j];
      if(f[i][j] == 'F'){
	xm = i;
	ym = j;
      }else if(f[i][j] == 'C'){
	xc = i;
	yc = j;
      }
    }
  }
  while(rr()){
    tt = xm+ym*10+xc*100+yc*1000+wc*10000+wm*40000;
    if(flag[tt]){
      putchar('0');
      putchar('\n');
      return 0;
    }
    switch (wm){
    case 1:
      if(f[xm][ym-1] != '*') ym--;
      else wm++;
      break;
    case -1:
      if(f[xm][ym+1] != '*') ym++;
      else wm--;
      break;
    case 2:
      if(f[xm+1][ym] != '*') xm++;
      else wm=-1;
      break;
    case -2:
      if(f[xm-1][ym] != '*') xm--;
      else wm=1;
      break;
    }
    switch (wc){
    case 1:
      if(f[xc][yc-1] != '*') yc--;
      else wc++;
      break;
    case -1:
      if(f[xc][yc+1] != '*') yc++;
      else wc--;
      break;
    case 2:
      if(f[xc+1][yc] != '*') xc++;
      else wc=-1;
      break;
    case -2:
      if(f[xc-1][yc] != '*') xc--;
      else wc=1;
      break;
    }
    flag[tt] = true;
    ans++;
  }
  printf("%d\n",ans); 
  return 0;
}

2020/7/26 22:55
加载中...