poj4012

简单题

判断的情况稍微有点复杂,注意判断整行都是“.”的情况

View Code
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;

#define maxn 5005

int 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;
}
posted @ 2012-10-19 22:51  金海峰  阅读(150)  评论(0编辑  收藏  举报