题目描述

In the computer network, a Router is a device which finds an optimal way to transmit the datagrams passing through it to it's destination efficiently. To accomplish this task, the Router maintains a Routing Table.

The Routing Table stores a variety of relevant data about transmission path. In other words, the information contained in the table determines the forwarding strategy of a datagram.

Normally, the information in the Routing Table for each routing table entry is:

First the destination IP Address, followed by the number of bits of the sub-net mask, and finally the forwarded network port number of the destination network.

For each datagram passing through it, the Router compares the datagram’s destination IP Address with the information of routing table entry, if the network number of the destination IP Address is equals to the network number stored in the routing table entry,
then the datagram is forwarded to the corresponding port.

Now, give you the Routing Table stored in the Router. Then for each datagram travel through this Router, give you it's destination IP Address, please return which network port will the datagram be forwarded to.ou

You will get some help:baike.baidu.com/link

输入

The first line of input contains an integer T, indicating the number of test cases (T ≤ 20).

The first line of each test case contains two integers N and M, represent the number of entries in the Routing Table and the number of datagram passing through the Router, N and M are all less than 100000. Nest N lines each line represent a routing table entry,
the format of input is IP Address/bits of sub-net mask and forwarded port number. And next M lines each line contain a destination IP Address. Please refer to the sample input for more detail.

输出

For each destination IP Address, please output the port number that the Router should forward. If there are many entry both match to this destination IP Address, please output the one that has the longest bits of sub-net mask. If there are also many entry match,
please output the one that has the smallest port number. If there are none entry match, please output the default port 65535.

样例输入

1
4 4
192.168.0.0/16 1234
192.168.1.0/24 1235
192.168.1.0/23 1233
192.168.0.0/23 1236
192.168.2.0
192.168.0.0
192.168.1.0
255.255.255.255

样例输出

1234
1233
1235

65535

第一次在ACM的题中手打哈希表,好高兴,一次成功了.

哈希表实现要领

1.哈希表中每个元素都是指针,指向某元素.

2.很像链式前向星的一种结构
#include<iostream>
#include<string.h>
#include<math.h>
#include<algorithm>
using namespace std;
const int maxn = 1e5 + 7;
const int len = maxn * 10;
const int P = 1e9 + 7;
struct Node{
	int ip, bits,to;
	int next;
}mem[maxn];
int mi;
struct Hash{
	int a[len];
	void init(){ memset(a, 0, sizeof(a)); }
	void insert(int ip, int bits,int to){
		int pos = abs((ip*17)%P+13*bits)%len;
		for (int i = a[pos]; i; i = mem[i].next){
			if (mem[i].ip == ip&&mem[i].bits == bits){
				mem[i].to = min(mem[i].to, to);
				return;
			}
		}
		mem[++mi].ip = ip, mem[mi].bits = bits, mem[mi].to = to, mem[mi].next = a[pos], a[pos] = mi;
	}
	int get(int ip, int bits){
		int pos = abs((ip * 17) % P + 13 * bits) % len;
		for (int i = a[pos]; i; i = mem[i].next){
			if (mem[i].ip == ip&&mem[i].bits == bits)return mem[i].to;
		}
		return -1;
	}
}dic;
int mask[33];
void init(){
	mask[32] = ~0;
	for (int i = 31; i >= 0; i--)mask[i] = mask[i + 1] << 1;
}
int read(){
	int a, b, c, d;
	scanf("%d.%d.%d.%d", &a, &b, &c, &d);
	int ans = (a << 24) | (b << 16) | (c << 8) | d;
	return ans;
}
int main(){
	freopen("in.txt", "r", stdin);
	init();
	int T; scanf("%d", &T);
	while (T--){
		int N, M; scanf("%d%d", &N, &M);
		dic.init();
		mi = 0;
		while (N--){
			int bits,to;
			int ip = read(); scanf("/%d%d", &bits,&to);
			ip &= mask[bits];
			dic.insert(ip, bits, to);
		}
		while (M--){
			int ip = read();
			for (int i = 32; i >= 0; i--){
				ip&=mask[i];
				int ans = dic.get(ip, i);
				if (ans ^-1){
					printf("%d\n", ans); goto over;
				}
			}
			printf("65535\n");
		over:;
		}
	}
	return 0;
}

东大OJ-1588: Routing Table的更多相关文章

  1. 东大OJ 2SAT 异或

    看了十年才懂懂了十年才会会了十年才会写写了十年才写完写完了十年才能改对 #include<stdio.h> #include<string.h> struct res{ int ...

  2. 理解 OpenStack 高可用(HA)(3):Neutron 分布式虚拟路由(Neutron Distributed Virtual Routing)

    本系列会分析OpenStack 的高可用性(HA)概念和解决方案: (1)OpenStack 高可用方案概述 (2)Neutron L3 Agent HA - VRRP (虚拟路由冗余协议) (3)N ...

  3. A Quick Introduction to Linux Policy Routing

    A Quick Introduction to Linux Policy Routing 29 May 2013 In this post, I’m going to introduce you to ...

  4. 东大OJ-Max Area

    1034: Max Area 时间限制: 1 Sec  内存限制: 128 MB 提交: 40  解决: 6 [提交][状态][讨论版] 题目描述 又是这道题,请不要惊讶,也许你已经见过了,那就请你再 ...

  5. Routing in ASP.NET Web API和配置文件的设定读取

    Routing Tables In ASP.NET Web API, a controller is a class that handles HTTP requests. The public me ...

  6. ASP.NET Web API中的Routing(路由)

    [译]Routing in ASP.NET Web API 单击此处查看原文 本文阐述了ASP.NET Web API是如何将HTTP requests路由到controllers的. 如果你对ASP ...

  7. Study之6 Neutron(配置使用 Routing)-devstack

    ●Neutron 的路由服务是由 l3 agent 提供的. 除此之外,l3 agent 通过 iptables 提供 firewall 和 floating ip 服务. l3 agent 需要正确 ...

  8. Routing Manager for WCF4 z

    http://www.codeproject.com/Articles/77198/Routing-Manager-for-WCF Download source Contents Features ...

  9. Classless Interdomain Routing (CIDR)

    IP Address Problems IP Address Exhaustion Class A, B, and C address structure inefficient Class B to ...

随机推荐

  1. ixgbe 82599 固定源与目标, UDP, 64字节小包, 1488w pps 单核CPU软中断sirq 100%

    ixgbe 82599 固定源与目标, UDP, 64字节小包, 1488w pps 单核CPU软中断sirq 100% 注: 测试使用, 正常应用不要开启 五元组不同, 开启ntupleethtoo ...

  2. NServiceBus 更换服务名及队列名称

    可以通过起动时的参数处理 NServiceBus.Host.exe /serviceName:”服务名称” /endpointName:”默认队列名称”

  3. [To be translated] Nova:libvirt image 的生命周期

    翻译自:http://www.pixelbeat.org/docs/openstack_libvirt_images/ The main stages of a Virtual Machine dis ...

  4. What makes an excellent front-end developer?(for my English speech)

    What makes an excellent front-end developer? Let me please start this talking by saying that what is ...

  5. AC日记——行程长度编码 openjudge 1.7 32

    32:行程长度编码 总时间限制:  1000ms 内存限制:  65536kB 描述 在数据压缩中,一个常用的途径是行程长度压缩.对于一个待压缩的字符串而言,我们可以依次记录每个字符及重复的次数.这种 ...

  6. Android驱动入门-LED--HAL硬件抽象层程序设计①

    硬件平台: FriendlyARM Tiny4412 Cortex-A9 操作系统: UBUNTU 14.04 LTS 时间:2016-09-21  16:15:26 设计HAL硬件抽象层程序,则需要 ...

  7. 网络流-最大流问题 ISAP 算法解释(转自Renfei Song's Blog)

    网络流-最大流问题 ISAP 算法解释 August 7, 2013 / 编程指南 ISAP 是图论求最大流的算法之一,它很好的平衡了运行时间和程序复杂度之间的关系,因此非常常用. 约定 我们使用邻接 ...

  8. android系统架构解析

    以上是我在这个课题下的一些参考博客或者网页链接.里面有对于android架构的一些较好的分析理解,接下来是楼主在阅读后自己的一些整理. Android采用层次化系统架构,官方公布的标准架构如下图所示. ...

  9. 关于webpack.optimize.CommonsChunkPlugin的使用二

    Note:当有多个入口节点的时候,只有所有入口节点都引入了同一个模块的时候,webpack.optimize.CommonsChunkPlugin才会将那个模块提取出来,如果其中一个入口节点没有引入该 ...

  10. Javascript备忘复习笔记1

    一.字符串操作 1.大小写 var s = "hello"; undefined g = s.toUpperCase(); "HELLO" g; "H ...