提交记录 14201


用户 题目 状态 得分 用时 内存 语言 代码长度
Ramph router32. 测测你的路由器 Time Limit Exceeded 25 30 s 17080 KB C++ 1.39 KB
提交时间 评测时间
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;
}

CompilationN/AN/ACompile OKScore: N/A

Testcase #113.25 us24 KBAcceptedScore: 25

Testcase #230 s16 MB + 696 KBTime Limit ExceededScore: 0

Testcase #330 s16 MB + 692 KBTime Limit ExceededScore: 0

Testcase #430 s16 MB + 696 KBTime Limit ExceededScore: 0


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