95pts 求助
查看原帖
95pts 求助
520056
luoyx楼主2022/10/11 20:38
#include <bits/stdc++.h>
using namespace std;
int n;
string op,s;
char cmp[8]={'2','5','5'},cmp2[8]={'6','5','5','3','5'};
map<string,int> mp;
map<string,int> mp2;
int scnt;
void print(){
	printf("ERR\n");
}
bool check(int l,int r){
	if(l>r) return false;
	if(s[l]=='0'&&l!=r) return false;
	if(r-l+1<3) return true;
	if(r-l+1>3) return false;
	for(int i=l,j=0;i<=r;i++,j++){
		if(s[i]>cmp[j]) return false;
		if(s[i]<cmp[j]) return true;
	}
	return true;
}
bool check2(int l,int r){
	if(l>r) return false;
	if(s[l]=='0'&&l!=r) return false;
	if(r-l+1<5) return true;
	if(r-l+1>5) return false;
	for(int i=l,j=0;i<=r;i++,j++){
		if(s[i]>cmp2[j]) return false;
		if(s[i]<cmp2[j]) return true;
	}
	return true;
}
int main(){
	cin>>n;
	while(n--){
		cin>>op>>s;
		scnt++;
		bool flag=true;
		int p[5],cnt=1;
		int sz=s.size();
		for(int i=0;i<sz;i++){
			if(cnt<=3){
				if(s[i]<'0'||s[i]>'9'){
					if(s[i]=='.'){
						p[cnt]=i;
						cnt++;
					}
					else{
						flag=false;
						break;
					}
				}
			}
			else if(cnt==4){
				if(s[i]<'0'||s[i]>'9'){
					if(s[i]==':'){
						p[cnt]=i;
						cnt++;
					}
					else{
						flag=false;
						break;
					}
				}
			}
			else{
				if(s[i]<'0'||s[i]>'9'){
					flag=false;
					break;
				}
			}
		}
		if(flag==false){
			print();
			continue;
		}
		if(check(0,p[1]-1)&&check(p[1]+1,p[2]-1)&&check(p[2]+1,p[3]-1)
		&&check(p[3]+1,p[4]-1)&&check2(p[4]+1,sz-1)){
			if(op[0]=='S'){
				if(mp2[s]==0){
					mp2[s]=scnt;
					printf("OK\n");
				}
				else printf("FAIL\n");
			}
			else{
				if(mp[s]==1){
					printf("FAIL\n");
				}
				else if(mp2[s]==0){
					printf("FAIL\n");
				}
				else printf("%d\n",mp2[s]);
			}
		}
		else{
			print();
			continue;
		}
	}
}
2022/10/11 20:38
加载中...