题意:判断给定串可以写成多少种二进制等式且成立的形式。
题解:利用暴力+语法分析解题。
AC代码:
#include<bits/stdc++.h>
using namespace std;
#define Result pair<char*,int>
#define FAIL make_pair((char*)NULL,0)
char srcExpr[32], expr[32], op[8] = {'0', '1', '+', '-', '*', '(', ')', '='};
struct Parser {
Result Q(char* p) {
Result res = E(p);
if(res.first == NULL || *(res.first) != '=') return FAIL;
Result rgt = E(res.first+1);
if(rgt.first == NULL || *(rgt.first) != 0 || rgt.second != res.second) return FAIL;
return rgt;
}
Result E(char *p) {
Result ret = T(p);
if(ret.first == NULL) return FAIL;
while(*(ret.first) == '+' || *(ret.first) == '-')
{
Res