[工程师死绝的世界C3002]機械の総合病院 翻译及题解

[工程师死绝的世界C3002]機械の総合病院 翻译及题解

机械综合医院

Translation by KSkun

原题:問題「機械の総合病院」 | エンジニアが死滅シタ世界 〜アンドロイドとふたりぼっちで生きろ〜

问题描述

你在分析PAIZA医院的系统。
为了避免被非法入侵,医院系统的用户密码应该达到一定的强度。
PAIZA医院的系统要求用户密码满足以下的强度要求:

  • 长度不低于6
  • 必须包含英文字母和数字
  • 同一字符不得连续出现3次或以上

密码中,不区分英文字符的大小写。
如果密码满足以上强度要求,输出Valid,否则输出Invalid

例如,样例1中的密码7Caaad9满足条件1和2,但是不满足条件3,因为aaa这里连续出现了3个a字符。

输入格式

t
  • 给出表示密码的字符串t。
  • 在输入的最后,包含一个换行符。

输出格式

如果密码满足以上强度要求,输出Valid,否则输出Invalid

条件

  • 1 ≦ t的长度 ≦ 30
  • 字符串t只包含半角英文字符及半角数字

输入输出样例

输入输出样例1

输入:

7Caaad9

输出:

Invalid

输入输出样例2

输入:

DjZGrduN8Mj4

输出:

Valid

题解

// Code by KSkun, 2019/1
#include <cstdio>
#include <cctype>
#include <cstring>

#include <algorithm>

typedef long long LL;

inline char fgc() {
    static char buf[100000], *p1 = buf, *p2 = buf;
    return p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 100000, stdin), p1 == p2)
        ? EOF : *p1++;
}

inline LL readint() {
    LL res = 0, neg = 1; char c = fgc();
    for(; !isdigit(c); c = fgc()) if(c == '-') neg = -1;
    for(; isdigit(c); c = fgc()) res = res * 10 + c - '0';
    return res * neg;
}

inline char readsingle() {
    char c;
    while(!isgraph(c = fgc())) {}
    return c;
}

char t[35];
bool hasalpha = false, hasdigit = false;

int main() {
    scanf("%s", t + 1);
    int n = strlen(t + 1);
    if(n < 6) {
        puts("Invalid"); return 0;
    }
    int cnt = 0;
    for(int i = 1; i <= n; i++) {
        if(isupper(t[i])) t[i] = tolower(t[i]);
        if(isalpha(t[i])) hasalpha = true;
        if(isdigit(t[i])) hasdigit = true;
        if(t[i] != t[i - 1]) cnt = 1;
        else cnt++;
        if(cnt >= 3) {
            puts("Invalid"); return 0;
        }
    }
    if(!hasalpha || !hasdigit) {
        puts("Invalid"); return 0;
    }
    puts("Valid");
    return 0;
}


发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据