• 板块学术版
  • 楼主hkl99
  • 当前回复4
  • 已保存回复4
  • 发布时间2024/10/15 17:47
  • 上次更新2024/10/15 20:13:48
查看原帖
770439
hkl99楼主2024/10/15 17:47

为什么做题时交到洛谷上WA了,把数据下载下来用freopen输出到文件里,然后用system("fc .... ....")来验证对不对,结果一模一样,有哪位大佬解答一下。

题目:P7911 [CSP-J 2021] 网络连接

代码:

#include<bits/stdc++.h>
using namespace std;
int n;
string a,b;
map<string,int>q;
bool pd() {
	/*
	IP 中某个数字超出范围。
	*/
	int len=b.length(),m=0,d=0,cnt=1;
	long long e[6];
	memset(e,0,sizeof(e));
	if(b[0]<'0'||b[0]>'9') { //IP 的第 1个字符不为数字;
		//cout<<"IP 的第 1个字符不为数字;"<<endl;;
		return false;
	}
	if(b[0]=='0'&&b[1]!='.') { //IP 的第 1 个字符为 0,且第 2 个字符为数字;
		//cout<<"IP 的第 1 个字符为 0,且第 2 个字符为数字;"<<endl;;
		return false;
	}
	if(b[len-1]<'0'||b[len-1]>'9') { //IP 的最后 1 个字符不为数字;
		//cout<<"IP 的最后 1 个字符不为数字;"<<endl;;
		return false;
	}
	for(int i=0; i<len; i++) {
		if(b[i]=='.'){
			d++;
		}
		if(b[i]=='.'||b[i]==':') {
			cnt++;
		}
		if(b[i]>='0'&&b[i]<='9') {
			e[cnt]=e[cnt]*10+(b[i]-'0');
		}
		if(!((b[i]>='0'&&b[i]<='9')||b[i]=='.'||b[i]==':')) {//IP 包含除数字,“.”与“:”之外的字符;
			//cout<<"IP 包含除数字,“.”与“:”之外的字符;"<<endl;;
			return false;
		}
		if(b[i]==':') { //IP 中“:”之前的“.”的个数不足 3 个;
			m++;
			if(d<3) {
				//cout<<"IP 中“:”之前的“.”的个数不足 3 个;"<<endl;; 
				return false;
			}
		}
		if(b[i]=='.'&&(b[i+1]<'0'||b[i+1]>'9')) { //IP 中某个“.”之后的第 1 个字符不为数字;
			//cout<<"IP 中某个“.”之后的第 1 个字符不为数字;"<<endl;;
			return false;
		}
		if(b[i]=='.'&&b[i+1]=='0'&&(b[i+2]>='0'&&b[i+2]<='9')) { //IP 中某个“.”之后的第 1 个字符为 0,且第 2 个字符为数字;
			//cout<<"IP 中某个“.”之后的第 1 个字符为 0,且第 2 个字符为数字;"<<endl;;
			return false;
		}
		if(b[i]==':'&&(b[i+1]<'0'||b[i+1]>'9')) { //IP 中“:”之后的第 1 个字符不为数字;
			//cout<<"IP 中“:”之后的第 1 个字符不为数字;"<<endl;;
			return false;
		}
		if(b[i]==':'&&b[i+1]=='0'&&(b[i+2]>='0'&&b[i+2]<='9')) { //IP 中“:”之后的第 1 个字符为 0,且第 2 个字符为数字;
			//cout<<"IP 中“:”之后的第 1 个字符为 0,且第 2 个字符为数字;"<<endl;;
			return false;
		}
	}
	if(m!=1||d!=3) { //	IP 中“.”的个数不为3 个;//   IP 中“:”的个数不为 1 个;
	//	printf("冒号:%d 点:%d\n",m,d);
	//	cout<<"IP 中“.”的个数不为3 个;   IP 中“:”的个数不为 1 个;"<<endl;;
		return false;
	}
	if(e[1]<=255&&e[2]<=255&&e[3]<=255&&e[4]<=255&&e[5]<=65535) {
		//cout<<"可以"<<endl;; 
		return true;
	} else {
		//cout<<"数字太大"<<endl;; 
		return false;
		
	}
}
int main() {
//	freopen("P7911_13.in","r",stdin);
//	freopen("huangjunhan.out","w",stdout);
	scanf("%d",&n);
	for(int i=1; i<=n; i++) {
		cin>>a>>b;
		cout<<i<<" ";
		if(a[0]=='S') {
			if(q[b]==0&&pd()==true) {
				q[b]=i;
				printf("OK\n");
			} else {
				if(pd()==true&&q[b]!=0) {
					printf("FAIL\n");
				} else {
					if(pd()==false) {
						printf("ERR\n");
					}
				}
			}
		} else {
			if(pd()==true&&q[b]!=0) {
				printf("%d\n",q[b]);
			} else {
				if(pd()==true&&q[b]==0) {
					printf("FAIL\n");
				} else {
					if(pd()==false) {
						printf("ERR\n");
					}
				}
			}
		}
	}
	return 0;
}
2024/10/15 17:47
加载中...