提交记录 14174


用户 题目 状态 得分 用时 内存 语言 代码长度
chrogeek router32. 测测你的路由器 Runtime Error 25 18.3 ms 20228 KB C++ 1.12 KB
提交时间 评测时间
2020-09-17 09:21:51 2020-09-17 09:21:56
#include "router.h"

const int maxn = 827090;
const int maxs = maxn << 1;

int nodes = 1;
int next[maxn][2];
bool isEntry[maxs];
unsigned nexthop[maxs];

unsigned toLittleEndian(unsigned bigEndian) {
	return ((bigEndian & 0xffu) << 24) | ((bigEndian & 0xff00u) << 8) | ((bigEndian & 0xff0000u) >> 8) | ((bigEndian & 0xff000000u) >> 24);
}

void insert(const RoutingTableEntry &entry) {
	const unsigned addr = toLittleEndian(entry.addr), len = entry.len;
	int o = 0;
	for (unsigned i = 0; i < len; ++i) {
		const int digit = !!(addr & (1u << (31 - i)));
		if (!next[o][digit]) {
			next[o][digit] = nodes;
			isEntry[nodes] = false;
			++nodes;
		}
		o = next[o][digit];
	}
	isEntry[o] = true;
	nexthop[o] = entry.nexthop;
}

void init(int n, int q, const RoutingTableEntry *a) {
	for (int i = 0; i < n; ++i) {
		insert(a[i]);
	}
}

unsigned query(unsigned addr) {
	addr = toLittleEndian(addr);
	int o = 0;
	unsigned ans = 0;
	for (int i = 0; i < 32; ++i) {
		const int digit = !!(addr & (1u << (31 - i)));
		if (!next[o][digit]) {
			return ans;
		} else {
			o = next[o][digit];
			if (isEntry[o]) {
				ans = nexthop[o];
			}
		}
	}
	return ans;
}

CompilationN/AN/ACompile OKScore: N/A

Testcase #114.26 us36 KBAcceptedScore: 25

Testcase #218.3 ms19 MB + 772 KBRuntime ErrorScore: 0

Testcase #318.196 ms19 MB + 772 KBRuntime ErrorScore: 0

Testcase #418.295 ms19 MB + 772 KBRuntime ErrorScore: 0


Judge Duck Online | 评测鸭在线
Server Time: 2026-03-23 01:02:35 | Loaded in 1 ms | Server Status
个人娱乐项目,仅供学习交流使用 | 捐赠