Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
34067 | raoyueyang | [CSP-J2021]网络连接 | C++ | 通过 | 100 | 5 MS | 332 KB | 1670 | 2021-12-09 13:48:23 |
#include<bits/stdc++.h> using namespace std; int n; map<string,int>maps; bool Check(string s) { int A[5]= {0},B[5]= {0}; //A[]保存各段值,B[]表示是否已有正确值 int dot=0,colon=0,num=0; //dot(.),colon(:),num当前第几段 for(int i=0,j; i<s.size(); i++) { if(s[i]=='.') { if(dot>=3 || colon==1 || i==0 || num>3 || B[num]!=1 ) return 0; dot++; num++; } else if(s[i]==':') { if(dot!=3 || colon==1 || B[num]!=1 || num!=3) return 0; colon++; num++; } else { if(s[i]=='0' && i!=s.size()-1 && isdigit(s[i+1]))//前导0 return 0; for(j=i; isdigit(s[j]) && j<s.size(); j++) { A[num]=(A[num]<<3)+(A[num]<<1)+s[j]-48; //合并成一个数 if(A[num]<0 || A[num]>65535 || (num<4 && A[num]>255)) return 0; if(isdigit(s[j+1])) i++; else break; } B[num]=1; //当前段的值已保存成功 } } return (dot!=3 || colon!=1 || B[4]==0) ? 0 : 1; } int main() { // freopen("network.in","r",stdin); // freopen("network.out","w",stdout); cin>>n; string mac,ad; for(int i=1; i<=n; i++) { cin>>mac>>ad; if(!Check(ad)) cout<<"ERR\n"; else if(mac[0]=='S') { if(maps[ad]) printf("FAIL\n"); else { maps[ad]=i; printf("OK\n"); } } else { if(maps[ad]) printf("%d\n",maps[ad]); else printf("FAIL\n"); } } return 0; }