📄 00130004.txt
字号:
Welcome To Administrator's Page of Judge Online of ACM ICPC, Peking University
--------------------------------------------------------------------------------
Source
Problem Id:1048 User Id:00130004
Memory:76K Time:10MS
Language:C Result:Accepted
Source
#include<stdio.h>
#include<stdlib.h>
int state[100][100],value[26],row,column,done;
char logic[100][100];
void hdsearch(int x,int y)
{
int dir,ish;
void process(int x,int y);
if(done)return;
dir=-1;ish=1;
while(!done)
{
if(logic[x][y]>='A'&&logic[x][y]<='Z')
process(x,y);
else switch(logic[x][y])
{
case '-':
case 'o':
case ':':
case '\\':
case '/':
y=y+dir;
break;
case '|':
x+=dir;
break;
case ')':
case '>':
if(state[x-1][y-1]==-1)
{x--;y--;}
else if(state[x+1][y-1]==-1)
{x++;y--;}
else
{
if(logic[x][y]==')')
state[x][y]=state[x-1][y]&state[x+1][y];
else
state[x][y]=state[x-1][y]|state[x+1][y];
process(x,y);
}
break;
case '+':
if(ish)
{
if(x<row-1&&logic[x+1][y]=='|')
dir=1;
else
dir=-1;
ish=0;
x+=dir;
}
else
{
if(y<column-1&&logic[x][y+1]=='-')
dir=1;
else
dir=-1;
ish=1;
y+=dir;
}
break;
}
}
return;
}
void process(int x,int y)
{
int dir,ish;
void hdsearch(int x,int y);
if(done)return;
if(logic[x][y]>='A'&&logic[x][y]<='Z')
{
state[x][y]=value[logic[x][y]-'A'];
if(y<column-1&&logic[x][y+1]=='-')
{
ish=1;
dir=1;
y++;
state[x][y]=state[x][y-1];
}
else if(y>0&&logic[x][y-1]=='-')
{
ish=1;
dir=-1;
y--;
state[x][y]=state[x][y+1];
}
else if(x<row-1&&logic[x+1][y]=='|')
{
ish=0;
dir=1;
x++;
state[x][y]=state[x-1][y];
}
else if(x>0&&logic[x-1][y]=='|')
{
ish=0;
dir=-1;
x--;
state[x][y]=state[x+1][y];
}
}
else
{
ish=1;
dir=1;
}
while(!done)
{
switch(logic[x][y])
{
case '-':
case ':':
case ')':
case '>':
y+=dir;
state[x][y]=state[x][y-dir];
break;
case 'o':
y+=dir;
state[x][y]=state[x][y-dir]^1;
break;
case '|':
x+=dir;
state[x][y]=state[x-dir][y];
break;
case '\\':
if(state[x+2][y]==-1)
hdsearch(x+2,y);
else
{
x++;
y++;
if(logic[x][y]==')')
state[x][y]=state[x-1][y-1]&state[x+1][y-1];
else
state[x][y]=state[x-1][y-1]|state[x+1][y-1];
}
break;
case '/':
if(state[x-2][y]==-1)
hdsearch(x-2,y);
else
{
x--;
y++;
if(logic[x][y]==')')
state[x][y]=state[x-1][y-1]&state[x+1][y-1];
else
state[x][y]=state[x-1][y-1]|state[x+1][y-1];
}
break;
case '+':
if(ish)
{
if(x<row-1&&logic[x+1][y]=='|')
dir=1;
else
dir=-1;
ish=0;
x+=dir;
state[x][y]=state[x-dir][y];
}
else
{
if(y<column-1&&logic[x][y+1]=='-')
dir=1;
else
dir=-1;
ish=1;
y+=dir;
state[x][y]=state[x][y-dir];
}
break;
case '?':
printf("%d\n",state[x][y]);
done=1;
break;
}
}
return;
}
main()
{
int i,j,flag;
char c;
while(scanf("%c",&c)==1)
{
column=0;
for(i=0;(i>0?(c=getchar()):1)&&c!='*';i++)
{
if(c=='\n'){i--;continue;}
logic[i][0]=c;
for(j=1;(c=getchar())!='\n';j++)
{
logic[i][j]=c;
}
if(j>column)
column=j;
for(;j<100;j++)
logic[i][j]=' ';
}
c=getchar();
while(c=='\n')c=getchar();
row=i;
while(c!='*')
{
if(c=='\n')continue;
value[0]=c-'0';
for(i=1;i<26;i++)
{
value[i]=getchar();
value[i]-='0';
}
c=getchar();
for(i=0;i<row;i++)
for(j=0;j<column;j++)
state[i][j]=-1;
flag=0;
for(j=0;j<column&&!flag;j++)
for(i=0;i<row;i++)
if(logic[i][j]>='A'&&logic[i][j]<='Z')
{flag=1;break;}
done=0;
process(i,j-1);
c=getchar();
}
printf("\n");
c=getchar();
}
exit(0);
}
Admin's Home Page
--------------------------------------------------------------------------------
All Copyright Reserved 2003
Any problem, Please Contact Administrator
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -