BZOJ.4245.[ONTAK2015]OR-XOR(贪心)】的更多相关文章

4245: [ONTAK2015]OR-XOR Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 492  Solved: 269[Submit][Status][Discuss] Description 给定一个长度为n的序列a[1],a[2],...,a[n],请将它划分为m段连续的区间,设第i段的费用c[i]为该段内所有数字的异或和,则总费用为c[1] or c[2] or ... or c[m].请求出总费用的最小值.   Input 第一行…
题目链接 从高到低位贪心,判断答案的该位能否为0. 求一个前缀和sum.对于最高位,答案的这一位可以为0当且仅当至少存在m个位置满足sum[i]在这一位上为0. 注意sum[n]这一位必须为0. 如果确定高位为0,则高位为1的sum[i]就不能再选(即不能做右端点). 这样求一遍所有位即可.复杂度\(O(n\log a)\). //5508kb 768ms #include <cstdio> #include <cctype> #include <algorithm>…
知道按位贪心但是不知道怎么贪-- 求一个a的异或前缀和s,然后按位从大到小贪心,ans的当前位能为0的条件是s中有>=m个位置这一位为0且没有flag,并且s[n]的这一位为0 如果符合要求,那么把s中这一位不为0的位置都打上flag,表示这些点不能作为区间断点了(如果作为断点的话这一位就要为1了,显然不优) 否则只能ans|=(1ll<<i)了 #include<iostream> #include<cstdio> using namespace std; co…
Description 给定一个长度为n的序列a[1],a[2],...,a[n],请将它划分为m段连续的区间,设第i段的费用c[i]为该段内所有数字的异或和,则总费用为c[1] or c[2] or ... or c[m].请求出总费用的最小值. Input 第一行包含两个正整数n,m(1<=m<=n<=500000),分别表示序列的长度和需要划分的段数. 第一行包含n个整数,其中第i个数为a[i](0<=a[i]<=10^18). Output 输出一个整数,即总费用的最…
4245: [ONTAK2015]OR-XOR https://www.lydsy.com/JudgeOnline/problem.php?id=4245 /* 要求分成m份,总价值为a1|a2|a3...,总价值最小,ai为第i份的异或和. 首先预处理异或和. 根据贪心的思想,高位最好是0. 于是从高位往低位枚举,看一下每一位是否可以为0. 如果当前这一位可以为0,每一份的(异或和)(或)起来都是0,所以每一份异或和的这一位不能有1 那么一个点可以成为分割点当且仅当这个点的sum值的这一位为0…
题意 给定一个长度为\(n(1 \le n \le 500000)\)的序列\(a_i(0 \le a_i \le 10^{18})\),将它划分为\(m(1 \le m \le n)\)段连续的区间,设第\(i\)段的费用\(c_i\)为该段内所有数字的异或和,则总费用为\(c_1 \ or \ c_2 \ or \ ... \ or \ c_m\).请求出总费用的最小值. 分析 这种题就考虑每一位. 题解 首先求出前缀和\(s_i\) 贪心地从大位扫向小位,我们只需要判断当前位\(i\)能否…
Code: #include <bits/stdc++.h> #define setIO(s) freopen(s".in", "r", stdin) #define maxn 4000000 using namespace std; int n, m, tot; int arr[maxn], height[maxn], A[maxn]; namespace SA { int rk[maxn], tp[maxn], sa[maxn], tax[maxn]…
[题意] 给定两个字符串,求二路归并后最小字典序的字符串. [思路] 连接两个字符串后求出rank数组.通过比较rank数组进行二路归并. [代码] #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define FOR(a,b,c) for(int a=b;a<=c;a++) using namespace std; typedef long long…
同样是今天做bzoj时做到的,感觉能力范围之内的就做了,也是蛮简单的 1034: [ZJOI2008]泡泡堂BNB Time Limit: 10 Sec Memory Limit: 162 MB Submit: 1876 Solved: 993 [Submit][Status][Discuss] Description 第XXXX届NOI期间,为了加强各省选手之间的交流,组委会决定组织一场省际电子竞技大赛,每一个省的代表队由n名选手组成,比赛的项目是老少咸宜的网络游戏泡泡堂.每一场比赛前,对阵双…
http://www.lydsy.com/JudgeOnline/problem.php?id=2115 题意:给出一个n个点m条边的无向连通边加权图,求1-n的某条路径使得异或值最大(可以重复点可以重复边)(n<=50000, m<=100000) #include <bits/stdc++.h> using namespace std; const int N=50005, M=100015; typedef long long ll; struct E { int next,…
4276: [ONTAK2015]Bajtman i Okrągły Robin 题意:\(n \le 5000\)个区间\(l,r\le 5000\),每个区间可以选一个点得到val[i]的价值,每个点最多选1次,求最大价值 有个显然的\(n^2\)条边的费用流建图(二分图最大权匹配),每个区间一个点连(1,val[i])的边,区间向区间内每个点连边,每个点向t连容量为1的边 提前知道这是线段树优化建图,所以想了一个做法:线段树每个节点拆点限制流量,每个节点都向t连边 其实不用这么麻烦,直接线…
BZOJ 洛谷 \(Description\) 给定\(n\)个区间\([L_i,R_i]\),要选出尽量多的区间,并满足它们互不相交.求最多能选出多少个的区间以及字典序最小的方案. \(n\leq2\times10^5\). \(Solution\) 第一问随便做. 对于第二问,从小到大枚举区间\([l_i,r_i]\),我们需要判断此时能不能选\([l_i,r_i]\). 在之前选的区间中,设在\(i\)左边离\(l_i\)最近的区间的右端点是\(L\),在\(i\)右边离\(i\)最近的左…
相传,在远古时期,位于西方大陆的 Magic Land 上,人们已经掌握了用魔法矿石炼制法杖的技术.那时人们就认识到,一个法杖的法力取决于使用的矿石.一般地,矿石越多则法力越强,但物极必反:有时,人们为了获取更强的法力而使用了很多矿石,却在炼制过程中发现魔法矿石全部消失了,从而无法炼制出法杖,这个现象被称为“魔法抵消” .特别地,如果在炼制过程中使用超过一块同一种矿石,那么一定会发生“魔法抵消”.   后来,随着人们认知水平的提高,这个现象得到了很好的解释.经过了大量的实验后,著名法师 Dmit…
题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1216 题目大意是给了n个数,然后取出两个数,使得xor值最大. 首先暴力枚举是C(n, 2),显然不行. 考虑每一个数,显然,从最高位开始,如果它能和某一个数xor,让最高位为1,效果肯定是最佳的.其次考虑次高位,以此类推. 简单说,就是x的某一位,如果能找到某些数与x这一位xor为1,则考虑这些数,然后比较下一位:否则,就直接考虑下一位.起始从最高位开始考虑. 在这种贪心策略下,用字…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1119 https://www.lydsy.com/JudgeOnline/problem.php?id=1697 原序列到目标序列的置换,可以找出一些循环节: 发现如果按顺序把一个循环节换下来,如果长度为 l,则第一个数被算了 l-1 次,其它数都是 1 次: 为了代价最小,还可以利用循环节外面的数,做法就是先把它换进来,然后让它算 l-1 次,再换出去: 贪心地取个 min 即可:原来还…
题目链接 题意 中文题意 思路 线性基学习 题目要求选价值最大的并且这些数异或后不为0,可以考虑线性基的性质:线性基的任意一个非空集合XOR之和不会为0.那么就可以贪心地对价值从大到小排序,加入线性基的数就加上它的价值,最终线性基里面的元素的价值就是最终答案. #include <bits/stdc++.h> using namespace std; typedef long long LL; typedef pair<int, int> pii; const int INF =…
The xor-longest Path Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 6455 Accepted: 1392 Description In an edge-weighted tree, the xor-length of a path p is defined as the xor sum of the weights of edges on p: {xor}length(p)=\oplus{e \in p…
//bzoj上的题面太丑了,导致VJ的题面也很丑,于是这题用洛谷的题面 题面描述 XOR(异或)是一种二元逻辑运算,其运算结果当且仅当两个输入的布尔值不相等时才为真,否则为假. XOR 运算的真值表如下(\(1\) 表示真, \(0\) 表示假): 而两个非负整数的 XOR 是指将它们表示成二进制数,再在对应的二进制位进行 XOR 运算. 譬如 \(12\) XOR \(9\) 的计算过程如下: 故 \(12\) XOR \(9\) = 5$. 容易验证, XOR 运算满足交换律与结合律,故计算…
原题代号:BZOJ 1029 原题链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1029 原题描述: 建筑抢修 小刚在玩JSOI提供的一个称之为“建筑抢修”的电脑游戏:经过了一场激烈的战斗,T部落消灭了所有z部落的入侵者.但是T部落的基地里已经有N个建筑设施受到了严重的损伤,如果不尽快修复的话,这些建筑设施将会完全毁坏.现在的情况是:T部落基地里只有一个修理工人,虽然他能瞬间到达任何一个建筑,但是修复每个建筑都需要一定的时间.同时,修理工人…
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1029 小刚在玩JSOI提供的一个称之为“建筑抢修”的电脑游戏:经过了一场激烈的战斗,T部落消灭了所有z部落的入侵者.但是T部落的基地里已经有N个建筑设施受到了严重的损伤,如果不尽快修复的话,这些建筑设施将会完全毁坏.现在的情况是:T部落基地里只有一个修理工人,虽然他能瞬间到达任何一个建筑,但是修复每个建筑都需要一定的时间.同时,修理工人修理完一个建筑才能修理下一个建筑,不能同时修理多个建…
[ZJOI2008]泡泡堂BNB Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/problem.php?id=1034 Description 第XXXX届NOI期间,为了加强各省选手之间的交流,组委会决定组织一场省际电子竞技大赛,每一个省的代表队由n名选手组成,比赛的项目是老少咸宜的网络游戏泡泡堂.每一场比赛前,对阵双方的教练向组委会提交一份参赛选手的名单,决定了选手上场的顺序,一经确定…
把图反向,然后按拓扑序贪心地从大到小选, 最后输出.set比priority_queue慢... --------------------------------------------------------------------- #include<cstdio> #include<cstring> #include<algorithm> #include<queue>   using namespace std;   const int maxn =…
整整10个月后第二次搞这个问题才搞懂........第一次还是太随意了. 解题思路: 经过打表可得规律答案要么是0 要么是2的N次 - 1 要得到最大的XOR值,其值一定是2的N次 - 1 即在 l 和 r 的二进制中,从左到右遍历过去,如果碰到 (2 ^ i) & l 为 1 , (2 ^ i) & r 为 0 即在 l 和 r 之间一定存在 形如 10+ 和01+这样的数. 则可说明在[l , r]中存在 1000000000 和 0111111111 可得到最大XOR值为2的N次 -…
BZOJ 洛谷 首先旗杆的顺序没有影响,答案之和在某一高度帆的总数有关.所以先把旗杆按高度排序. 设高度为\(i\)的帆有\(s_i\)个,那么答案是\(\sum\frac{s_i(s_i-1)}{2}\),显然我们要让每一行(高度)的帆数都尽量少. 然后可以想到二分,二分每一行的帆数不超过\(mid\)是否可行.显然我们从最高的旗杆的最大高度部分往下填就可以了,要用线段树维护.复杂度\(O(n\log^2n)\). 但是不需要这个二分啊,每次找到\(s_i\)最小的位置,把\(k\)个帆填进去…
BZOJ LOJ 洛谷 \(Kelin\)写的挺清楚的... 要求如果\(a_{p_j}=p_k\),\(k\lt j\),可以理解为\(k\)要在\(j\)之前选. 那么对于给定的\(a_j=k\),我们可以连边\(k\to j\)建一张图.如果图有环,那么无解:否则这是一棵以\(0\)为根的树. 限制就变成了,选一个点前必须要选其父亲:如果第\(k\)个选点\(i\),\(i\)的贡献是\(k\cdot w_i\). 然后怎么做呢... 假设当前最小的数是\(x\),那么如果\(fa[x]\…
BZOJ 洛谷 思路和BZOJ3784一样,用前缀和+堆维护.做那题吧,不赘述啦. (没错我就是水一个AC) //54620kb 1060ms #include <queue> #include <cstdio> #include <cctype> #include <algorithm> //#define gc() getchar() #define MAXIN 500000 #define gc() (SS==TT&&(TT=(SS=I…
题目链接 容易想到田忌赛马.但是是不对的,比如2 3对1 3,按田忌赛马策略会3->1 2->3,但是3->3 2->1显然更优. 而如果按己方最强>=对方最强则开打,也是不对的,比如1 3对2 3,按该策略会3->3 1->2. 问题在于,在第一种情况下,对面最弱的2分是一定可以得到的. 于是得到贪心策略:1.若己方最弱强于对方最弱,则比,不能就继续2: 2.若己方最强强于对方最强,则比,不能就继续3: 3.己方最弱和对方最强比.(还是有可能赢的) 注意到两支队…
题目大意:n个建筑须要抢修.第i个建筑须要T1时间抢修.必须在T2时间之前抢修完成.求最多能抢修多少建筑 首先我们对T2排序 然后依次修理 可是这样贪心显然是不对的 比方说这组数据: 5 10 10 10 20 2 21 2 21 2 21 贪心仅仅能修理前两个.而实际上最多能够修理4个 于是我们考虑修正贪心算法 比方说这组数据,当我们枚举到3的时候.尽管已经无法修理很多其它了,可是我们能够取消修理建筑1而改修理3.这样尽管不能更新ans 可是能够为后面的建筑节省时间 所以做法就非常明白了 我们…
题目链接: hdu:http://acm.hdu.edu.cn/showproblem.php?pid=5661 bc(中文):http://bestcoder.hdu.edu.cn/contests/contest_chineseproblem.php?cid=686&pid=1002 题解: 考虑从高位到低位贪心,对于每一位, (1).如果x,y只有唯一的取法,那么只能这么取:否则贪心地必须使答案的这一位等于1. (2).如果x,y都是0,1都能取,则设这是从右向左数第len位,因为x,y能…
[题意]给定n个点m条边的带边权无向连通图(有重边和自环),在每个点随机向周围走一步,求1到n的期望路径异或值.n<=100,wi<=10^9. [算法]期望+高斯消元 [题解]首先异或不满足期望的线性,所以考虑拆位. 对于每一个二进制位,经过边权为0仍是x,经过边权为1变成1-x(转化成减法才满足期望的线性). 设f[x]表示点x到n的路径xor期望,f[n]=0,根据全期望公式: $$f[i]=\sum_{j}\frac{f[j]}{out[i]}\ \ , \ \ w(i,j)=0$$…