P7911 永远的35pts(请求大佬们的求助)
  • 板块学术版
  • 楼主Tooler_Yang
  • 当前回复0
  • 已保存回复0
  • 发布时间2021/11/20 20:13
  • 上次更新2023/11/3 23:56:16
查看原帖
P7911 永远的35pts(请求大佬们的求助)
377768
Tooler_Yang楼主2021/11/20 20:13

我知道有很多问题,但就是改不出来,有些问题不大好改,请大佬求助(本人csp-j提交代码)

#include<bits/stdc++.h>
//#include<time.h>
//#include<windows.h>
using namespace std;
int us[100001][6];
string sss[1000001];
bool same(int i) {
	if(i==1) {
		return false;
	}
	for(int j=1; j<i; j++) {
		if(us[j][0]) {
			for(int k=1; k<=5; k++) {
				if(us[j][k]!=us[i][k]) {
					return false;
				}
			}
		}
	}
	return true;
}
bool right(int i) {
	for(int k=1; k<=4; k++) {
		if((us[i][k]>255||us[i][k]<0)) {
//			cout<<i<<" "<<"of"<<k<<"unright   ";
			return false;
		}
	}
	if((us[i][5]>65535||us[i][5]<0)) {
		return false;
	}
	int dotnum=0;
	int maonum=0;
	for(int j=0; j<sss[i].size(); j++) {
		if(maonum>dotnum) {
//			cout<<"maoalot   ";
			return false;
		}
		if(sss[i][j]=='.') {
			dotnum++;
		}
		if(sss[i][j]==':') {
			maonum++;
		}

	}
	if(dotnum!=3||maonum!=1) {
//		cout<<"numwrong   ";
		return false;
	}
	for(int j=0;j<=sss[i].size();j++){
		if(sss[i][j]=='0'&&(sss[i][j+1]<='9'&&sss[i][j+1]>='0')&&(sss[i][j-1]=='.'||sss[i][j-1]==':'||j-1<0)){
//			cout<<"front0for"<<j<<"   ";
			return false;
		}
	}
	return true;
}
int find(int i) {
	for(int j=1; j<i; j++) {
		int flag=0;
		if(us[j][0]) {
			for(int k=1; k<=5; k++) {
				if(us[j][k]!=us[i][k]) {
					flag=1;
					break;
				}
			}
			if(flag==1) {
				continue;
			} else {
				return j;
			}
		}
	}
	return -1;
}
int main() {
//	freopen("network.in","r",stdin);
//	freopen("network.out","w",stdout);
	memset(us,0x3f3f3f3f,sizeof(us));
	int n;
	scanf("%d",&n);
	for(int i=1; i<=n; ++i) {

		string ss;
		cin>>ss;
		if(ss=="Server") {
			int s=0;
			cin>>sss[i];

			int t=0;
			for(int j=0; j<sss[i].size(); ++j) {
				if(sss[i][j]!=':'&&sss[i][j]!='.') {
					s=s*10+sss[i][j]-'0';
				} else {
					us[i][++t]=s;
					s=0;
					us[i][0]=1;
				}
			}
			us[i][++t]=s;
		} else {
			int s=0;
			cin>>sss[i];
			int t=0;
			for(int j=0; j<sss[i].size(); ++j) {
				if(sss[i][j]!=':'&&sss[i][j]!='.') {
					s=s*10+sss[i][j]-'0';
				} else {
					us[i][++t]=s;
					s=0;
					us[i][0]=0;
				}
			}
			us[i][++t]=s;
		}
	}
	for(int i=1; i<=n; i++) {
		if(us[i][0]) {
			if(right(i)) {
				if(same(i)) {
					cout<<"FAIL\n";
				} else {
					cout<<"OK\n";
				}
			} else {
				cout<<"ERR\n";
			}
		} else {
			if(right(i)) {
				int t=find(i);
				if(t==-1) {
					cout<<"FAIL\n";
				} else {
					cout<<t<<"\n";
				}
			} else {
				cout<<"ERR\n";
			}
		}
	}
//	fclose(stdin);
//	fclose(stdout);
	return 0;
}
2021/11/20 20:13
加载中...