提交记录 14180


用户 题目 状态 得分 用时 内存 语言 代码长度
andrewfeng router32. 测测你的路由器 Wrong Answer 25 30 s 31704 KB C++ 1.24 KB
提交时间 评测时间
2020-09-17 17:46:32 2020-09-17 17:47:08
#include "router.h"
#include <stdint.h>
#include <stdlib.h>
#include <stdio.h>
#include <vector>

std::vector<RoutingTableEntry> table;

int q_num;

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

int getSubnetMask(uint32_t a, uint32_t b) {
  int cnt = 0;
  for (int i = 0; i < 32; ++i) {
    if ( (a & 1) == (b & 1)) {
      a >>= 1;
      b >>= 1;
      cnt ++;
    } else break;
  }
  return cnt;
}

bool checkIpMatch(uint32_t a, uint32_t b, uint32_t len) {
  uint32_t subnetmask = 1;
  while (len > 1) {
    subnetmask = (subnetmask << 1) + 1;
    len--;
  }
  if ((a & subnetmask) == (b & subnetmask)) return true;
  // printf("a = %u, b = %u, [a] = %u, [b] = %u\n", a, b, (a & subnetmask), (b & subnetmask));
  return false;
}

unsigned query(unsigned addr) {
    bool find = false;
    unsigned ret_add = 0;
    int len = 0;
    for (int i = 0; i < table.size(); ++i) {
        if (checkIpMatch(addr, table[i].addr, table[i].len)) {
            find = true;
            if (getSubnetMask(addr, table[i].addr) > len) {
                len = getSubnetMask(addr, table[i].addr);
                ret_add = table[i].nexthop;
            }
        }
    }
    return ret_add;
}

CompilationN/AN/ACompile OKScore: N/A

Testcase #114.06 us24 KBAcceptedScore: 25

Testcase #215.804 ms30 MB + 984 KBWrong AnswerScore: 0

Testcase #330 s30 MB + 980 KBTime Limit ExceededScore: 0

Testcase #430 s30 MB + 980 KBTime Limit ExceededScore: 0


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