75pts 求助!谢谢!!!!!!!!!!
查看原帖
75pts 求助!谢谢!!!!!!!!!!
951440
WangChun1024楼主2023/7/28 14:45
#include<bits/stdc++.h>
using namespace std;
const int N = 1005;
int n;
struct Server
{
    int id;
    string name;
};
Server servers[N];
int serversCnt;
bool isValid(string addr)
{
    int n1=0, n2=0;
    for(int i = 0; i < addr.size(); i++)
    {
        if(addr[i] == '.') n1++;
        if(addr[i] == ':') n2++;
    }
    if(n1 != 3 || n2 != 1) return 0;
    if(addr[0] == '0' && addr[1] != '.') return 0;
    for(int i = 0; i < addr.size(); i++)
    {
        if(addr[i] == '.' || addr[i] == ':')
        {
            if(i== addr.size()-1) return 0;
            if( i + 2 < addr.size() && addr[i + 1] == '0' && isdigit(addr[i + 2]) )
            return 0;
        }
    }
    int a, b, c,d, e;
    int res = sscanf(addr.c_str(),"%d.%d.%d.%d:%d", &a,&b, &c, &d, &e);
    if(res != 5) return 0;
    if(a < 0 || a > 255) return 0;
    if(b < 0 || b > 255) return 0;
    if(c < 0 || c > 255) return 0;
    if(d < 0 || d > 255) return 0;
    if(e < 0 || e > 65535) return 0;
    return 1;

}
int isOK(string addr)
{
    if(isValid(addr))
    {
        for(int i = 1; i <= serversCnt; i++)
        {
            if(addr == servers[i].name)
            {
                return 2;
            }
        }
        return 1;
    }
    return 3;
}
void handleServer(string addr,int id)
{
    int res = isOK(addr);
    if(res == 1)
    {
        servers[++serversCnt].id = id;
        servers[serversCnt].name = addr;
        cout << "OK" << endl;
    }
    else if(res == 2)
    {
        cout << "FAIL" << endl;
    }
    else{
        cout << "ERR" << endl;
    }
}
void handleClient(string addr)
{
    if(isValid(addr))
    {
        for(int i = 1; i <= serversCnt; i++)
        {
            if(servers[i].name == addr)
            {
                cout << servers[i].id << endl;
                return;
            }
        }
        cout << "FAIL" << endl;
    }
    else cout << "ERR" << endl;
}
void handle(string op,string addr,int id)
{
    if(op == "Server")
    {
        handleServer(addr,id);
    }
    else
        handleClient(addr);
}
void initInput()
{
    cin >> n;
    for(int i = 1; i <= n; i++)
    {
        string op,addr;
        cin >> op >> addr;
        handle(op,addr,i);
    }
}
int main()
{
    initInput();
    return 0;
}```
2023/7/28 14:45
加载中...