觉得自己写得很工整,所以要贴(゚3゚)~♪
AC代码:
#include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #define MAX (1e9 + 10) #define MIN -1234567890 using namespace std; int num[1004]; int maxcmp(int a, int b) { return a > b ? a : b; } int mincmp(int a, int b) { return a < b ? a : b; } int main() { int n; //freopen("A.in", "r", stdin); while (~scanf("%d", &n) && n) { getchar(); char tmp[16]; for (int i = 1; i <= n; i++) { scanf("%s", tmp); if (tmp[0] == 'x') num[i] = MAX; else sscanf(tmp, "%d", &num[i]); } bool flag = false; int down = MIN; int up = MAX; for (int i = 1; i <= n; i++) { if (num[i] == MAX) { if (i % 2 == 0) { if (i - 1 >= 1) down = maxcmp(down, num[i-1]); if (i + 1 <= n) down = maxcmp(down, num[i+1]); } else { if (i - 1 >= 1) up = mincmp(up, num[i-1]); if (i + 1 < n) up = mincmp(up, num[i+1]); } } else { if (i % 2 == 0) { if (i - 1 >= 1 && num[i] <= num[i-1] && num[i-1] != MAX) flag = true; if (i + 1 < n && num[i] <= num[i+1] && num[i+1] != MAX) flag = true; } else { if (i - 1 >= 1 && num[i] >= num[i-1] && num[i-1] != MAX) flag = true; if (i + 1 < n && num[i] >= num[i+1] && num[i+1] != MAX) flag = true; } } } if (flag) printf("none\n"); else if (up - down == 2) printf("%d\n", up-1); else if (up > down + 2) printf("ambiguous\n"); else printf("none\n"); } return 0; }