求助P7911,本人太菜,实在找不出问题,每次提交就65,跪求大佬看看这题
  • 板块灌水区
  • 楼主Salazar_byy
  • 当前回复5
  • 已保存回复5
  • 发布时间2023/8/21 21:04
  • 上次更新2023/11/3 02:08:07
查看原帖
求助P7911,本人太菜,实在找不出问题,每次提交就65,跪求大佬看看这题
687620
Salazar_byy楼主2023/8/21 21:04
#include<bits/stdc++.h>
using namespace std;
map<string ,int> vis;
string op[1005],ad[1005];
int n;
int rec[10];
bool check(string s){
    int len = s.size();
    if(len<9) return false;
    int cnt=0,cnt1=0,cnt2=0;
    for(int i=0;i<len;i++){
    	if(cnt+1<=cnt1+cnt2) return false;
    	if(s[i]=='0'&&(i==0||(s[i-1]=='.'||s[i-1]==':')) && (s[i+1]!='.'&&s[i+1]!=':'))  return false;
    	if(s[i]!='.' && s[i]!=':' && s[i]<'0' && s[i]>'9') return false;
    	if(s[i]=='.') cnt1++;
    	if(s[i]==':') cnt2++;
    	if(cnt1<3&&cnt2==1) return false; 	
    	if(s[i]=='.'&&s[i+1]=='.') return false;
	}
	if(cnt1!=3||cnt2!=1) return false;

    memset(rec,0,sizeof(int)*10);
    int j = 0;
    for(int i=0;i<len;i++){
		if(s[i]=='.'||s[i]==':') j++;
		else rec[j] = rec[j]*10 + (s[i]-'0');
	}
	if (j != 4) return false;
	for(int i=0;i<4;i++){
		if(0>rec[i]||rec[i]>255) return false;
	}
	if(0>rec[4]||rec[4]>65535) return false;
	
	return true;
}

int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
	    cin>>op[i]>>ad[i];
	    //cout<<op[i]<<" | "<<ad[i]<<endl;
    }
    for(int i=1;i<=n;i++){
    	if(op[i]=="Server"){
    		if(!check(ad[i])){
    			
    			cout<<"ERR"<<endl;
			}
			else if(vis.find(ad[i])==vis.end()){
				vis[ad[i]]=i;
				cout<<"OK"<<endl;
			}
			else{
				cout<<"FAIL"<<endl;
			}
		}
		else{
			if(!check(ad[i])){
    			cout<<"ERR"<<endl;
			}
			else if(vis.find(ad[i])==vis.end()){
				cout<<"FAIL"<<endl;
			}
			else{
				cout<<vis.find(ad[i])->second<<endl;
			}
		}
	}
	return 0;
}

原题 测试好久,快疯了

2023/8/21 21:04
加载中...