sdut 翻译布尔表达式

来源:互联网 发布:mac matlab 安装路径 编辑:程序博客网 时间:2024/05/18 01:13
大家都学过了布尔表达式的翻译,其中有一个拉链-回填技术,这次我们就练习这个技术。

Input

 多组输入,每组输入为一行字符串,例如: a < b or c < d and e < f
每个符号都用空格间隔

Output

 假链跳到0,真链跳到1,表达式序号从100开始排。

Example Input

1a < b or c < d and e < f

Example Output

100(j<,a,b,1)101(j,_,_,102)102(j<,c,d,104)103(j,_,_,0)104(j<,e,f,100)105(j,_,_,103)

#include<bits/stdc++.h>using namespace std;string s;int t,f;vector<string>ans;int main(){    int n;    scanf("%d\n",&n);    while(n--)    {       getline(cin,s);        t=1,f=0;        s += " end";        string x;        stringstream ss(s);        int id=100;        while(ss>>x)        {            if(x == "or")            {                printf("%d(j%s,%s,%s,%d)\n",id,ans[1].c_str(),ans[0].c_str(),ans[2].c_str(),t);                t=id++;                printf("%d(j,_,_,%d)\n",id,id+1);                id++;                ans.clear();            }            else if(x == "end")            {                printf("%d(j%s,%s,%s,%d)\n",id++,ans[1].c_str(),ans[0].c_str(),ans[2].c_str(),t);                /* t=id++*/;                printf("%d(j,_,_,%d)\n",id++,f);               /* id++;*/                ans.clear();            }            else if(x == "and")            {                printf("%d(j%s,%s,%s,%d)\n",id,ans[1].c_str(),ans[0].c_str(),ans[2].c_str(),id+2);                id++;                printf("%d(j,_,_,%d)\n",id,f);                f=id++;                ans.clear();            }            else ans.push_back(x);        }    }    return 0;}

原创粉丝点击