提交记录 14328
| 提交时间 |
评测时间 |
| 2020-09-23 12:41:31 |
2020-09-23 12:41:32 |
#include "router.h"
#include <arpa/inet.h>
#include <algorithm>
class RoutingTableEntry_z
{
public:
unsigned addr;
unsigned char len;
unsigned nexthop;
unsigned mask;
void set(RoutingTableEntry fr)
{
len = fr.len;
mask = 0xffffffffull << (32 - len);
nexthop = fr.nexthop;
addr = ntohl(fr.addr) & mask;
}
bool check(unsigned checkaddr)
{
if ((addr & mask) == (checkaddr & mask))
return true;
return false;
}
bool operator < (const RoutingTableEntry_z &a)
{
return addr < a.addr || addr == a.addr && len < a.len;
}
}table[830000];
int N;
void init(int n, int q, const RoutingTableEntry *a) {
N = n;
for (int i = 0; i < n; i++)
table[i].set(a[i]);
sort(table, table + N);
}
unsigned query(unsigned addr) {
addr = ntohl(addr);
int ret = -1;
for (int l = 0, r = N - 1; l <= r;)
{
int mid = (l + r) >> 1;
if (table[mid].check(addr))
{
ret = mid;
l = mid + 1;
}
else if (table[mid].addr < addr) l = mid + 1;
else r = mid - 1;
}
return ret == -1 ? 0 : table[ret].nexthop;
}
| Compilation | N/A | N/A | Compile Error | Score: N/A | 显示更多 |
Judge Duck Online | 评测鸭在线
Server Time: 2026-03-22 18:03:13 | Loaded in 1 ms | Server Status
个人娱乐项目,仅供学习交流使用 | 捐赠