0分求助(悬关)
查看原帖
0分求助(悬关)
805192
LYS_Lewis楼主2023/9/29 10:39

4个样例都过了,#2下载到本地也过了,但上交时全WA

代码(码风比较奇怪,勿喷):


#include<bits/stdc++.h>
using namespace std;

inline int read()
{
	int res=0,f=1;char c;
	for(;(c=getchar())<'0' || c>'9';c=='-'?f=-f:0);
	while(c>='0' && c<='9')res=(res<<3)+(res<<1)+(c^48),c=getchar();
	return res*f;
} 

char op[10] = {0},code[30] = {0};
int n,t = 0,num[10],x,pos,c1,c2,tp,ttp;
struct node{
	int id;
	char c[30];
}server[1010];

int main(){
//	freopen("P7911_2.in","r",stdin);
//	freopen("network.ans","w",stdout);
	n = read();
	for(int ii = 1;ii<=n;ii++){
		cin>>op>>code;
		if(op[0]=='S'){
			//判断合法 
			for(int i = 0;i<=10;i++)num[i] = 0;
			x = 0;
			tp = 0;
			if(code[0]=='0'&&(code[1]>='0'&&code[1]<='9')){
				cout<<"ERR\n";
				continue;
			}
			pos = 1;
			for(int i = 0;i<strlen(code);i++){
				if(code[i]<'0'||code[i]>'9'){
					num[pos++] = x;
					x = 0;
					if(code[i+1]=='0'&&(code[i+2]>='0'&&code[i+2]<='9')){
						cout<<"ERR\n";
						tp = 1;
						break;
					}
					continue;
				}
				x = x*10+(code[i]-'0');
			}
			if(tp==1){
				continue;
			}
			num[pos++] = x;
			if(num[1]>=256||num[2]>=256||num[3]>=256||num[4]>=256||num[5]>=65536){
//				cout<<num[1]<<" "<<num[2]<<" "<<num[3]<<" "<<num[4]<<" "<<num[5]<<"\n";
				cout<<"ERR\n";
				tp = 1;
			}
			if(tp==1){
				continue;
			}
			c1 = 0,c2 = 0;
			for(int i = 0;i<strlen(code);i++){
				if(code[i]=='.')c1++;
				if(code[i]==':'&&c1==3)c2++;
				if(code[i]==':'&&c1!=3){
					tp = 1;
					break;
				}
			}
			if(tp==1||c1!=3||c2!=1){
				cout<<"ERR\n";
				continue;
			}
			//判重
			for(int i = 1;i<=t;i++){
				//server[i].c
				ttp = 1;
				if(strlen(server[i].c)!=strlen(code))continue;
				for(int j = 0;j<strlen(server[i].c);j++){
					if(server[i].c[j]!=code[j]){
						ttp = 0;
						break;
					}
				}
				if(ttp==1){
					tp = 1;
					break;
				}
			}
			if(tp==1){
				cout<<"FAIL\n";
				continue;
			}
			//添加
			server[++t].id = ii;
			for(int i = 0;i<strlen(code);i++)server[t].c[i] = code[i];
			cout<<"OK\n";
			//
		}
		else if(op[0]=='C'){
			//判断合法 
			for(int i = 0;i<=10;i++)num[i] = 0;
			x = 0;
			tp = 0;
			if(code[0]=='0'&&(code[1]>='0'&&code[1]<='9')){
				cout<<"ERR\n";
				continue;
			}
			pos = 1;
			for(int i = 0;i<strlen(code);i++){
				if(code[i]<'0'||code[i]>'9'){
					num[pos++] = x;
					x = 0;
					if(code[i+1]=='0'&&(code[i+2]>='0'&&code[i+2]<='9')){
						cout<<"ERR\n";
						tp = 1;
						break;
					}
					continue;
				}
				x = x*10+(code[i]-'0');
			}
			if(tp==1){
				continue;
			}
			num[pos++] = x;
			if(num[1]>=256||num[2]>=256||num[3]>=256||num[4]>=256||num[5]>=65536){
//				cout<<num[1]<<" "<<num[2]<<" "<<num[3]<<" "<<num[4]<<" "<<num[5]<<"\n";
				cout<<"ERR\n";
				tp = 1;
			}
			if(tp==1){
				continue;
			}
			c1 = 0,c2 = 0;
			for(int i = 0;i<strlen(code);i++){
				if(code[i]=='.')c1++;
				if(code[i]==':'&&c1==3)c2++;
				if(code[i]==':'&&c1!=3){
					tp = 1;
					break;
				}
			}
			if(tp==1||c1!=3||c2!=1){
				cout<<"ERR\n";
				continue;
			}
			//查找
			for(int i = 1;i<=t+1;i++){
				ttp = 1;
				if(strlen(server[i].c)!=strlen(code))continue;
				for(int j = 0;j<strlen(server[i].c);j++){
					if(server[i].c[j]!=code[j]){
						ttp = 0;
						break;
					}
				}
				if(ttp==1){
					cout<<server[i].id<<"\n";
					tp = 1;
					break;
				}
			}
			if(tp==1)	continue;
			//
			cout<<"FAIL\n";
		}
	}
	return 0;
}
2023/9/29 10:39
加载中...