暴力解法求调
查看原帖
暴力解法求调
1497616
UnknownFrisk楼主2024/12/25 20:21
#include<stdio.h>
#include<stdlib.h>
char op[2],message[100];
short num[2];
int i,upper_bound,lower_bound,l,r;
bool arr[65536],*p=arr+32768,flag;
void skip(int t){for(int i=1;i<=t;i++)getchar();}
void count(char op1,short num1,char op2,short num2)
{
	if(op2=='*')
	{
		if(op1=='>')for(i=num1;i<=32767;i++)p[i]=true;//x>=a
		if(op1=='<')for(i=num1;i>=-32768;i--)p[i]=true;//x<=a
	}
	else 
	{
		if(num1>num2){printf("false");exit(0);}
		else for(int i=num1;i<=num2;i++)p[i]=true;//a<=x<=b
	}
	
}
int main()
{
	while(!feof(stdin))
	{
		op[0]=op[1]='*';
		num[0]=num[1]=0;
		scanf("x %c= %hd",&(op[0]),&(num[0]));
		if(!feof(stdin))
		{
			skip(1);
			if(getchar()=='&'){skip(2);scanf("x %c= %hd",&(op[1]),&(num[1]));skip(4);}
			else skip(2);
		}
		count(op[0],num[0],op[1],num[1]);
		//printf("[%c %hd %c %hd]",op[0],num[0],op[1],num[1]);
	}
	for(i=-32768;(p[i])&&(i<=32767);i++);
	if(i==32767){printf("true");return 0;}
	int upper_bound,lower_bound;
	if(p[-32768])for(lower_bound=-32768;p[lower_bound];lower_bound++);printf("x <= %d",lower_bound-1);//存在下限 
	if(p[32767]){for(upper_bound=32767;p[upper_bound];upper_bound--);sprintf(message," ||\nx >= %d\n",upper_bound+1);}//存在上限 
	for(int i=lower_bound;i<=upper_bound;i++)
	{
		if((!flag)&&p[i]){flag=true;l=i;printf(" ||\n");};
		if(flag&&(!p[i])){flag=false;r=i;printf("x >= %d && x <= %d",l,r-1);}
	}
	printf(message);
}
2024/12/25 20:21
加载中...