首页 > 代码库 > hoj12839
hoj12839
题目链接:http://acm.hnu.cn/online/?action=problem&type=show&id=12839&courseid=269
水题 debug半天 每一次只考虑当前的数字及前面的那个数字。
代码:
#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#define INF 1000000100#define MAX 1000000200using namespace std;char a[15];int b[1005];int main(){ int N; while(scanf("%d", &N), N) { int num = 0; int judge = 0; //1 唯一存在 2 不存在 3 很多种 int l = -INF, r = INF; b[0] = 0; for(int i = 1; i <= N; i++) { //把对应的字符串转化成数字 int s; scanf("%s", a); if(a[0] == ‘x‘) b[i] = INF; else { s = 0; int j; if(a[0] == ‘-‘) j = 1; else j = 0; for(j = j; a[j]; j++) { s *= 10; s += a[j] - ‘0‘; } if(a[0] == ‘-‘) b[i] = -s; else b[i] = s; } } b[0] = MAX; for(int i = 1; i <= N && judge != 2; i++) { if(b[i] == INF && b[i-1] == INF) judge = 2; else if(b[i] == INF && b[i-1] != INF) { if(i%2) r = min(r, b[i-1]-1); //当前是奇数位 x比前面一个数小 那么x的上限应该为l与前面一个数中较小的 else l = max(l, b[i-1]+1); //当前是偶数位 x比前面的一个数大 那么x的下限应该是x和前面一个数较大的 } else if(b[i] != INF && b[i-1] == INF) { if(i%2) l = max(l, b[i]+1); else r = min(r, b[i]-1); } else { if(i%2 && b[i] >= b[i-1] || !(i%2) && b[i] <= b[i-1]) judge = 2; } } if(judge == 2 || l > r) printf("none\n"); else if(l == r) printf("%d\n", l); else if(l < r) printf("ambiguous\n"); } return 0;}
hoj12839
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。