#include<iostream>
#include<cstdio>
#include<map>
using namespace std;
const int N = 1005;
int n;
struct Server
{
    int id;
    string name;
};
Server servers[N];
int serversCnt;
//map<string, int> server;
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 + 1 == addr.size() - 1) return 0; // 192.179.0.1:
            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(void)
{
  //  initInput();
    if(isValid("134.123.3.3:3") == 0)
    {
        cout << "err" << endl;
    }
    else{
        cout << "OK" << endl;
    }
    return 0;
}

0 条评论

目前还没有评论...

信息

ID
651
时间
1000ms
内存
256MiB
难度
7
标签
递交数
137
已通过
27
上传者