考场代码,民间数据95,官方20,求调
查看原帖
考场代码,民间数据95,官方20,求调
363144
zljhenry楼主2021/11/6 11:39
// Problem: P7911 [CSP-J 2021] 网络连接
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P7911
// Memory Limit: 512 MB
// Time Limit: 1000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

#include<iostream>
#include<map>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<cmath>
#include<vector>
#include<deque>
#include<queue>
#include<set>
#include<sstream>
#include<stack>
#include<fstream>
#define ll long long
#define ull unsigned long long
#define endl '\n'
#define M 2005
#define INF 0x3f3f3f3f3f
#define mod 73744987
using namespace std;
int n;
char op[45];
char ad[45];
int fa[300],fb[300],fc[300],fd[300],fe[90000];
int sum=0;
int hash[1001];
struct ser{
	int a,b,c,d,e;
	int num;
}se[M];
int ccnt;
int ha[83744987];
bool F(int len,int &a,int &b,int &c,int &d,int &e){
	if(len<9) return 0;
	a=1;b=1;c=1;d=1;e=1;
	if(!(ad[0]=='0'&&ad[1]=='.'))
	if(ad[0]<='0'||ad[0]>'9') return 0;
	else a=int(ad[0]-'0');
	int i=1;
	for(;i<len;i++){
		if(ad[i]<'0'||ad[i]>'9'){
			if(ad[i]=='.') break;
			else return 0;
		}
		else a=a*10+int(ad[i]-'0');
		if(a>255) return 0;
	}if(a>255) return 0;
	//
	//cerr<<"a"<<endl;
	i++;
	if(!(ad[i]=='0'&&ad[i+1]=='.'))
	if(ad[i]<='0'||ad[i]>'9') return 0;
	else b=int(ad[i]-'0');
	i++;
	for(;i<len;i++){
		if(ad[i]<'0'||ad[i]>'9'){
			if(ad[i]=='.') break;
			else return 0;
			
		}else b=b*10+int(ad[i]-'0');
		if(b>255) return 0;
	}if(b>255) return 0;
	//
	//cerr<<"b"<<endl;
	i++;
	if(!(ad[i]=='0'&&ad[i+1]=='.'))
	if(ad[i]<='0'||ad[i]>'9') return 0;
	else c=int(ad[i]-'0');
	i++;
	for(;i<len;i++){
		if(ad[i]<'0'||ad[i]>'9'){
			if(ad[i]=='.') break;
			else return 0;
			
		}else c=c*10+int(ad[i]-'0');
		if(c>255) return 0;
	}if(c>255) return 0;
	//
	//cerr<<"c"<<endl;
	i++;
	if(!(ad[i]=='0'&&ad[i+1]==':'))
	if(ad[i]<='0'||ad[i]>'9') return 0;
	else d=int(ad[i]-'0');
	i++;
	for(;i<len;i++){
		if(ad[i]<'0'||ad[i]>'9'){
			if(ad[i]==':') break;
			else return 0;
			
		}
		else d=d*10+int(ad[i]-'0');
		if(d>255) return 0;
	}if(d>255) return 0;
	//
	//cerr<<"d"<<endl;
	i++;
	if(!(i==len&&ad[i]=='0'))
	if(ad[i]<='0'||ad[i]>'9') return 0;
	else e=int(ad[i]-'0');
	i++;
	for(;i<len;i++){
		if(ad[i]<'0'||ad[i]>'9')return 0;
		else e=e*10+int(ad[i]-'0');
		if(e>65535) return 0; 
	}
	if(e>65535) return 0;
	//cerr<<"e"<<endl;
	return 1;
}
bool com(int aa,int bb,int cc,int dd,int ee){
	if(fa[aa]&&fb[bb]&&fc[cc]&&fd[dd]&&fe[ee]) return 0;
	fa[aa]=1;fb[bb]=1;fc[cc]=1;fd[dd]=1;fe[ee]=1;
	sum++;
	se[sum].a=aa;se[sum].b=bb;se[sum].c=cc;se[sum].d=dd;se[sum].e=ee;
	ull k=(((aa%mod*bb%mod)%mod*cc%mod)%mod*dd%mod*ee%mod)%mod;
	k%=mod;
	if(ha[k]!=0) return 0;
	ha[k]=ccnt;
	return 1;
}
int main(){
	scanf("%d",&n);
	while(n--){
		int a,b,c,d;
		int e;
		scanf("%s%s",op,ad);
		int len=strlen(ad);
		ccnt++;
		if(!F(len,a,b,c,d,e)) {puts("ERR");continue;}
		//cerr<<a<<' '<<b<<' '<<c<<' '<<d<<' '<<e<<' '<<endl;
		if(op[0]=='S'){
			if(!com(a,b,c,d,e)) puts("FAIL");
			else puts("OK");
		}else{
//			if(!fa[a]||!fb[b]||!fc[c]||!fd[d]||!fe[e]){puts("FAIL");continue;}
//			for(int i=1;i<=sum;i++){
//				if(se[i].a==a&&se[i].b==b&&se[i].c==c&&se[i].d==d&&se[i].e==e) {printf("%d\n",se[i].num);continue;}
//			}
			ull k=((a%mod*b%mod*c%mod)%mod*d%mod*e%mod)%mod;
			k%=mod;
			if(ha[k%mod]==0) {puts("FAIL");continue;}
			else {printf("%d\n",ha[k%mod]);continue;}
		}
	}

	return 0;
}
2021/11/6 11:39
加载中...