警示后人
查看原帖
警示后人
750689
CNzzc楼主2024/9/26 20:33

hack点:

.在:后面

开头或结尾是.或:

给出我的代码(只是通过了官方数据,不一定全部正确,如有问题,请指出)

#include<bits/stdc++.h>
#define ll long long
#define endl '\n'
#define up(i,j,k,l) for(int i=j;i<=k;i+=l)
#define down(i,j,k,l) for(int i=j;i>=k;i-=l)
using namespace std;
int n;
string s1,s2;
map<string,int> mp;
int ct;
//vector<string> v;
bool checks2()
{
	ll res=0;
	int ct=0,ctm=0;
	//cout<<(int)s2.length()-1;
	up(i,0,(int)s2.length()-1,1){
		if(s2[i]=='-'){
			return false;
		}
		if(s2[i]=='.' || s2[i]==':'){
			//cout<<res<<endl;
			if(res>255){
				return false;
			}
			if(s2[i+1]=='.' || s2[i+1]==':'){
				return false;
			}
			if(s2[i]=='.'){
				ct++;
			}
			if(s2[i]==':'){
				ctm++;
				if(ct!=3){
					return false;
				}
			}
			if((i+2<=(int)s2.length()-1 && s2[i+1]=='0' && s2[i+2]>='0' && s2[i+2]<='9') || (s2[i-1]=='.' || s2[i+1]=='.')){
				return false;
			}
			res=0;	
		}
		else{
			res*=10;
			res+=(int)s2[i]-'0';
		}
	}
	
	if(res>65535 || ctm!=1 || ct!=3){
		return false;
	}
	else{
		return true;
	}
}
void solve()
{	
	cin>>n;
	up(i,1,n,1){
		ct=i;
		s1.clear();
		s2.clear();
		cin>>s1>>s2;		
		if(s2.size()==0 || (s2[0]=='0' && s2[1]>='0' && s2[1]<='9') || s2[(int)s2.length()-1]=='.' || s2[(int)s2.length()-1]==':' || s2[0]==':' || s2[0]=='.'|| checks2()==false){
			cout<<"ERR";
			//v.push_back("ERR");
		}
		else{
			if(s1=="Server"){
				if(!mp.count(s2)){
					mp[s2]=ct;
					cout<<"OK";
					//v.push_back("OK");
				}
				else{
					cout<<"FAIL";
					//v.push_back("FAIL");
				}
			}
			else{
				if(mp.count(s2)){
					cout<<mp[s2];
					//v.push_back(to_string(mp[s2]));
				}
				else{
					cout<<"FAIL";
					//v.push_back("FAIL");
				}
			}
		}
		cout<<endl;
	}
	/*
	cout<<endl;
	for(auto fw:v){
		cout<<fw<<endl;
	}
	*/
	return;
}
int main()
{
    //ios::sync_with_stdio(false);
	//cin.tie(0);
	//freopen(".in","r",stdin);
	//freopen(".out","w",stdout);
	int _=1;
	//cin>>_;
	up(i,1,_,1){
		solve();
	}
	return 0;
}
2024/9/26 20:33
加载中...