ChangKe's Blog

第八届“玲(ha)珑(wei)杯”某校赛切题报告

标题太长了。。。“玲珑杯郑州轻工业学院第八届ACM程序设计大赛暨河南高校邀请赛-正式赛”。。。
进度:1/10

A. 蛤玮学计网

第一题就这么麻烦真是不爽。。。
首先,这个字串里不能出现除数字和'.'外的字符,否则直接不合法;
其次,'.'必须恰好出现3个,否则不合法;
再其次,'.'不能在边界,也不能相邻,否则不合法;
最后就是判断数字的大小了,超过255就不合法。
经过这么多关卡,剩下的都合法。感觉这种题一个人想很容易漏掉一些情况,但三个人一起看会好很多。当然现场AC此题的Satoshi、miku、KZ也是相当厉害的(好像不是1A?)

#include <cstdio>
#include <cctype>
#include <cstring>
char str[100];
int T;
int main()
{
    scanf("%d", &T);
    while (T--)
    {
        scanf("%s", str);
        int len = strlen(str);
        int cnt = 0, i;
        for (i = 0; i < len; i++)
        {
            if (!isdigit(str[i]) && str[i] != '.')
                break;
            if (str[i] == '.')
            {
                if (i && str[i - 1] == '.')
                    break;
                cnt++;
                if (cnt > 3)
                    break;
                if (i == 0 || i == len - 1)
                    break;
            }
        }
        if (i != len || cnt != 3)
        {
            puts("No");
            continue;
        }
        int num = 0;
        for (i = 0; i < len; i++)
        {
            if (isdigit(str[i]))
                num = num * 10 + str[i] - '0';
            if (num > 255)
                break;
            if (str[i] == '.' || i == len - 1)
            {
                if (num > 255)
                    break;
                num = 0;
            }
        }
        if (i != len)
        {
            puts("No");
            continue;
        }
        puts("Yes");
    }
    return 0;
}

J. 蛤玮当上主席

无法直视的题目名称。。。excited
这个idea好古老啊。。。而且,BestCoder Round #80不就有原题?
如果有1,那么无限多个1足够表示了;如果没有1,无论如何也凑不出1,所以就是判断输入有没有1。

#include <cstdio>
int T;
int main()
{
    scanf("%d", &T);
    while (T--)
    {
        int n, i, j = 0;
        scanf("%d", &n);
        for (i = 0; i < n; i++)
        {
            int x;
            scanf("%d", &x);
            if (x == 1)
                j = 1;
        }
        if (j)
            puts("Yes");
        else
            puts("No");
    }
    return 0;
}