第三个和第四个点,为什么会 WA 啊?
https://www.acwing.com/problem/content/description/3272/
#include<bits/stdc++.h>
using namespace std;
const int MAXN=1e5+10;
const int MAXL=64;
int n;
char data[MAXL];
inline int read_int() {
int s=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9') {
if(ch=='-') {
w=-1;
}
ch=getchar();
}
while(ch>='0'&&ch<='9') {
s=s*10+ch-'0';
ch=getchar();
}
return s*w;
}
struct node{
int ip_value[4];
int len=0;
};
node ip[MAXN];
bool cmp(node a,node b){
if(a.ip_value[0]>b.ip_value[0]){
return false;
}
if(a.ip_value[0]<b.ip_value[0]){
return true;
}
if(a.ip_value[1]>b.ip_value[1]){
return false;
}
if(a.ip_value[2]<b.ip_value[2]){
return true;
}
if(a.ip_value[2]>b.ip_value[2]){
return false;
}
if(a.ip_value[3]<b.ip_value[3]){
return true;
}
if(a.ip_value[3]>b.ip_value[3]){
return false;
}
if(a.ip_value[3]<b.ip_value[3]){
return true;
}
if(a.len>b.len){
return false;
}
if(a.len<b.len){
return true;
}
return true;
}
int main(){
n=read_int();
if(n<=100){
for(int i=0;i<n;i+=1){
scanf("%s",data+1);
data[0]='.';
int l=strlen(data);
bool f=false;
int cnt=0;
for(int j=0;j<l;j+=1){
if(data[j]=='.'){
sscanf(data+j+1,"%i",&ip[i].ip_value[cnt]);
if(ip[i].ip_value[cnt]!=0){
cnt+=1;
}
}
if(data[j]=='/'){
f=true;
sscanf(data+j+1,"%i",&ip[i].len);
}
}
if(f==false){
ip[i].len=cnt*8;
}
}
sort(ip,ip+n,cmp);
for(int i=0;i<n;i+=1){
printf("%i.%i.%i.%i/%i \n",ip[i].ip_value[0],ip[i].ip_value[1],ip[i].ip_value[2],ip[i].ip_value[3],ip[i].len);
}
}else{
return 1;
}
return 0;
}