当我用最笨的超长模拟死磕代码0分
查看原帖
当我用最笨的超长模拟死磕代码0分
1041964
Hola_楼主2024/8/29 22:42

感觉真的没问题?

(虽然方法chunsi)

样例全过

下了几个数据点,和输出是一模一样的,但还是0分...... 蒟蒻求调

#include <bits/stdc++.h>
using namespace std;
int n;
struct node{
	string s;
	bool o;
};
node ad[1005];
bool numb(char c){
	return c>='0'&&c<='9';
}
bool legal(string s){
	int len=s.length();
	int weia=0,weib=0,weic=0,weid=0,weie=0;
	int a=0,b=0,c=0,d=0,e=0;
	for(int i=0;;i++){
		if(numb(s[i]))weia++;
		else break;
	}if(weia>1&&s[0]=='0')return false;
	for(int i=weia;i>=1;i--)a+=(s[weia-i]-'0')*pow(10,i-1);
	if(a>255)return false;
	if(s[weia]!='.'||!(numb(s[weia+1])))return false;
	for(int i=weia+1;;i++){
		if(numb(s[i]))weib++;
		else break;
	}if(weib>1&&s[weia+1]=='0')return false;
	int weibb=weib;
	for(int i=weia+1;i<=weia+weib;i++){
		b+=(s[i]-'0')*pow(10,weibb-1);
		weibb--;
	}if(b>255)return false;
	if(s[weia+weib+1]!='.'||!(numb(s[weia+weib+2])))return false;
	for(int i=weia+weib+2;;i++){
		if(numb(s[i]))weic++;
		else break;
	}if(weic>1&&s[weia+weib+2]=='0')return false;
	int weicc=weic;
	for(int i=weia+weib+2;i<=weia+weib+weic+2;i++){
		c+=(s[i]-'0')*pow(10,weicc-1);
		weicc--;
	}if(c>255)return false;
	if(s[weia+weib+weic+2]!='.'||!(numb(s[weia+weib+weic+3]))){
		return false;
	}for(int i=weia+weib+weic+3;;i++){
		if(numb(s[i]))weid++;
		else break;
	}if(weid>1&&s[weia+weib+weic+3]=='0')return false;
	int weidd=weid;
	for(int i=weia+weib+weic+3;i<=weia+weib+weic+weid+3;i++){
		d+=(s[i]-'0')*pow(10,weidd-1);
		weidd--;
	}if(d>255)return false;
	if(s[weia+weib+weic+weid+3]!=':'||!(numb(s[weia+weib+weic+weid+4]))){
		return false;
	}int weiwei=weia+weib+weic+weid+4;
	weie=len-weiwei;
	if(weie>1&&s[weiwei]=='0')return false;
	int weiee=weie;
	for(int i=weiwei;i<=len-1;i++){
		e+=(s[i]-'0')*pow(10,weiee-1);
		weiee--;
	}if(e>65535)return false;
	return true;
}
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		string op;
		cin>>op>>ad[i].s;
		if(!legal(ad[i].s)){
			cout<<"ERR"<<endl;
			continue;
		}if(op=="Server"){
			ad[i].o=1;
			bool f=0;
			for(int j=1;j<i;j++){
				if(ad[j].s==ad[i].s&&ad[j].o==1)f=1;
			}if(f){
				cout<<"Fail"<<endl;
				continue;
			}cout<<"OK"<<endl;
			continue;
		}else if(op=="Client"){
			ad[i].o=0;
			bool f=0;
			for(int j=1;j<i;j++){
				if(ad[j].s==ad[i].s&&ad[j].o==1){
					cout<<j<<endl;
					f=1;
					break;
				}
			}if(!f)cout<<"Fail"<<endl;
			continue;
		}
	}
	return 0;
}
2024/8/29 22:42
加载中...