社区讨论
65分求调(必关)
P7911[CSP-J 2021] 网络连接参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mhj0lx4j
- 此快照首次捕获于
- 2025/11/03 18:46 4 个月前
- 此快照最后确认于
- 2025/11/03 18:46 4 个月前
大概就是check函数稍微有点复杂,但还好,都是按照题目模拟的
CPP#include<bits/stdc++.h>
using namespace std;
int n;string po,a[1010],x;
bool check(string s){
//符号
int a1[50],f=0,i;
for(i=0;i<s.size();i++){
if(s[i]=='.'){
a1[++f]=i;
}
if(f==3)break;
}
if(f!=3)return 0;
for(i=i+1;i<s.size();i++){
if(s[i]=='.')return 0;
if(s[i]==':'){
a1[++f]=i;
break;
}
}
if(f!=4)return 0;
for(i=i+1;i<s.size();i++){
if(s[i]==':')return 0;
}
//数字
int A=0,B=0,C=0,D=0,E=0,cnt;
cnt=1;
if(a1[1]>=4)return 0;
if(a1[2]-a1[1]-1>=4)return 0;
if(a1[3]-a1[2]-1>=4)return 0;
if(a1[4]-a1[3]-1>=4)return 0;
if(s.size()-a1[4]-1>=6)return 0;
for(int j=a1[1]-1;j>=0;j--){
if(!(s[j]<='9'&&s[j]>='0'))return 0;
A+=(s[j]-'0')*cnt;
cnt*=10;
}
cnt=1;
for(int j=a1[2]-1;j>a1[1];j--){
if(!(s[j]<='9'&&s[j]>='0'))return 0;
B+=(s[j]-'0')*cnt;
cnt*=10;
}
cnt=1;
for(int j=a1[3]-1;j>a1[2];j--){
if(!(s[j]<='9'&&s[j]>='0'))return 0;
C+=(s[j]-'0')*cnt;
cnt*=10;
}
cnt=1;
for(int j=a1[4]-1;j>a1[3];j--){
if(!(s[j]<='9'&&s[j]>='0'))return 0;
D+=(s[j]-'0')*cnt;
cnt*=10;
}
cnt=1;
for(int j=s.size()-1;j>a1[4];j--){
if(!(s[j]<='9'&&s[j]>='0'))return 0;
E+=(s[j]-'0')*cnt;
cnt*=10;
}
// cout<<A<<' '<<B<<' '<<C<<' '<<D<<' '<<E<<'\n';
//前导0
if(A!=0&&(s[0]-'0')==0)return 0;
if(B!=0&&(s[a1[1]+1]-'0')==0)return 0;
if(C!=0&&(s[a1[2]+1]-'0')==0)return 0;
if(D!=0&&(s[a1[3]+1]-'0')==0)return 0;
if(E!=0&&(s[a1[4]+1]-'0')==0)return 0;
//范围
if(!(A>=0&&A<=255))return 0;
if(!(B>=0&&B<=255))return 0;
if(!(C>=0&&C<=255))return 0;
if(!(D>=0&&D<=255))return 0;
if(!(E>=0&&E<=65535))return 0;
return 1;
}
int main(){
ios::sync_with_stdio(NULL);
cin.tie(0);
cout.tie(0);
cin>>n;
for(int i=1;i<=n;i++){
cin>>po;
if(po=="Server"){
cin>>a[i];
if(!check(a[i])){
cout<<"ERR"<<'\n';
a[i]="e";
}
else{
int fs=0;
for(int j=1;j<i;j++){
if(a[j]=="e")continue;
if(a[j]==a[i]){
cout<<"FAIL"<<'\n';
a[i]="e";
fs=1;
break;
}
}
if(fs==0){
cout<<"OK"<<'\n';
}
}
}
else{
cin>>x;
if(!check(x)){
cout<<"ERR"<<'\n';
}
else{
int fs=0;
for(int j=1;j<i;j++){
if(a[j]=="e")continue;
if(a[j]==x){
cout<<j<<'\n';
fs=1;
break;
}
}
if(fs==0){
cout<<"FAIL"<<'\n';
}
}
}
}
return 0;
}
/*
1
Server 01.2.3.4:80
*/
回复
共 0 条回复,欢迎继续交流。
正在加载回复...