简单题
判断的情况稍微有点复杂,注意判断整行都是“.”的情况
View Code
#include#include #include #include #include using namespace std;#define maxn 5005int n, m, s, k;char st[maxn];int cal(int a){ if (a < 0) return 0; return a;}int main(){ scanf("%d%d%d%d", &m, &n, &s, &k); scanf("%s", st); int pos = find(st, st + n, '*') - st; if (pos == n) { if (k < s + 1 && m - k < s) { printf("Impossible\n"); return 0; } if (n > s || cal(k - s) + cal(m - k - s + 1) > 1) { printf("Ambiguous\n"); return 0; } printf("Unique\n"); return 0; } if (pos + s > n) { printf("Impossible\n"); return 0; } int pos1 = find(st + pos, st + pos + s, '.') - (st + pos); if (pos1 != s) { printf("Impossible\n"); return 0; } int pos2 = find(st + pos + s, st + n, '*') - st; if (pos2 != n) { printf("Impossible\n"); return 0; } if (k == 1 || k == m || s == 1 || s == m) { printf("Unique\n"); return 0; } printf("Ambiguous\n"); return 0;}