80分求助 WA on 13,14,19,20,21
查看原帖
80分求助 WA on 13,14,19,20,21
499627
arc_suvr楼主2022/5/7 20:18
#include <bits/stdc++.h>
using namespace std;

int n;
string a, b;

map<string, int> mp;

bool check(string s) {
    char c[150];
    int cnt1 = 0;
    int p[150], q[150], cnt2 = 0;
    for (int i = 0; i <= 5; i++) p[i] = 0, q[i] = 0;
    for (int i = 0; i < s.length(); i++) {
        if (s[i] >= '0' && s[i] <= '9') {
            if (i == 0 && s[i] == '0' && (s[i + 1] >= '0' && s[i + 1] <= '9')) return 0; 
            if (i - 1 >= 0 && (s[i - 1] == '.' || s[i - 1] == ':') && s[i] == '0' && (s[i + 1] >= '0' && s[i + 1] <= '9')) return 0;
            p[cnt1] = p[cnt1] * 10 + s[i] - '0';
        }
        else {
            cnt1++, c[cnt2++] = s[i], q[cnt2] = i;
        }
    }
    if (cnt1 != 4) return 0; 
    for (int i = 0; i <= 4; i++) {
        if (i <= 3) {
            if (p[i] > 255 || p[i] < 0) return 0;
        }
        else {
            if (p[i] > 65535 || p[i] < 0) return 0;
        }
    }
    if (cnt2 != 4) return 0;
    q[0] = -1, q[5] = s.length();
    for (int i = 1; i <= 5; i++) {
        if (q[i] - q[i - 1] == 1) return 0;
    }
    for (int i = 0; i <= 3; i++) {
        if (i <= 2) {
            if (c[i] != '.') return 0;
        }
        else {
            if (c[i] != ':') return 0;
        }
    }
    return 1;
}

int main() {
    cin >> n;    
    for (int i = 1; i <= n; i++) {
        cin >> a >> b;
        if (a == "Server") {
            if (check(b)) {
                if (mp[b]) printf("FAIL\n");
                else {
                    printf("OK\n");
                    mp[b] = i;
                }
            }
            else {
                printf("ERR\n");
            }
        }
        if (a == "Client") {
            if (check(b)) {
                if (mp[b]) printf("%d\n", mp[b]);
                else printf("FAIL\n");
            }
            else {
                printf("ERR\n");
            }
        }
    }
}
2022/5/7 20:18
加载中...