注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Boleyn Su's Blog

 
 
 
 
 

日志

 
 

URAL1101[Robot in the Field]  

2011-11-17 20:17:36|  分类: 信息学 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
表达式求值+简单模拟。
继续练习Java。
CODE:
/*
PROGRAM: $PROGRAM
AUTHOR: Su Jiao
DATE: 2011-11-17
DESCRIPTION:
$DESCRIPTION
*/


import
java.io.*;
import
java.util.*;

public class
Ural {
public static
void main(String args[])
{

new
Ural();
}

public
String exp;
public
int N,M,K;
public
int mx[],my[],kx[],ky[],iv[];
public
boolean vars[];
public
final int DIRS=4;
public
int dir,x,y;
public
int dx[],dy[];
public
int getid(char ch)
{

return
(int)(ch-'A');
}

public
boolean calc()
{

Stack
<Boolean> va=new Stack<Boolean>();
Stack
<Character> op=new Stack<Character>();
for
(int i=0;i<exp.length();i++)
{

boolean
opn1,opn2;
switch
(exp.charAt(i))
{

case
'!':
op.push('!');
break
;
case
'&':
while
(!op.empty())
{

if
(op.peek()=='!')
{

opn1=va.pop();
va.push(!opn1);
}

else if
(op.peek()=='&')
{

opn1=va.pop();
opn2=va.pop();
va.push(opn1&&opn2);
}

else break
;
op.pop();
}

op.push('&');
break
;
case
'|':
while
(!op.empty())
{

if
(op.peek()=='!')
{

opn1=va.pop();
va.push(!opn1);
}

else if
(op.peek()=='&')
{

opn1=va.pop();
opn2=va.pop();
va.push(opn1&&opn2);
}

else if
(op.peek()=='|')
{

opn1=va.pop();
opn2=va.pop();
va.push(opn1||opn2);
}

else break
;
op.pop();
}

op.push('|');
break
;
case
'(':
op.push('(');
break
;
case
')':
while
(op.peek()!='(')
{

if
(op.peek()=='!')
{

opn1=va.pop();
va.push(!opn1);
}

else if
(op.peek()=='&')
{

opn1=va.pop();
opn2=va.pop();
va.push(opn1&&opn2);
}

else if
(op.peek()=='|')
{

opn1=va.pop();
opn2=va.pop();
va.push(opn1||opn2);
}

else break
;
op.pop();
}

op.pop();
break
;
case
'0':
va.push(false);
break
;
case
'1':
va.push(true);
break
;
default
:
va.push(vars[getid(exp.charAt(i))]);
break
;
}
}

return
va.pop();
}

public
Ural()
{

Scanner
cin=new Scanner(new BufferedInputStream(System.in));
exp=cin.nextLine();
N=cin.nextInt();
M=cin.nextInt();
K=cin.nextInt();
mx=new int[M];
my=new int[M];
kx=new int[K];
ky=new int[K];
iv=new int[K];
for
(int i=0;i<M;i++)
{

mx[i]=cin.nextInt();
my[i]=cin.nextInt();
}

for
(int i=0;i<K;i++)
{

kx[i]=cin.nextInt();
ky[i]=cin.nextInt();
iv[i]=getid(cin.next().charAt(0));
}

exp=exp.replaceAll("NOT","!");
exp=exp.replaceAll("AND","&");
exp=exp.replaceAll("OR","|");
exp=exp.replaceAll("TRUE","1");
exp=exp.replaceAll("FALSE","0");
exp=exp.replaceAll(" ","");
exp="("+exp+")";
vars=new boolean[26];
Arrays
.fill(vars,false);
dir=0;
x=0;
y=0;
dx=new int[]{1,0,-1,0};
dy=new int[]{0,1,0,-1};
while
(Math.abs(x)<=N&&Math.abs(y)<=N)
{

System
.out.println(x+" "+y);
for
(int i=0;i<M;i++)
if
(mx[i]==x&&my[i]==y)
{

if
(calc())
{

if
(dir==0) dir+=DIRS;
dir--;
}

else

{

dir++;
if
(dir==DIRS) dir-=DIRS;
}
}

for
(int i=0;i<K;i++)
if
(kx[i]==x&&ky[i]==y)
vars[iv[i]]=!vars[iv[i]];
x+=dx[dir];
y+=dy[dir];
}
}
}
  评论这张
 
阅读(844)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018