这题是2017北大营的一道题,其实简单模拟即可,但是细节比较多,还是挺可做的
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int a[70005];bool sig=0;
char ch;
long long read()
{
ch=getchar();long long f=0,flag=1;bool ac=0;
while((ch<'0'||ch>'9')&&(ch!='-'))
{
if(ch==EOF)
return -98765;
if(ch=='<')
sig=0;
else if(ch=='>')
sig=1;
ch=getchar();
}
while((ch>='0'&&ch<='9')||(ch=='-'))
{
if(ch=='-')
flag=-1;
else
{
f*=10;
f+=ch-'0';
ac=1;
}
ch=getchar();
}
if(ac==1)
return f*flag;
return -98765;
}
int main()
{
//freopen("input.txt","r",stdin);
long long x,y;char c;bool ac=1,ak=1;
while((x=read())!=-98765)
{
c=getchar();
if(c=='&')
{
y=read();bool check=1;
if((x<-32768&&y<-32768)||(x>32767&&y>32767))
check=0;
if(check)
{
if(x<-32768)
x=-32768;
if(y>=32767)
y=32767;
for(int i=x;i<=y;i++)
{
a[i+32768]=1;
}
}
if(ch==EOF)
break;
}
else//这里被行末空格坑了好长时间
{
if(!sig)
{
for(int i=-32768;i<=x;i++)
{
a[i+32768]=1;
}
}
else if(sig)
{
for(int i=x;i<=32767;i++)
{
a[i+32768]=1;
}
}
}
if(c==EOF)
break;
}
for(int i=0;i<=65535;i++)
{
if(a[i]==1)
ac=0;
if(a[i]==0)
ak=0;
}
if(ac==1)
printf("false");
else if(ak==1)
printf("true");
else
{
bool left=1,right=1,liflag=1;int ln=233333,rn=233333;
if(a[0]==0)
left=0;
if(a[65535]==0)
right=0;
for(int i=0;i<=65535;i++)
{
if(a[i]==1)
{
if(ln==233333)
ln=i-32768;
}
else if(a[i]==0)
{
if(rn==233333)
{
rn=i-32768-1;
}
if(ln==233333)
{
rn=233333;
continue;
}
if(liflag==1)
{
liflag=0;
if(left==1)
printf("x <= %d",rn);
else
printf("x >= %d && x <= %d",ln,rn);
}
else
{
printf(" ||\nx >= %d && x <= %d",ln,rn);
}
ln=233333;rn=233333;
}
}
if(right==1)
{
if(liflag)
printf("x >= %d",ln);
else printf(" ||\nx >= %d",ln);
}
}
return 0;
}