Created
October 11, 2018 18:03
-
-
Save msramalho/c927d70e17d21e83e34b9bbd6cbce7cf to your computer and use it in GitHub Desktop.
There is a bug
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <bits/stdc++.h> | |
using namespace std; | |
#define MK make_pair | |
#define PB push_back | |
#define ALL(v) (v).begin() , (v).end() | |
#define two(n) ( 1 << (n) ) | |
#define contain(Set,i) ( (Set) & two(i) ) | |
#define FOR(i,n) for (int i = 0; i < (n); i++) | |
#define REP(i, b, e) for (typeof(e) i=b; i!=e; ++i) | |
#define COST first | |
#define V1 second.first | |
#define V2 second.second | |
typedef vector<int> VI; | |
typedef vector<VI> VVI; | |
typedef pair<int,int> PII; | |
const int& INF = numeric_limits<int>::max(); | |
#define NONE 0 | |
#define NOT 1 | |
#define OR 2 | |
#define AND 3 | |
struct op { | |
int val=0, name=0;//name: 0, 1 is not, 2 is or, 3 is and | |
op *opl, *opr; | |
op(){} | |
op(int v){val=v;} | |
op(op *opll){opl=opll;name=NOT;} | |
op(op *opll, op *oprr, int nname){opl=opll;opr=oprr;name=nname;} | |
bool exec(string &bin){ | |
cout<<"operation="<<name<<" val="<<val<<"-"<<opl<<endl; | |
if (name==NONE) return bool(char(bin[val])-'0'); | |
if (name==NOT) return not opl->exec(bin); | |
if (name==OR) return opl->exec(bin) or opr->exec(bin); | |
if (name==AND) return opl->exec(bin) and opr->exec(bin); | |
return false; | |
} | |
}; | |
int main() { | |
freopen("b.txt", "r", stdin); | |
int N;cin>>N; | |
//string tmp = "01";cout<<bool(tmp[0])<<"-"<<bool(tmp[1])<<endl; | |
vector <op> rules(N); | |
FOR(i,N){ | |
int f;cin>>f; | |
cout<<f<<"pars"<<endl; | |
stack <op> s; | |
op t,tt; // temp | |
FOR(j, f){ | |
string c;cin>>c; | |
cout<<c<<" "; | |
if (c == "-"){ | |
t = s.top();s.pop(); | |
s.push(op(&t));//insert a not of the previous op | |
}else if(c=="+"){ | |
t = s.top();s.pop(); | |
tt = s.top();s.pop(); | |
s.push(op(&t,&tt, OR)); | |
}else if(c=="*"){ | |
t = s.top();s.pop(); | |
tt = s.top();s.pop(); | |
s.push(op(&t,&tt, AND)); | |
}else{//this is a number | |
s.push(op(stoi(c))); | |
} | |
cout<<"("<<s.size()<<")"; | |
} | |
cout<<endl; | |
rules[i] = s.top(); | |
string bin = "00000"; | |
cout<<"res: " << s.top().exec(bin)<<endl; | |
} | |
return 0; | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment