字典树
Love_xyh
这个作者很懒,什么都没留下…
展开
-
CF566A Matching Names
将字符串的信息放到trie树以后,贪心地合并深度最深的姓名和笔名。若某深度中有一些姓名和笔名剩余,那么就将剩余的部分上传至深度减一的节点中去,企图与深度减一的姓名和笔名进行合并。#include <bits/stdc++.h>#define ll long longusing namespace std;const int N=8e5+5;int n;ll ans;int tot,ch[N][26];vector<int>cnt[N][2];string s;st原创 2020-10-06 21:21:30 · 771 阅读 · 1 评论 -
CF1416C XOR Inverse
考虑将每一个数二进制拆位。若a[i],a[j] (i<j)拆位后的最高位不同,那么当a[i]异或上x,假设最高位变成1时,很明显a[j]的该位会变成0,从而对逆序对产生一个贡献;而如果最高位变为0,a[j]的该位则变为1,那么就不会产生这一个贡献。因为最高位是具有最高话语权的,所以我们构造的x的最高位,需要使得a数组异或上x之后的逆序对尽可能小,所以就可以贪心地从高位到低位构造x的每一位是0还是1。我们可以建0/1trie树来维护插入的数的下标。之后计算每一位填0的贡献和填1的贡献,分治下去即可原创 2020-10-06 21:16:42 · 227 阅读 · 0 评论 -
#10051. 「一本通 2.3 例 3」Nikitosh 和异或
运用和例2相同的求法。#include <bits/stdc++.h>using namespace std;const int N=4e5+5,L=30;int tot,trie[N*L][2],cnt[N*L];int n,ans;int a[N],sum[N],l[N],r[N];inline void add(int now,int rt){ for (re...原创 2020-03-05 21:32:25 · 209 阅读 · 0 评论 -
#10049. 「一本通 2.3 例 1」Phone List
trie树简单题。需要注意一下数组范围,以及建树查找的顺序,以实现代码简洁明了。#include <iostream>#include <cstdio>#include <algorithm>#include <cmath>#include <vector>#include <queue>#include &l...原创 2020-03-05 19:30:24 · 152 阅读 · 0 评论 -
LOJ #10050.「一本通 2.3 例 2」The XOR Largest Pair
在字典树上贪心即可。#include <bits/stdc++.h>using namespace std;const int N=4e6+5;int n,x,ans,tot;int trie[N][2];//#define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1=...原创 2019-11-12 19:58:12 · 202 阅读 · 0 评论