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;
}


目录
相关文章
|
数据采集 Web App开发 XML
干了这碗“美丽汤”,网页解析倍儿爽
HTML 文档本身是结构化的文本,有一定的规则,通过它的结构可以简化信息提取。于是,就有了lxml、pyquery、BeautifulSoup等网页信息提取库。一般我们会用这些库来提取网页信息。
|
Apache
好哥哥们求求了
为什么按教程来安装apache报错
45 0
|
前端开发 数据库
贼无聊的文章
贼无聊的文章
42 0
|
算法 C++ Python
【每日算法Day 107】面试必考:良心推荐,一题三解,不看后悔一辈子
【每日算法Day 107】面试必考:良心推荐,一题三解,不看后悔一辈子
123 0
|
算法 搜索推荐
对于蓝桥你不得不知的应试技巧
本文适用于蓝桥杯算法比赛赛前使用
315 0
对于蓝桥你不得不知的应试技巧
|
数据安全/隐私保护 索引 Python
这下女友总算满意了!
上次跟女友介绍了正则表达式的基本语法,以及在 Python 中如何使用。结果她还不满意,说传说中的正则表达式就这么简单?当然不是,今天就来跟大家一起介绍下正则表达式更多的使用技巧。
161 0
|
SQL 前端开发 JavaScript
我面试过的那些烂技术大哥
我并不是一个HR,可是我面试过很多人。有年轻的,有年长的,形形色色。 在不同的年纪和岗位上做面试官的内心感觉是不一样的。下面我来讲讲,我做面试官时的一些体验。
|
架构师
锅都不敢背,凭什么让大家跟着你干?
如何判断,一个老板值不值得追随呢?一句话,四个字:看老板人品。
563 0
|
前端开发 Java
【程序媛晒83行代码】程序媛,一枚喜欢自己写点宏文件的小姐姐
平时喜欢自己写点宏文件……最喜欢自己写的啦
2331 0