AlenaNuna

导航

HJ39 判断两个IP是否属于同一子网

没啥好说的,又是模拟+一堆无聊的细节。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 char s[3][20];
 4 int num[3][10],cnt[3];
 5 void init(){
 6     for(int i=0;i<3;i++)
 7         scanf("%s",s[i]);
 8     return;
 9 }
10 int Work(int a,int b){
11     int x=0,i=a,j=b,f=1;
12     while(s[i][j]<'0'||s[i][j]>'9'){
13         if(s[i][j]=='-')f=-1;
14         j++;
15     }
16     while(s[i][j]>='0'&&s[i][j]<='9'){
17         x=x*10+s[i][j]-'0';
18         j++;
19     }
20     return f*x;
21 }
22 void GetNum(){
23     for(int i=0;i<3;i++){
24         int l=strlen(s[i]);
25         for(int j=0;j<l;j++)
26             if(s[i][j]=='-'||(s[i][j]>='0'&&s[i][j]<='9')){
27                 if(j==0||(s[i][j-1]<'0'||s[i][j-1]>'9')){
28 //                    printf("!%c",s[i][j]);
29                     num[i][++cnt[i]]=Work(i,j);
30 //                    printf("%d ",num[i][cnt[i]]);
31                 }
32             }
33     }
34     return;
35 }
36 bool Check3(){
37     int e[40],cnt=0;
38     for(int i=1;i<=4;i++){
39         for(int j=7;j>=0;j--){
40             int t=1<<j;
41             cnt++;
42             if(t&num[0][i]) e[cnt]=1;
43             else e[cnt]=0;
44         }
45     }
46     if(e[1]==0||e[cnt]==1)return 0;
47     for(int i=2;i<=cnt;i++)
48         if(e[i]==1&&e[i-1]==0)return 0;
49     return 1;
50 }
51 bool Check(){
52     for(int i=0;i<3;i++)
53         if(cnt[i]!=4)return 0;
54     for(int i=0;i<3;i++)
55         for(int j=1;j<=4;j++)
56             if(num[i][j]<0||num[i][j]>255)return 0;
57     if(!Check3())return 0;
58     return 1;
59 }
60 bool CheckZW(){
61     for(int i=1;i<=4;i++){
62         int a=num[1][i]&num[0][i];
63         int b=num[2][i]&num[0][i];
64 //        printf("%d %d\n",a,b);
65         if(a!=b)return 0;
66     }
67     return 1;
68 }
69 int main(){
70     init();
71 //    puts("OK");
72     GetNum();
73     if(!Check()){
74         puts("1");
75         return 0;
76     }
77     if(CheckZW()){
78         puts("0");
79     }
80     else puts("2");
81     return 0;
82 }

 

posted on 2024-09-02 18:13  AlenaNuna  阅读(3)  评论(0编辑  收藏  举报