我知道有很多问题,但就是改不出来,有些问题不大好改,请大佬求助(本人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;
}