如何快速AC?
查看原帖
如何快速AC?
505415
Alanrzc楼主2021/10/24 14:58

这题过的人怎么还没有插入排序多???!!!

这里提供蒟蒻解法。

首先,我们先输入,然后边输入边操作。其实就是把每一个数字都分解出来,然后在分解的过程中看一下是不是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;
} 
2021/10/24 14:58
加载中...