Uva1590——IP networks
阿新 • • 發佈:2019-01-29
#include <iostream> #include <cstdio> #include <algorithm> using namespace std; struct IP { int ip[4]; }; bool cmd(struct IP a, struct IP b) { for(int i = 0; i < 4; i++) if(a.ip[i] != b.ip[i]) return a.ip[i] < b.ip[i]; return false; } int zwymTable[9] = {255, 254, 252, 248, 240, 224, 192, 128, 0}; int main() { int n, i; struct IP data[1001]; int zwym[4], Minip[4]; while(cin >> n) { for(i = 0; i < n; i++) { scanf("%d.%d.%d.%d", &data[i].ip[0], &data[i].ip[1], &data[i].ip[2], &data[i].ip[3]); } sort(data, data + n, cmd); for(i = 0; i < 4; i++) { int dis = 0, q, p, j; q = data[0].ip[i]; p = data[n - 1].ip[i]; for(j = 1; j <= 8; j++) { if(q % 2 != p % 2) dis = j; q /= 2; p /= 2; } zwym[i] = zwymTable[dis]; Minip[i] = data[0].ip[i] & zwym[i]; } for(i = 0; i < 4; i++) { if(zwym[i] != 255) { for(int j = i + 1; j < 4; j++) { zwym[j] = Minip[j] = 0; } break; } } printf("%d.%d.%d.%d\n", Minip[0], Minip[1], Minip[2], Minip[3]); printf("%d.%d.%d.%d\n", zwym[0], zwym[1], zwym[2], zwym[3]); } return 0; }