链接:http://codeforces.com/problemset/problem/416/A
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
Impossible
直接模拟,附上AC代码:
#include <iostream> #include <cstdio> #include <string> #include <cmath> #include <iomanip> #include <ctime> #include <climits> #include <cstdlib> #include <cstring> #include <algorithm> #include <queue> #include <vector> #include <set> #include <map> //#pragma comment(linker, "/STACK:102400000, 102400000") using namespace std; typedef unsigned int li; typedef long long ll; typedef unsigned long long ull; typedef long double ld; const double pi = acos(-1.0); const double e = exp(1.0); const double eps = 1e-8; int n, x; char sign[5], answer; int main() { ios::sync_with_stdio(false); while (~scanf("%d", &n)) { int maxy = 2000000000; int miny = -2000000000; while (n--) { scanf("%s%d %c", sign, &x, &answer); if (!strcmp(">", sign)) { if (answer == 'Y') miny = max(miny, x+1); else maxy = min(maxy, x); } else if (!strcmp(">=", sign)) { if (answer == 'Y') miny = max(miny, x); else maxy = min(maxy, x-1); } else if (!strcmp("<", sign)) { if (answer == 'Y') maxy = min(maxy, x-1); else miny = max(miny, x); } else { if (answer == 'Y') maxy = min(maxy, x); else miny = max(miny, x+1); } } if (miny > maxy) printf("Impossible\n"); else printf("%d\n", miny); } return 0; }