#include <iostream>
using namespace std;
int res1[6], res2[6];
int sd[6];
bool check1(int p[]) {
    for (int i = 1; i <= 4; i++) {
        if (p[i] < 0) {
            return false;
        }
    }
    for (int i = 2; i <= 4; i++) {
        if (p[i] > p[i - 1]) {
            return false;
        }

    }

    return true;
}
bool check(int p[]) {
    for (int i = 1; i <= 4; i++) {
        if (p[i] > 255||p[i]<0) {
            return false;
        }
    }
    return true;
}
int main() {
    string a, b, c;
    while (cin >> a >> b >> c) {
        int len = a.size(), len2 = b.size(), len3 = c.size();
        int res = 0;
        int j = 1;
        int f = 0;
        for (int i = 0; i < len; i++) {
            if (a[i] == '-') {
                f = 1;
                i++;
                // continue;
            }
            while (a[i] != '.' && i < len) {

                res = res * 10 + (a[i] - '0');
                i++;
            }
            if(f==1){
                res*=-1;
                f = 0;
            }
            sd[j++] = res;
            res = 0;
        }
        j = 1;
        res = 0,f = 0;
        for (int i = 0; i < len2; i++) {
            if (b[i] == '-') {
                f = 1;
                i++;
                // continue;
            }
            while (b[i] != '.' && i < len2) {
                res = res * 10 + (b[i] - '0');
                i++;
            }
            if(f==1){
                res*=-1;
                f = 0;
            }
            res1[j++] = res;
            res = 0;
        }
        j = 1;
        res = 0;
        for (int i = 0; i < len3; i++) {
            if (c[i] == '-') {
                f = 1;
                i++;
                // continue;
            }
            while (c[i] != '.' && i < len3) {
                
                res = res * 10 + (c[i] - '0');
                i++;
            }
            if(f==1){
                res*=-1;
                f = 0;
            }
            res2[j++] = res;
            res = 0;
        }
        // for (int i = 1; i <= 4; i++) {
        //     cout << res1[i] << ' ' << res2[i] << ' ' << sd[i] << '\n';
        // }
        bool ok1 = check(res1);
        bool ok2 = check(res2);
        bool ok3 = check1(sd);
        if (ok1 == ok2 && ok1 == true && ok1 == ok3) {
            bool flag = true;
            for (int i = 1; i <= 4; i++) {
                int x = res1[i] & sd[i];
                int y = res2[i] & sd[i];
                if (x != y) {
                    flag = false;
                    break;
                }
            }
            if (!flag) {
                cout << "2\n";
            } else {
                cout << "0\n";
            }
        } else {
            cout << "1\n";
        }

        // cout<<a[1]&sd[1]<<'\n';

    }
    return 0;
}
// 64 位输出请用 printf("%lld")

存储每个地址的十进制数字,注意有负数,然后分别进行&运算,模拟判断即可。

活动地址https://www.nowcoder.com/discuss/726480854079250432