📄 2674309_ac_0ms_252k.c
字号:
#include <stdio.h>
#include <ctype.h>
#include <string.h>
int l;
char cir[101][101];
int visited[101][101][4];
char value[27];
int dir[][2] = {{0,-1},{-1,0},{0,1},{1,0}};
char ch[] = "-|-|";
int mm[] = {2,3,0,1};
int input()
{
int flag;
l = flag = 0;
while (gets(cir[l++]))
{
if (cir[l-1][0]=='*')
{
flag = 1;l--;
break;
}
}
return flag;
}
int work(int i,int j)
{
int k, a, b;
char cha;
cha = cir[i][j];
a = i, b = j;
if(isalpha(cir[i][j])&&cir[i][j]!='o')
return value[cir[i][j]-'A']-'0';
if(cir[i][j]=='>')
return (work(i-1,j-3)||work(i+1,j-3));
if(cir[i][j]==')')
return (work(i-1,j-3)&&work(i+1,j-3));
if(cir[i][j]=='o')
{
if(cir[i][j-1]=='>'||cir[i][j-1]==')')
return !work(i,j-1);
}
for (k = 0; k < 4; k++)
{
if (cir[i+dir[k][0]][j+dir[k][1]]==ch[k]&&!visited[i][j][k])
{
cir[i][j] = ch[k];
visited[i][j][k] = 1;
break;
}
}
while (cir[i][j]==ch[k])
{
i += dir[k][0];
j += dir[k][1];
}
cir[a][b] = cha;
visited[i][j][mm[k]] = 1;
if(cha=='o')
return !work(i,j);
else
return work(i,j);
}
void solve()
{
int i, j;
memset(visited,0,sizeof(visited));
for (i = 0; i < l; i++)
{
for (j = 0; cir[i][j]!='\0'; j++)
if(cir[i][j]=='?')
{
printf("%d\n",work(i,j));
cir[i][j] = '?';
goto wk;
}
}
wk:
scanf("%s",value);
getchar();
if (value[0]!='*')
solve();
}
int main()
{
while (input())
{
scanf("%s",value);
solve();
printf("\n");
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -