咳,没有赶上上午考试,回头光看第一题,结果...
自debug半天,一直找不出问题(本地试的点都没问题,不过可能是我手搓的点水吧)。应该不是循环出不去的问题。
代码如下(思路代码里):
// qwq
//debug老半天了都
/*
思路:
1.记录最大左端点与最小右端点(maxl,minr)
2.记录左右端点虚实(l,r)
3.分情况讨论输出
*/
#include<bits/stdc++.h>
using namespace std;
const int maxn=6e4,maxt=1e6;
int n,maxl=-1000005,l,r,minr=1000005;
char x;
inline void read()
{
int t=0,x=0,f=1; //t表示比较符号:1 < 2 <= 3 > 4 >=
char ch=getchar();
while(ch!='<'&&ch!='>') ch=getchar();
if(ch=='<') t=1,ch=getchar();
if(ch=='>') t=3,ch=getchar();
if(ch=='=') ++t,ch=getchar();
if(ch=='-') f=-1,ch=getchar();
while(ch<='9'&&ch>='0') x=(x<<3)+(x<<1)+(ch^48),ch=getchar();
x*=f;
if(t==1) {minr=min(minr,x);if(minr==x) r=1;} //r==1:表示解集右端点是空心
if(t==2) {if(x<minr) minr=x,r=2;} //r==2:表示解集右端点是实心
if(t==3) {maxl=max(maxl,x);if(maxl==x) l=1;}//与r同理
if(t==4) {if(x>maxl) maxl=x,l=2;}
}
int main()
{
std::ios::sync_with_stdio(0);
cin>>n>>x;
for(int i=1;i<=n;++i)
read();
if(l==0)//表示左端点没有更新,即是答案形如x<a或x<=a情况(a为一常数)
{
if(r==1) {cout<<x<<"<"<<minr;return 0;}//x<a
else {cout<<x<<"<="<<minr;return 0;}//x<=a
}
if(r==0)//同上处理
{
if(l==1) {cout<<x<<">"<<maxl;return 0;}
else {cout<<x<<">="<<maxl;return 0;}
}//处理输出形如样例2的答案
if(l==2&&r==2)//两端点均为实心
if(maxl<=minr) {cout<<maxl<<"<="<<x<<"<="<<minr;return 0;}
if(l==2&&r==1)//左实右空
if(maxl<minr) {cout<<maxl<<"<="<<x<<"<"<<minr;return 0;}
if(l==1&&r==2)//左空右实
if(maxl<minr) {cout<<maxl<<"<"<<x<<"<="<<minr;return 0;}
if(l==1&&r==1)//两端点均为空心
if(maxl<minr) {cout<<maxl<<"<"<<x<<"<"<<minr;return 0;}
//处理形如样例1的情况
cout<<"No Answer!";//处理形如样例3的情况
return 0;
}
违规自删。