#include #include #include #include #include using namespace std; #define TESTER(b) //(cout<<__LINE__<<"@"< & vs) { ostringstream os; for(int i = 0; i < s.length(); i++){ if(s[i] == '(' || s[i] == ')') os << ' ' << s[i] << ' '; else os << s[i]; } istringstream is(os.str()); string token; while(is >> token) vs.push_back(token); } expr *expr_node(const vector &lex, int &cur); expr *expr_not(const vector &lex, int &cur); expr *expr_and(const vector &lex, int &cur); expr *expr_or(const vector &lex, int &cur); expr *expr_node(const vector &lex, int &cur) { TESTER(cur<<" "<type='1'; } else if ( lex[cur]=="FALSE" ) { cur++; ret=new expr(); ret->type='0'; } else if ( 'A'<=lex[cur][0] && lex[cur][0]<='Z') { ret=new expr(); ret->type=lex[cur][0]; cur++; } TESTER(cur<<" "< &lex, int &cur) { TESTER(cur<<" "<type='!'; ret->arg1=expr_not(lex,cur); } else ret=expr_node(lex,cur); TESTER(cur<<" "< &lex, int &cur) { TESTER(cur<<" "<type='&'; ret->arg1=child; ret->arg2=expr_and(lex, cur); } TESTER(cur<<" "< &lex, int &cur) { TESTER(cur<<" "<type='|'; ret->arg1=child; ret->arg2=expr_or(lex, cur); } TESTER(cur<<" "< lexstr) { int cur=0; return expr_or(lexstr, cur); } bool eval(expr *ex, const vector ®s){ switch(ex->type){ case '|': return eval(ex->arg1,regs) || eval(ex->arg2,regs); case '&': return eval(ex->arg1,regs) && eval(ex->arg2,regs); case '!': return !eval(ex->arg1,regs); case '0': return false; case '1': return true; default: return regs[ex->type-'A'] == 1; } } struct xy{ int x; int y; xy(); xy(int x, int y):x(x),y(y){} }; struct ixy{ string name; xy p; }; bool operator<(const xy &a, const xy &b){ return (a.x==b.x?a.y Field; int main(void) { string s; getline(cin,s); vector vs; lex(s, vs); vs.push_back("."); int i,x,y; string registerName; expr *e = parse(vs); //cout<<"test"<> ws >> size >> forks >> invpts; Field f; for(i = 0 ; i < forks ; i ++){ cin >> x >> y; f[xy(x,y)]='f'; } for(i = 0 ; i < invpts ; i++){ char v; cin >> x >> y>>v; f[xy(x,y)]=v; } vector regs(26); x=0; y=0; int dx=1,dy=0; while ( -size<=x && x<=size && -size<=y && y<=size ){ cout<0){ char t=f[pos]; if ( t=='f' ) { if ( eval(e,regs) ) { int temp=dx; dx=dy; dy=-temp; } else { int temp=dx; dx=-dy; dy=temp; } } else{ regs[t-'A'] = 1-regs[t-'A']; } } } }