1、http://codeforces.com/problemset/problem/416/A
2、题目:
A TV show called "Guess a number!" is gathering popularity. The whole Berland, the old and the young, are watching the show.
The rules are simple. The host thinks of an integer y and the participants guess it by asking questions to the host. There are four types of acceptable questions:
On each question the host answers truthfully, "yes" or "no".
Given the sequence of questions and answers, find any integer value of y that meets the criteria of all answers. If there isn't such value, print "Impossible".
The first line of the input contains a single integer n (1 ≤ n ≤ 10000) — the number of questions (and answers). Next n lines each contain one question and one answer to it. The format of each line is like that: "sign x answer", where the sign is:
All values of x are integer and meet the inequation - 109 ≤ x ≤ 109. The answer is an English letter "Y" (for "yes") or "N" (for "no").
Consequtive elements in lines are separated by a single space.
Print any of such integers y, that the answers to all the queries are correct. The printed number y must meet the inequation - 2·109 ≤ y ≤ 2·109. If there are many answers, print any of them. If such value doesn't exist, print word "Impossible" (without the quotes).
4 >= 1 Y < 3 N <= -3 N > 55 N
17
2 > 100 Y < -100 Y
Impossible3、AC代码:
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; #define INF 2*1000000000 int main() { int n,x; char str[5]; char ch; int a; int b; while(scanf("%d",&n)!=EOF) { a=-INF; b=INF; int flaga=0,flagb=0;//0表示开区间 while(n--) { scanf("%s%d",str,&x); getchar(); scanf("%c",&ch); int l=strlen(str); //printf("%s %d %c\n",str,x,ch); if(l==1) { if(str[0]=='>') { if(ch=='Y' && x>=a) { a=x; flaga=0; } else if(ch=='N' && x<b) { b=x; flagb=1; } } else if(str[0]=='<') { if(ch=='Y' && x<=b) { b=x; flagb=0; } else if(ch=='N' && x>a) { a=x; flaga=1; } } } else if(l==2) { if(str[0]=='>') { if(ch=='Y' && x>a) { //printf("a=%d\n",a); a=x; flaga=1; } else if(ch=='N' && x<=b) { b=x; flagb=0; } } else if(str[0]=='<') { if(ch=='Y' && x<b) { b=x; flagb=1; } else if(ch=='N' && x>=a) { a=x; flaga=0; } } } } if(flaga==1 && flagb==1 && b>=a) printf("%d\n",a); else if(flaga==1 && flagb==0 && b>a) { printf("%d\n",a); } else if(flaga==0 && flagb==1 && a<b) { printf("%d\n",b); } else if(flaga==0 && flagb==0) { if(a!=-INF && b>=a+2) { printf("%d\n",a+1); } else if(b!=INF && b>=a+2) { printf("%d\n",b-1); } else printf("Impossible\n"); } else { printf("Impossible\n"); } } return 0; } /* 1 < 1000000000 Y */ /* 4 >= 1 Y < 3 N <= -3 N > 55 N 2 > 100 Y < -100 Y 1 >= 3 Y 1 >= 3 N 1 > 3 N 1 > 3 Y 1 < 3 Y 1 < 3 N 1 <= 3 N 1 <= 3 Y */