现在的位置: 首页 > 综合 > 正文

HOJ 12812 Broken Audio Signal

2019年02月12日 ⁄ 综合 ⁄ 共 1020字 ⁄ 字号 评论关闭

觉得自己写得很工整,所以要贴(゚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;
}

抱歉!评论已关闭.