提交记录 10364


用户 题目 状态 得分 用时 内存 语言 代码长度
saffah router32. 测测你的路由器 Accepted 100 406.272 ms 63472 KB C++11 1.53 KB
提交时间 评测时间
2019-09-17 20:16:46 2020-08-01 02:13:26
#include "router.h"
#include <bits/stdc++.h>
#include <arpa/inet.h>
using namespace std;

struct MyEntry
{
    unsigned len, addr, nexthop;
};
bool operator<(const MyEntry &a, const MyEntry &b)
{
    return *(unsigned long long *) &a < *(unsigned long long *) &b;
}

struct VEntry
{
    unsigned addr, nexthop;
};
bool operator<(const VEntry &a, const VEntry &b)
{
    return a.addr < b.addr;
}

vector<VEntry> V;
const int FAST_OFFSET = 18;
VEntry *fastV[1 << FAST_OFFSET | 1];
set<MyEntry> S;

unsigned pow2(unsigned x)
{
    if(x >= 32) return 0;
    return 1u << x;
}

void init(int n, int q, const RoutingTableEntry *a)
{
    for(int i = 0; i < n; i++) S.insert(S.end(), (MyEntry) {a[i].len, htonl(a[i].addr), a[i].nexthop});
    S.insert(S.begin(), (MyEntry) {0, 0, 0});
    for(auto it = S.begin(); it != S.end();)
    {
        auto jt = it; ++jt;
        if(jt != S.end() && jt->addr <= it->addr + pow2(32 - it->len) - 1u)
        {
            S.insert(it, (MyEntry) {it->len + 1, it->addr, it->nexthop});
            S.insert(it, (MyEntry) {it->len + 1, it->addr | pow2(31 - it->len), it->nexthop});
        }
        else V.push_back((VEntry) {it->addr, it->nexthop});
        jt = it; ++jt;
        S.erase(it); it = jt;
    }
    for(int i = 0; i <= (1 << FAST_OFFSET); ++i) fastV[i] = lower_bound(V.data(), V.data() + V.size(), (VEntry) {i << (32 - FAST_OFFSET), 0});
}

unsigned query(unsigned addr)
{
    addr = htonl(addr);
    int tm = addr >> (32 - FAST_OFFSET);
    return lower_bound(fastV[tm], fastV[tm + 1], (VEntry) {addr + 1, 0})[-1].nexthop;
}

CompilationN/AN/ACompile OKScore: N/A

Testcase #11.021 ms2 MB + 40 KBAcceptedScore: 25

Testcase #2342.007 ms61 MB + 1008 KBAcceptedScore: 25

Testcase #3368.831 ms61 MB + 1008 KBAcceptedScore: 25

Testcase #4406.272 ms61 MB + 1008 KBAcceptedScore: 25


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