提交记录 10314


用户 题目 状态 得分 用时 内存 语言 代码长度
saffah router32. 测测你的路由器 Runtime Error 25 4.309 s 1097308 KB C++11 1.27 KB
提交时间 评测时间
2019-09-17 16:05:38 2020-08-01 02:07:31
#include "router.h"
#include <bits/stdc++.h>
using namespace std;

struct MyEntry
{
    unsigned addr, len, nexthop;
};
bool operator<(const MyEntry &a, const MyEntry &b)
{
    if(a.addr != b.addr) return a.addr < b.addr;
    return a.len < b.len;
}

vector<pair<unsigned, unsigned>> V;
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((MyEntry) {a[i].addr, a[i].len, a[i].nexthop});
    S.insert((MyEntry) {0, 0, 0});
    for(auto it = S.begin(); it != S.end(); ++it)
    {
        auto jt = it; ++jt;
        // printf("S %u %u\n", it->addr, it->len);
        // printf("j %u %u\n", jt->addr, it->addr + pow2(32 - it->len) - 1u);
        if(jt != S.end() && jt->addr <= it->addr + pow2(32 - it->len) - 1u)
        {
            S.insert((MyEntry) {it->addr, it->len + 1, it->nexthop});
            S.insert((MyEntry) {it->addr | pow2(31 - it->len), it->len + 1, it->nexthop});
        }
        else
        {
            // printf("V %u %u\n", it->addr, it->nexthop);
            V.push_back(make_pair(it->addr, it->nexthop));
        }
    }
}

unsigned query(unsigned addr)
{
    return lower_bound(V.begin(), V.end(), make_pair(addr, ~0u))[-1].second;
}

CompilationN/AN/ACompile OKScore: N/A

Testcase #160.43 us48 KBAcceptedScore: 25

Testcase #24.283 s1071 MB + 604 KBRuntime ErrorScore: 0

Testcase #34.285 s1071 MB + 604 KBRuntime ErrorScore: 0

Testcase #44.309 s1071 MB + 604 KBRuntime ErrorScore: 0


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