#贪心#洛谷 6927 [ICPC2016 WF]Swap Space】的更多相关文章

洛谷题面传送门 神仙题. 深夜写题解感受真好 我们考虑两个简单环 \(C_1,C_2\)​​​,我们假设颜色种类数为 \(k\)​​​,那么我们需要有 \(C_1,C_2\)​​​ 均符合条件,而由于 \(C_1\oplus C_2\)​​​ 也是环,因此我们也必须有 \(C_1\oplus C_2\)​​​ 符合条件.不难发现 \(C_1,C_2,C_1\oplus C_2\)​​​ 这三个环是由 \(C_1-(C_1\cap C_2),C_2-(C_1\cap C_2),C_1\cap C_…
洛谷题目传送门 \(O(n)\)算法来啦! 复杂度优化的思路是建立在倍增思路的基础上的,看看楼上几位巨佬的描述吧. 首先数组倍长是一样的.倍增法对于快速找到\(j\)满足\(l_j+m\le r_i\)进行了优化.然后菊开队长说可以建个树优化,可是他没讲清楚就把这个神仙东西扔给了我这个蒟蒻...一个晚上终于把这个模性建出来了. 在倍长的序列上,我们对于每一个\(i\)找到最小的\(j\)满足\(r_j\ge l_i\)并连一条\(i\)到\(j\)的边,于是就成了一个森林.贪心地想,我们要求的东…
洛谷题目传送门 膜拜神犇出题人管理员!!膜拜yler和ZSY!! 没错yler连续教我这个蒟蒻写起床困难综合症和睡觉困难综合症%%%Orz,所以按位贪心的思路可以继承下来 这里最好还是写树剖吧,不过我根本不会,于是只好来个LCT,用unsigned long long维护链上双向的按位操作.具体方法yler已经讲得很好啦 注意因为信息的维护是有方向性的,所以pushdown要写规范...... #include<cstdio> #define RG register #define R RG…
题目链接 对于一个区间\([x,y]\),设这个区间的总和为\(S\) 那么我们在前缀和(设为\(sum[i]\))的意义上考虑到原操作其实就是\(sum[x−1]+=S\) , \(sum[x]+S−S\) , \(sum[y]−=S\) , \(sum[y+1]+S−S\). 而且我们注意到,本来就有\(sum[x−1]+S==sum[y]\),所以观察到其实原操作只是单纯的交换了一下\(sum[x−1]\)和\(sum[y]\)而已,而且这个\([x,y]\)区间任意选择,故原题已经可以改…
[P3817 小A的糖果 小A有N个糖果盒,第i个盒中有a[i]颗糖果. 小A每次可以从其中一盒糖果中吃掉一颗,他想知道,要让任意两个相邻的盒子中加起来都只有x颗或以下的糖果,至少得吃掉几颗糖. [贪心策略]: 因为吃后面的可以影响后面的情况.所以一旦不满足就吃后面的即可. #include<bits/stdc++.h> using namespace std; typedef long long ll; ; ll a[N] , n , x ; int main() { ios_base ::…
个人洛谷地址:       https://www.luogu.org/space/show?uid=181909 NOPI查分地址:      http://bytew.net/OIer/…
洛谷题目传送门 贪心小水题. 把线段按左端点从小到大排序,限制点也是从小到大排序,然后一起扫一遍. 对于每一个限制点实时维护覆盖它的所有线段,如果超过限制,则贪心地把右端点最大的线段永远删去,不计入答案.显然这样做对后面的决策更有利. 以右端点为键值,需要资瓷动态插入,删除最小值.最大值,multiset就行了. 代码很短,常数应该比较大,但不知为何暂时混了个rk1. #include<bits/stdc++.h> #define R register int #define G if(++i…
洛谷题目传送门 费了几个小时杠掉此题,如果不是那水水的数据的话,跟列队的难度真的是有得一比... 话说蒟蒻仔细翻了所有的题解,发现巨佬写的都是倍增,复杂度是\(O(n\log n\log nw)\)的,貌似还不够优秀. 其实我们与其对于每一个点都通过倍增向上找到对应位置,还不如直接从上到下dfs一遍,判断:如果当前点子树内初始位置最浅的军队与当前点距离不超过\(mid\),或者所有子树都被封锁,那么当前点也被封锁. 这样以后再二分,时间复杂度降至\(O(n\log nw)\).其它部分的思路Da…
次元传送门:洛谷P2577 思路 首先贪心是必须的 我们能感性地理解出吃饭慢的必须先吃饭(结合一下生活) 因此我们可以先按吃饭时间从大到小排序 然后就能自然地想到用f[i][j][k]表示前i个人在第一个窗口排队用了j时间 在第二个窗口排队用了k时间 然后就自然地炸空间了 所以我们要降维 因为我们可以由第一个窗口推出第二个窗口所用时间 所以我们可以改原来的数组为: f[i][j]表示前i个人 在第一个窗口用了j时间 得到的所有前i个人吃完饭的最短时间 如何用第一个窗口推出第二个窗口呢? 显而易见…
次元传送门:洛谷P1315 思路 思路大概想到了 可是代码实现却没想到 所以参考题解了 D2T3的贪心果然有难度 我们考虑在每次用加速器有两种情况 到下一个点还需要等待:以后的时间就不再影响了 到下一个点不需要等待:那么就会影响到后面的时间直到出现情况1(或者到最后一个点) 用sum[i]数组记录到i时的总人数 进行前缀和处理 e[i]为i可以影响到的最远的点 那么sum[i + e[i]] - sum[i] 即是能影响到的人数 这里需要用到贪心思想 即把影响最大的点用加速器 代码 #inclu…