ZCMU - 1783: 秋实大哥与快餐店

简介: ZCMU - 1783: 秋实大哥与快餐店

题目链接:点击打开链接


题目大意:略。


解题思路:数组大小定义为:2e6+10,数组大小与 n,m 是无关的,只与 cid 的最大值相关,算出对应的最多位数,比如:此题目中 cid 最大值为 1000000,对应的二进制位数最多 20位,根据完全二叉树的结点公式,最多 2^21-1。因为这里是边作为 二进制位,结点作为 链接下一个结点的下标。又因为题目说了是 cid^pid 最大的数,所以根据异或相同则0,不同则1的性质可知,只要是高位二进制各异就是最大的数了,所以 query 函数先尽量找与自己不一样的二进制,实在找不到的话,再选择自己的二进制位。


AC 代码

#include<bits/stdc++.h>
#include<cmath>
#define mem(a,b) memset(a,b,sizeof a);
#define INF 0x3f3f3f3f
using namespace std;
typedef long long ll;
const int maxn=1e5+10;
int n,m,cnt;
int trie[21*maxn][2];
int val[21*maxn];
void init()
{
    cnt=0;
    mem(val,0); mem(trie,0);
}
void add(int cid)
{
    int rt=0,id;
    for(int i=19;i>=0;i--) // 从 19 开始是因为从最高位开始操作
    {
        id=(cid>>i)&1;
        if(!trie[rt][id]) trie[rt][id]=++cnt; // trie[rt][id] 不能等于 0,以免与初始化混淆
        rt=trie[rt][id];
    }
    val[rt]=cid;
}
int query(int pid)
{
    int rt=0,id;
    for(int i=19;i>=0;i--) // 同上
    {
        id=(pid>>i)&1;
        if(trie[rt][id^1]) rt=trie[rt][id^1];
        else rt=trie[rt][id];
    }
    return val[rt];
}
int main()
{
    while(~scanf("%d",&n))
    {
        init();
        int cid;
        for(int i=0;i<n;i++)
        {
            scanf("%d",&cid);
            add(cid);
        }
        scanf("%d",&m);
        int op,id;
        for(int i=0;i<m;i++)
        {
            scanf("%d%d",&op,&id);
            if(op) printf("%d\n",query(id));
            else add(id);
        }
    }
    return 0;
}


目录
相关文章
|
存储 安全 Python
python多线程------>这个玩意很哇塞,你不来看看吗
python多线程------>这个玩意很哇塞,你不来看看吗
|
前端开发 数据库
贼无聊的文章
贼无聊的文章
45 0
|
SQL 前端开发 JavaScript
前端VS后端:这个锅你背不背!
前端VS后端:这个锅你背不背!
67 0
|
消息中间件 存储 缓存
你管这“破玩意儿”叫锁
你管这“破玩意儿”叫锁
你管这“破玩意儿”叫锁
|
SQL 前端开发 JavaScript
我面试过的那些烂技术大哥
我并不是一个HR,可是我面试过很多人。有年轻的,有年长的,形形色色。 在不同的年纪和岗位上做面试官的内心感觉是不一样的。下面我来讲讲,我做面试官时的一些体验。
|
架构师
锅都不敢背,凭什么让大家跟着你干?
如何判断,一个老板值不值得追随呢?一句话,四个字:看老板人品。
565 0
|
安全 物联网 数据安全/隐私保护
溜着弯儿就能黑掉身边的人,他是怎么做到的?
本文讲的是溜着弯儿就能黑掉身边的人,他是怎么做到的?,近几年,物联网设备越来越普及,办公室和家里都已经配备了大量物联网设备,比如说,智能打印机、咖啡机、智能遥控器等。开发出这些智能设备的初衷都是非常美好的——解放人类的双手,只要连接了互联网,只要轻轻按下按钮即可执行操作。
1483 0