这题过的人怎么还没有插入排序多???!!!
这里提供蒟蒻解法。
首先,我们先输入,然后边输入边操作。其实就是把每一个数字都分解出来,然后在分解的过程中看一下是不是ERR。其实主要就从这些方面去看:
1.负数和前导0;
2.标点符号;
3.数字大小;
4.空格问题;
5.数字有几个;
然后我们就完美的分解出数字。
接下来我们再看一下如果是Server并且不重复,那么就输出OK,否则输出FAIL
如果是Client并且有匹配,那么就输出那个编号,否则也输出FAIL
附上代码:
#include<bits/stdc++.h>
using namespace std;
int n,pd[1005],vis[1005][10];
string s[1005];
int fenjie(int x){
if(s[x][0]=='S') pd[x]=1;
else pd[x]=2;
int sum=0;
for(int i=7;i<s[x].size();i++){
int data=i,cishu=0,len=0;
sum++;
while(s[x][i]>='0'&&s[x][i]<='9') i++,len++;
for(int j=i-1;j>=data;j--){
vis[x][sum]+=(s[x][j]-'0')*pow(10,cishu);
cishu++;
}
if(len==0||(sum==1&&s[x][data-1]!=' ')&&s[x][data]=='-'||(sum<5&&vis[x][sum]>255)||(sum==5&&vis[x][sum]>65535)||(len!=1&&s[x][data]=='0')||(sum==5&&s[x][data-1]!=':')||(sum!=1&&sum<5&&s[x][data-1]!='.')){
vis[x][0]=1;
return 1;
}
}
if(sum!=5) return 1;
return 2;
}
int main(){
//freopen(".in","r",stdin);
//freopen("ceshi.out","w",stdout);
scanf("%d\n",&n);
for(int i=1;i<=n;i++){
getline(cin,s[i]);
int x=fenjie(i);
if(x==1) printf("ERR\n");
else if(pd[i]==1){
int flag=0;
for(int j=1;j<i;j++){
if(vis[j][0]==0){
if(pd[j]==1&&vis[j][1]==vis[i][1]&&vis[j][2]==vis[i][2]&&vis[j][3]==vis[i][3]&&vis[j][4]==vis[i][4]&&vis[j][5]==vis[i][5]){
printf("FAIL\n");
flag=1;
break;
}
}
}
if(flag==0) printf("OK\n");
}
else{
int flag=0;
for(int j=1;j<i;j++){
if(vis[j][0]==0){
if(pd[j]==1&&vis[j][1]==vis[i][1]&&vis[j][2]==vis[i][2]&&vis[j][3]==vis[i][3]&&vis[j][4]==vis[i][4]&&vis[j][5]==vis[i][5]){
printf("%d\n",j);
flag=1;
break;
}
}
}
if(flag==0) printf("FAIL\n");
}
}
//fclose(stdin);
//fclose(stdout);
return 0;
}