求序列完美度(trie+贪心)】的更多相关文章

题目链接: 求序列完美度 题目描述 给出由n个数组成的序列s,规定第i个数s[i]到第j个数s[j]组成的子序列的完美度为该子序列中所有数的和与任意一个不在该子序列中的数进行异或运算得到的值中的最大值,即perfect(s[i]~s[j])=max(sum(s[i]~s[j])^x),x为非子序列的数.现求完美度最大的子序列与它的完美度是多少 输入 第一行输入一个数T表示共有T组数据 输入一个数n表示序列有n个数 接下来有n个数,角标为1-n,表示序列的组成 1<=T<=100 3<=n…
/*===================================== 求序列中的众数 总时间限制: 1000ms 内存限制: 65536kB 描述 输入一个长度为N的整数序列 (不多于128个整数),每个整数的范围在[-10^52,10^52],计算这个序列的众数. 众数是指出现次数最多的那个数. 如果有多个数出现的次数都达到最多,则取在原序列最先出现的数为众数:如果所有的数都相等,则返回"no". 输入 第一行为序列长度N. 然后是N个数据,每一个数的范围都是在[-10^5…
/* * Main.c * C10-循环-10. 求序列前N项和 * Created on: 2014年7月30日 * Author: Boomkeeper *******部分通过******* */ #include <stdio.h> int main(void) { double sum = 0.0; //记录前N项和 ,denominator = ; //分子分母 int N; //题目中的N int i;//循环使用 ; scanf("%d", &N);…
题目链接:https://vjudge.net/problem/POJ-2182 题意:有n头牛,从1..n编号,乱序排成一列,给出第2..n个牛其前面有多少比它编号小的个数,记为a[i],求该序列的完整编号ans[i]. 思路:最近几天开始学线段树,加油!!我们从序列最后一个开始,则可以确定ans[n]=a[n]+1,然后把编号a[n]+1删除,继续判断倒数第二个...而这一求序列中第k小的数可通过线段树来完成.线段树结点包含l(区间左端点),r(区间右端点),len(区间剩余的编号个数).每…
hdu 4825 Xor Sum(trie+贪心) 刚刚补了前天的CF的D题再做这题感觉轻松了许多.简直一个模子啊...跑树上异或x最大值.贪心地让某位的值与x对应位的值不同即可. #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #define CLR(a,b) memset((a),(b),sizeof(…
HDU2037 今年暑假不AC  贪心算法 大意: 每次测试数据输入一个n,然后输入n对的电视节目播放时间:开始时间及结束时间, 求这个人能看的最多的完整的节目数. 解题思路: 对于这道解题,是对每个节目的结束时间排序,目的是使剩余时间留下,再判断还能看几个节目.对节目时间的排序结束后,依次判断,这次要看的节目的开始时间是否大于上次看的节目的结束时间,若是大于,则这个节目时可以完整观看的,若是小于则是不能完整观看的,所以跳到下一个节目继续判断 . 例子: 12 1 3 3 4 0 7 3 8 1…
传送门 题意: 给你n个字符串,不同的排列有不同的代价,代价按照如下方式计算(字符串s的位置为x): 1.排在s后面的字符串有s的后缀,则代价为n^2: 2.排在s前面的字符串有s的后缀,且没有排在s后面的s的后缀,则代价为x-y(y为最后一个与s不相等的后缀的位置): 3.s没有后缀,则代价为x. 求最小代价和. 思路:显然把所有字符串倒序建一个trietrietrie树出来. 然后在上面贪心每次走sizesizesize最小的子树最优. 代码: #include<bits/stdc++.h>…
题目大意:给定 N 个数,求这 N 个数中任选两个数进行异或运算,求最大的异或和是多少. 一个 int 类型的整数,可以看作一个长度为32位的字符串,异或运算不像加法,最大值不一定是由两个较大值得到. 在这里,可以采取一种树上贪心操作,即:将每个整数按照位的顺序从高位插入一棵 trie 树,并且在每次查询时,尽量走查询数字当前位的相反位,并累加每一位的贡献即可. 代码如下 #include <bits/stdc++.h> using namespace std; const int maxn=…
#194. 「2019冬令营提高组」密文 设$s[i]$表示前$i$个密文的异或和 容易发现,只要知道$s[0]~s[n](s[0]=0)$就可以知道每一位的值. 转化一下,就变成了在完全图上求最小生成树,边权是$[l,r]$段的异或和 然鹅数据范围太大了...... 但是边权是特殊的异或和! 于是我们用一棵trie维护边权,每次用贪心的思想 对于树上的某点,用最小的代价合并代表左右两个子树的连通块. 合并时代价的计算直接暴力就好辣 可以证明每次的连通块数都减少一半 即复杂度为$O(nlognl…
题目大意:需要维护一种数据结构,支持以下三种操作:插入一个数,删除一个数,查询该数据结构中的数异或给定数的最大值. 题解:如果没有删除操作就是一个标准的 Trie 上贪心求最大异或和问题.现在需要支持删除操作,因此,在树上每个节点维护一个额外的标记,表示有多少个数的某一位经过当前节点.插入操作依然只需修改树上一条链,而删除一个数时,同样需要将这条链上的标记值减 1 即可.这时便可以根据经过的每个点标记值是否为 0 进行贪心操作. 代码如下 #include <bits/stdc++.h> us…