https://loj.ac/problem/2351 参考:https://www.cnblogs.com/ivorysi/p/9144676.html 但是参考博客讲解太吓人了,我们换一种通俗易懂的方法讲. 首先肯定是能想到容斥和子集和的,但是很尴尬的是,裸容斥的复杂度是O(2^l)的显然过不去. 我们考虑l特别小,且字符只有三种,话句话讲至少有一个字符个数<=6. 那我们就试图分情况讨论,分成以0,1,?为目标特殊处理. 同时我们: 设数组f[0][i]表示讨论0时i的二进制1集合属于j的…
https://loj.ac/problem/2350 比较简单的题,为什么我实现得这么sb? 第一个包其实已经给了提示(第一个包的解法就是在S->T所有最短路径上的所有点到V的最短路的最小值.) 那么我们先把所有最短路径存成新的图,然后dfs每一条路径,然后找到路径上两个点(i,j),构成一条U->i->j->V,把所有这样的路的答案更新即为所求. 然后就是代码实现的问题了,dfs肯定不行,那么考虑开两个数组f[i]和t[i]表示i往后的路径点j中,U->j最小值和j-&g…
LOJ#2351. 「JOI 2018 Final」毒蛇越狱 https://loj.ac/problem/2351 分析: 首先有\(2^{|?|}\)的暴力非常好做. 观察到\(min(|1|,|0|,|?|)\le 6\),我们只需要推出一个\(2^{|0|}\)和\(2^{|1|}\)的容斥式子 而这个式子也是很好推的. 考虑子集反演: \(f(S)=\sum\limits_{T\subseteq S}g(T)\) \(g(S)=\sum\limits_{T\subseteq S}(-1…
[题解]毒蛇越狱(FWT+容斥) 问了一下大家咋做也没听懂,按兵不动没去看题解,虽然已经晓得复杂度了....最后感觉也不难 用FWT_OR和FWT_AND做一半分别求出超集和和子集和,然后 枚举问号是01,裸的,\(O(2^{cnt[?]})\) 默认问号是1,利用子集和求,\(O(2^{cnt[1]})\) 默认问号是0,利用超集和求,\(O(2^{cnt[0]})\) 可以知道\(min(cnt)\le n/3\),所以复杂度\(O(n2^n 2^{n/3}Q)\) //@winlere #…
[JOI2017/2018]美術展 题目大意: 有\(n(n\le5\times10^5)\)个物品,每个物品有两个属性:尺寸\(A_i\)和收益\(B_i\).从中选取一个子集,总收益为\(\sum B_i-\max\{A_i\}-\min\{A_i\}\).求总收益最大值. 思路: 将所有物品按照\(A_i\)排序,\(B_i\)前缀和记作\(S_i\).答案相当于\(\max\{S_i-A_i+A_j-S_{j-1}\}\).维护\(A_j-S_{j-1}\)前缀\(\max\)即可. 源…
题解 没啥特别好的算法,是个讨论题,由于0 1 ?三类数位中最少的不会超过6 如果1不超过6,那么记录\(f1(S)\)为 \(\sum_{T \subset S} val(T)\)这个可以通过类似FMT的递推式在\(L 2^L\)求出 然后容斥,如果这个数和1的个数差别是偶数就加上否则就减掉 如果0不超过6,记录\(f0(S)\)为 \(\sum_{T \supset S} val(T)\) 然后容斥,如果这个数有偶数个1就加上否则减掉 问号很少的话就是直接枚举计算值了 复杂度\(O(2^{\…
A.HDU6276:Easy h-index Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1181    Accepted Submission(s): 415 Problem Description 比赛题目:http://acm.hdu.edu.cn/downloads/2018ccpc_hn.pdf The h-index of…
反正没时间写,先把简要题解(嘴巴A题)都给他写了记录一下. upd:任务倒是完成了,我也自闭了. CST2018 2-1 Meteorites: 乘法版的石子合并,堆 + 高精度. 写起来有点烦貌似. upd:由于内存问题我高精度是动态开点,同时用的是可并堆(比较简单). #include <cstdio> #include <cmath> #include <cstring> using namespace std; typedef double lf; typede…
[HNOI2008]越狱 Description 监狱有连续编号为1...N的N个房间,每个房间关押一个犯人,有M种宗教,每个犯人可能信仰其中一种.如果相邻房间的犯人的宗教相同,就可能发生越狱,求有多少种状态可能发生越狱 输入格式:输入两个整数M,N.1<=M<=10^8,1<=N<=10^12 输出格式:可能越狱的状态数,模100003取余 Solution 1.直接计算所有的越狱方案不方便,考虑使用容斥原理分别计算总方案数和不越狱方案数,相减即可: 2.总方案数为 m^n,因为…
题解 有意思的一个dp,我们对G计数,发现如果不在同一条对角线上的G肯定不会互相影响,所以我们对于每一条对角线dp dp的方式是枚举这个G以什么方式放,横着还是竖着,还是不放 代码 #include <iostream> #include <cstdio> #include <vector> #include <algorithm> #include <cmath> #include <cstring> #include <ma…