UVa 1590 IP Networks

来源:互联网 发布:介绍花苗可靠的淘宝店 编辑:程序博客网 时间:2024/05/21 07:52

这是一道水题

然而wa无数遍

忘了写读取数据的循环

忘了写了循环后需要每次memset

忘了memset需要cstring头文件

没看到题目n的上限是1000

。。。

我就是个渣渣。。。

然而最后ac了呀,ac了呀。。

位操作可以轻松用于2进制转换

#include<iostream>#include<cstdio>#include<cstring>int in[1002][5], in2[1002][40], ans1[40], ans2[40];int check(int n, int i);int tra(int* pt);using namespace std;int main(){int n;while (cin>>n){memset(in, 0, sizeof(in));memset(in2, 0, sizeof(in2));memset(ans1, 0, sizeof(ans1));memset(ans2, 0, sizeof(ans2));for (int i = 0; i < n; i++){scanf("%d.%d.%d.%d", &in[i][0], &in[i][1], &in[i][2], &in[i][3]);int m = 0;for (int mm = 0; mm < 4; mm++){for (int kk = 8; kk; kk--){if (in[i][mm] & 1 << (kk - 1))in2[i][m++] = 1;else in2[i][m++] = 0;}}}int an;for (an = 0; an < 32; an++){if (!check(n, an))break;}for (int i = 0; i < an; i++){ans2[i] = 1;}for (int i = an; i < 32; i++){ans2[i] = 0;}for (int i = 0; i < an; i++){ans1[i] = in2[0][i];}for (int i = an; i < 32; i++){ans2[i] = 0;}cout << tra(&ans1[0]) << '.' << tra(&ans1[8]) << '.' << tra(&ans1[16]) << '.' << tra(&ans1[24]) << '\n';cout << tra(&ans2[0]) << '.' << tra(&ans2[8]) << '.' << tra(&ans2[16]) << '.' << tra(&ans2[24]) << '\n';}return 0;}int check(int n, int i){int k = 1;for (int j = 0; j < n; j++){if (in2[0][i] != in2[j][i])k = 0;}return k;}int tra(int* pt){int k = 0;for (int i = 7;i>=0;i--){k += *(pt - i + 7) << i;}return k;}