本人问下,这里面的数据是没有CCF考试时候给的4组数据吗,我这里有一份非AC代码,提交上来却AC了
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<sstream>
#include<map>
//I AK IOI !!!!!
//Accepted 100pts
using namespace std;
class fastio{
public:
inline int readInt(){
int x=0;
char t=getchar();
while(t>='0'&&t<='9')x*=10,x+=t-'0',t=getchar();
return x;
}
inline void readInt(int &num){
int x=0;
char t=getchar();
while(t>='0'&&t<='9')x*=10,x+=t-'0',t=getchar();
num=x;
}
inline long long int readLong(){
long long int x=0;
char t=getchar();
while(t>='0'&&t<='9')x*=10,x+=t-'0';
return x;
}
inline void readLong(long long int &num){
long long int x=0;
char t=getchar();
while(t>='0'&&t<='9')x*=10,x+=t-'0',t=getchar();
num=x;
}
inline string readString(){
string str="";
char t=getchar();
while(t!=' '&&t!='\n')str+=t,t=getchar();
return str;
}
inline void readString(string & s){
string str="";
char t=getchar();
while(t!=' '&&t!='\n')str+=t,t=getchar();
s=str;
}
inline void print(stringstream &t){
string str=t.str();
for(int i=0;i<str.length();i++){
putchar(str[i]);
}
}
inline void print(string &t){
for(int i=0;i<t.length();i++){
putchar(t[i]);
}
}
inline void changeline(){
putchar('\n');
}
private:
};
class server{
public:
server(){
}
server(int id){
this->id=id;
}
int id;
private:
};
map<string,server> servers;
fastio io;
string CLIENT="Client";
string SERVER="Server";
string OK="OK";
string FAIL="FAIL";
string ERR="ERR";
bool is_valid(string ad){
int i=0;
int cnt=0;
string temp=ad;
while(temp.find(':')!=string::npos)cnt++,temp.erase(temp.find(':'),1);
if(cnt!=1)return 0;
temp=ad;
cnt=0;
int pos=temp.find('.');
while(pos!=string::npos){
cnt++;
temp.erase(pos,1);
pos=temp.find('.');
}
if(cnt!=3)return 0;
//cout << "prepare is valid!" << endl;
while(ad[i-1]!=':'){
int t=0;
int c=0;
bool flg=0;
while(ad[i]!='.'){
if((!flg)&&ad[i]=='0'&&(i+1<ad.length()&&ad[i+1]>='0'&&ad[i+1]<='9'))return 0;
//cout << "该段没有前导0!" << endl;
if(ad[i]==':'){
break;
}
if(ad[i]<'0'||ad[i]>'9')return 0;
//cout << "该段没有非数字!" << endl;
flg=1;
t=t*10+ad[i]-'0';
i++;
c++;
}
if(c==0)return 0;
if(t>255)return 0;
//cout << "段" << t <<"是合法的!" << endl;
i++;
}
//cout << "address is valid!" << endl;
int t=0;
int c=0;
bool flg=0;
while(i<ad.length()){
if((!flg)&&ad[i]=='0'&&(i+1<ad.length()&&ad[i+1]>='0'&&ad[i+1]<='9'))return 0;
//cout << "该端口段没有前导0!" << endl;
if(ad[i]<'0'||ad[i]>'9')return 0;
//cout << "该端口段没有非数字!" << endl;
flg=1;
t=t*10+ad[i]-'0';
i++;
c++;
}
if(c==0)return 0;
if(t>65535)return 0;
return 1;
}
int main(){
//freopen("network.in","r+",stdin);
//freopen("network.out","w+",stdout);
int n;
io.readInt(n);
for(int i=0;i<n;i++){
string str1,str2;
io.readString(str1);
io.readString(str2);
if(str1==CLIENT){
if(is_valid(str2)){
if(servers.count(str2)){
stringstream ss;
ss << servers[str2].id;
io.print(ss);
io.changeline();
}
else{
io.print(FAIL);
io.changeline();
}
}
else{
io.print(ERR);
io.changeline();
}
}
else{
if(is_valid(str2)){
if(servers.count(str2)){
io.print(FAIL);
io.changeline();
}
else{
io.print(OK);
server temp(i+1);
servers[str2]=temp;
io.changeline();
}
}
else{
io.print(ERR);
io.changeline();
}
}
}
return 0;
}
非AC记录:http://s5.z100.vip:8813/record/6174b17c17a9d91844eaebe7