提交记录 14201
| 提交时间 |
评测时间 |
| 2020-09-18 09:53:17 |
2020-09-18 09:54:24 |
#include "router.h"
#include <stdint.h>
#include <stdlib.h>
#include <arpa/inet.h>
struct Node {
RoutingTableEntry entry;
Node* prev;
Node* next;
Node() { prev = next = nullptr; }
} *root = new Node();
void update(bool insert, RoutingTableEntry entry) {
// TODO:
Node *cur = root;
while (true) {
if (cur->prev == nullptr && cur->next == nullptr)
break;
if (cur->entry.addr == entry.addr && cur->entry.len == entry.len) {
if (insert)
cur->entry = entry;
else {
cur->prev->next = cur->next;
if (cur->next)
cur->next->prev = cur->prev;
delete cur;
}
break;
}
if (!cur->next)
break;
cur = cur->next;
}
if (!cur->next && insert) {
cur->next = new Node();
cur->next->entry = entry;
cur->next->prev = cur;
}
}
void init(int n, int q, const RoutingTableEntry *a) {
for (int i = 0; i < n; i ++) {
update(true, a[i]);
}
}
unsigned query(unsigned addr) {
Node *target = nullptr;
uint32_t maxLen = 0;
Node *cur = root;
while (cur) {
if (cur->prev == nullptr) {
cur = cur->next;
continue;
}
uint32_t len = cur->entry.len;
if (ntohl(cur->entry.addr) >> (32 - len) == ntohl(addr) >> (32 - len)) {
if (len > maxLen) {
target = cur;
maxLen = len;
}
}
cur = cur->next;
}
if (target)
return target->entry.nexthop;
return 0;
}
| Compilation | N/A | N/A | Compile OK | Score: N/A | 显示更多 |
| Testcase #1 | 13.25 us | 24 KB | Accepted | Score: 25 | 显示更多 |
| Testcase #2 | 30 s | 16 MB + 696 KB | Time Limit Exceeded | Score: 0 | 显示更多 |
| Testcase #3 | 30 s | 16 MB + 692 KB | Time Limit Exceeded | Score: 0 | 显示更多 |
| Testcase #4 | 30 s | 16 MB + 696 KB | Time Limit Exceeded | Score: 0 | 显示更多 |
Judge Duck Online | 评测鸭在线
Server Time: 2026-03-22 23:16:07 | Loaded in 1 ms | Server Status
个人娱乐项目,仅供学习交流使用 | 捐赠