线性基思想+贪心——cf1249C】的更多相关文章

/*1+3+9+...+3^n<3^(n+1),按这个思路贪心一下就好*/#include<bits/stdc++.h> using namespace std; #define ll long long ll p[],flag[],s[]; int main(){ p[]=s[]=; ;i<=;i++) p[i]=p[i-]*,s[i]=s[i-]+p[i]; int Q;cin>>Q; while(Q--){ ll n;cin>>n; ll tmp=n,…
LOJ 6060「2017 山东一轮集训 Day1 / SDWC2018 Day1」Set $ solution: $ 这一题的重点在于优先级问题,我们应该先保证总和最大,然后再保证某一个最小.于是我们分两部分贪心:(注意 $ tot $ 表示左右元素的异或和) 首先我们要让总和最大的话,我们只需要讨论 $ tot $ 的某一位为0的情况(如果为1,那么不管怎么分配两边的数都只能并且一定有一个数,使它这一位上含有1).对于 $ tot $ 的某一位为0的情况,我们肯定贪心的让两边都在这一位上含有…
题目大意: 给定\(n\)个二元组\((a,b)\),求一个最大的\(\sum b\)的集合,满足这个集合的任意子集的\(a\)的\(xor\)值不为0 这道题需要一个线性基的性质: 线性基的任何非空子集的\(xor\)值不为0 那么我们对于题目中对a的要求,只需要维护一个线性基即可. 那如何保证\(\sum b\)最大呢....我们可以按照b排序,然后依次插入线性基,如果经过插入操作后\(a[i].a\)不为0,就说明他被加入了线性基,那么就可以将他的\(a[i].b\)加入答案 至于贪心的正…
题意:有m门需要过的课程,n天的时间可以选择复习.考试(如果的d[i]为0则只能复习),一门课至少要复习a[i]天才能通过(可以不连续的复习得到a[i]),问最早什么时候可以把所有课程都通过,如果不能输出-1. 1 ≤ n, m ≤ 10^5) 思路:贪心思想可知每门课尽可能拖到最后考是最优方案,这样复习的天数就最多 二分答案验证是否可行,每考一门课就把复习的总日数减去 ..]of longint; n,m,l,r,mid,last,i:longint; function isok(len:lo…
还是见的题太少了 「NowCoder Contest 295」H. Playing games 题意:选出尽量多的数使得异或和为$ 0$ $ Solution:$ 问题等价于选出尽量少的数使得异或和为全集 根据线性基思想可以推得整个集合的异或集合可以被不超过$ bitcount$个数的异或集合表示 因此答案也不超过$ bitcount$ 对于原集合我们做若干次$ FWT$ 每次把当前异或集合卷上初始集合 复杂度$ O(n \ log^2 \ n)$ 足以通过本题 但是还不够 我们发现我们只是想知…
一眼做法,好处是好想好写坏处是常数大,容易被卡(bzoj loj 洛谷开O2 能AC,不开有90分-- 大概就是树剖之后维护线段树,在线段树的每个节点上上维护一个线性基,暴力\( 60^2 \)的合并儿子 对于每次查询,在树上跳重链,把这些区间的线性基暴力合并上,然后ans在合并之后的线性基上贪心即可. 这样,时间复杂度就是预处理\( 60^2nlogn \),查询的话跳链一个log,线段树查询60^2log,合并线性基60^2,总的就是\( O(60^2nlog_2n+qlog_2n(60^2…
#include <cstdio> #include <cstring> ; ; int cnt,Ans,b,x,n; inline int Max(int x,int y) {return x>y?x:y;} ];}Tree[Maxn*Len]; void Insert(int x) { ; bool k; ;i--) { k=x&(<<i); ) Tree[Now].next[k]=++cnt; Now=Tree[Now].next[k]; } } i…
Doing Homework again 这只是一道简单的贪心,但想不到的话,真的好难,我就想不到,最后还是看的题解 [题目链接]Doing Homework again [题目类型]贪心 &题意: Ignatius有N项作业要完成.每项作业都有限期,如果不在限期内完成作业,期末考就会被扣相应的分数.给出测试数据T表示测试数,每个测试以N开始(N为0时结束),接下来一行有N个数据,分别是作业的限期,再有一行也有N个数据,分别是若不完成次作业会在期末时被扣的分数.求出他最佳的作业顺序后被扣的最小的…
题目链接: http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1584 题目大意: 给n(n<=100 000)个任务的耗时和截至时间,问最少不能完成几个任务. 题目思路: [贪心+堆] 一开始想贪心但是没想到要加个堆,又跪了. 首先按照结束时间排序,结束时间早的肯定优先考虑. 如果当前的任务无法完成,就将当前任务和之前已经做了的任务中耗时最长的取消掉,改做当前任务 (如果当前任务就是耗时最长的则不用加当前任务,因为取消一个换另一个结果不会更差,只…
传送门 线段树好题. 这题一看我就想贪心. 先把a,b数组排序. 然后我们选择a数组中最大的b个数(不足b个就选a个数),分别贪心出在b数组中可以获得的最大贡献. 这时可以用线段树优化. 然后交上去只能过一个点(雾 调了很久都没有发现错误点. 于是搜题解. 发现大家的做法都跟我不一样233. 但我不能放弃. 就在这时我发现有可能每次贪心出的最大贡献可能是负数233. 于是我们把每次的决策都记下来. 最后枚举删去最小的决策(有可能是负数,这样答案会增加)之后的贡献来更新答案. 代码: #inclu…