Uva 1590 IP Networks
这道题目是一道关于IP地址的题目,要深入理解这道题需要有一定的网络基础。
这道题目我第一次做的时候虽然也AC了,但代码写的比较复杂,不够精炼。近期刚刚参加了网络方面的培训,在有一定知识的基础上,又重写了这道题目。将很多步骤通过位运算(如移位,异或)进行了简化,在此贴一下前后两次的代码。
第二次代码:
#include <cstdio>
const int maxn = + ;
int IPs[maxn][];
int find_firstdiff(int m){
for(int i=;i<;i++)
for(int j=;j<m;j++)
if(IPs[j][i]!=IPs[][i])return i;
return ;
}
void printIP(int ser,int equ,int k){
int is_first=;
for(int i=;i<;i++){
if(is_first)printf(".");else is_first=;
if(i==k)printf("%d",equ);
else if (i<k) printf("%d",ser==-?IPs[][i]:ser);
else printf("");
}
printf("\n");
}
int main(){
int m;
while(scanf("%d",&m)!=EOF){
for(int i = ; i < m; i++)
scanf("%d.%d.%d.%d",&IPs[i][],&IPs[i][],&IPs[i][],&IPs[i][]);
int k =find_firstdiff(m);
int maxi=,mini=;
for(int i = ; i < m ; i++){
if(IPs[maxi][k] < IPs[i][k])maxi= i;
if(IPs[mini][k] > IPs[i][k])mini= i;
}
int c=,t=IPs[maxi][k];
if(maxi!=mini){
int d = IPs[maxi][k] ^ IPs[mini][k];
c=;
if(!d)c=;
else while(d){
d/=;
c++;
}
t= IPs[maxi][k] >>c <<c;
}
printIP(-,t,k);
printIP(,-(<<c),k);
}
return ;
}
第一次代码:
#include <cstdio>
#include <cstring>
#define maxn 1000+5
int s[maxn][];
void getBit(int *s,int num){
int n=;
while(num){
s[n--]=num%;
num/=;
} }
int main(){
int n;
while(scanf("%d",&n)==){
int netmask[]={};
int ip[]={};
int max,min;
for(int i=;i<n;i++){
scanf("%d.%d.%d.%d",&s[i][],&s[i][],&s[i][],&s[i][]);
}
int ok=,same=;
int k;
for(k=;k<;k++){
max=s[][k],min=s[][k];
for(int i=;i<n;i++){
if(i&&ok&&s[i][k]!=s[i-][k]){
ok=;same=k;
}
if(s[i][k]>max)max=s[i][k];
else if(s[i][k]<min)min=s[i][k];
}
if(!ok)break;
ip[k]=s[][k];
netmask[k]=;
}
int a[]={};
int c=max^min,sum1=,sum2=,sp=;
for(int i=;i<;i++){
if(c>=(<<i)&&c<(<<(i+))){
sp=i+;break;
}
}
getBit(a,min);
for(int i=;i<-sp;i++){
sum1=sum1+(a[i]*(<<(-i)));
sum2+=(*(<<(-i)));
}
ip[k]=sum1;
netmask[k]=sum2;
printf("%d.%d.%d.%d\n",ip[],ip[],ip[],ip[]);
printf("%d.%d.%d.%d\n",netmask[],netmask[],netmask[],netmask[]);
}
return ;
}
Uva 1590 IP Networks的更多相关文章
- uva 1590 - IP Networks(IP地址)
习题4-5 IP网络(IP Networks, ACM/ICPC NEERC 2005, UVa1590) 可以用一个网络地址和一个子网掩码描述一个子网(即连续的IP地址范围).其中子网 掩码包含32 ...
- UVA 1590 IP Networks JAVA
题意:输入m代表接下来的数据个数,计算接下来输入数据的网络掩码,和最小网络地址. 思路:①子网掩码:先将数据转为二进制,判断从哪一位开始有数据不一样,记下下标index,则子网掩码是index的前面是 ...
- UVa 1590 IP网络(简单位运算)
Description Alex is administrator of IP networks. His clients have a bunch of individual IP addres ...
- IP Networks UVA - 1590
Alex is administrator of IP networks. His clients have a bunch of individual IP addresses and he de ...
- 位运算基础(Uva 1590,Uva 509题解)
逻辑运算 规则 符号 与 只有1 and 1 = 1,其他均为0 & 或 只有0 or 0 = 0,其他均为1 | 非 也就是取反 ~ 异或 相异为1相同为0 ^ 同或 相同为1相异为0,c中 ...
- [刷题]算法竞赛入门经典(第2版) 4-5/UVa1590 - IP Networks
书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 代码:(Accepted,0 ms) //UVa1590 - IP Networks #include<iost ...
- Endless looping of packets in TCP/IP networks (Routing Loops)
How endless looping of packets in a TCP/IP network might occur? Router is a device used to interconn ...
- ease of rerouting traffic in IP networks without readdressing every host
https://en.wikipedia.org/wiki/Network_address_translation In the face of the foreseeable global IP a ...
- UVa 10253 - Series-Parallel Networks
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...
随机推荐
- zepto 基础知识(3)
41.height height() 类型:number height(value) 类型:self height(function(index,oldHeight){...}) 类型:self 获取 ...
- Shiro登录中遇到了问题
Shiro登录中遇到了问题 记录二次开发中遇到的问题, 如果系统学习Shiro, 推荐跟我学Shrio. 问题 项目是要将验证从本地改为LDAP验证, 但是因为jeecms的验证和授权中, 用户和角色 ...
- FirstBird--项目流程
创建项目(英文路径)—–img图片文件 创建窗体–设置大小(Basic—size–>320*480)—最大化功能禁用(Expert–>setResizable(false)) 添加面板–设 ...
- 分布式网上商城项目-dubbo搭建与初次使用错误
1.Spring-service启动失败 严重: Exception sending context initialized event to listener instance of class o ...
- Trie(字典树,前缀树)_模板
Trie Trie,又经常叫前缀树,字典树等等. Trie,又称前缀树或字典树,用于保存关联数组,其中的键通常是字符串.与二叉查找树不同,键不是直接保存在节点中,而是由节点在树中的位置决定.一个节点的 ...
- Arduino平台基于DbC的软件调试
基于LED和串口通信的DBC调试工具:HAssert --- Hyper LED/Serial Assert . 本文基于DbC思想 ,在Arduino平台上实现了两种断言显示方式---LED显示和串 ...
- python 排列组合
笛卡尔积(product): 假设集合A={a, b},集合B={0, 1, 2},则两个集合的笛卡尔积为{(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2) ...
- python七类之字典详解
一.字典 一.关键字:dict 1.字典是唯一的键值对数据,其表现形式: dic = {键:值},字典里的键必须保证是唯一的 2.键必须是不可变的数据类型: a.故列表是不能当键的 b.所 ...
- THINKPHP网站漏洞怎么修复解决
THINKPHP漏洞修复,官方于近日,对现有的thinkphp5.0到5.1所有版本进行了升级,以及补丁更新,这次更新主要是进行了一些漏洞修复,最严重的就是之前存在的SQL注入漏洞,以及远程代码执行查 ...
- yum方式安装及配置最新的mysql5.7
1.删除旧版本的MySQL rpm -qa|grep -i mysql 用命令yum -y remove mysql 2.下载新版安装源 下载mysql的repo源 这个安装的mysql5.7.20 ...