传送门 LOJ Solution 因为?只有两种可能为0,1,所以就把这两个串搞出来. 那么现在?取0和?取1不能并存,前缀不能并存,所以就是一个\(2-SAT\),现在问题在于这个东西可能会有很多条边,所以考虑用Trie树优化这个过程. 显然根节点到这个点的路径上的所有字符串关键点都是它的前缀,那么考虑把每一个串用一个点挂到上面去,那么就还是可以跑\(2-SAT\),所以就可以做出来了. 代码实现 代码戳这里…
题目传送门 唯一的传送门 题目大意 给定$n$个串,每个串只包含 ' .问是否可能任意两个不同的串不满足一个是另一个的前缀. 2-sat的是显然的. 枚举每个通配符填0还是1,然后插入Trie树. 对于Trie的每个点在2-sat中建点. 如果其中一个点被选择,那么它祖先和所有后继的结束点都不能选.(然后逆否命题连边) 对于一个包含通配符的串,通配符替换为0以及通配符替换为1的否命题等价,同样,通配符替换为1以及通配符替换为0的否命题等价(连双向边). 对于一个不包含通配符的串,直接它到的节点的…
记得之前做过几道2-sat裸体,以及几道2-sat前缀优化建图,这道题使用了前缀树上前缀树优化建图.我们暴力建图肯定是n^2级别的,那么我们要是想让边数少点,就得使用一些骚操作.我们观察我们的限制条件,不就是选了一个点,那么这个点的前缀都不能选吗(选了一个点,以他为前缀的的点也不能选,这个限制条件可以通过前面那个限制条件体现出来,所以说观察到问题本质是一样的,可以简化我们的问题).那么我们就可以在Trie上建图,使得选择一个点,那么他的前缀点都必须不能选,就可以了.但是对于一个点上有多个点的情况…
题目传送门 传送门 题目大意 有一个位置数列,给定$n$条线索,每条线索从某一个位置开始,一直向左或者向右走,每遇到一个还没有在线索中出现的数就将它加入线索,问最小的可能的数列长度. 依次从左到右考虑每一位上填的数. 用$f_{L, a, R, b, S}$表示正在满足向右走的线索是$L$,前$a$个字符已经满足,正在满足向左走的线索是$R$,前$b$个字符还没有满足,还未被考虑的线索集合是$S$. 主要有两种转移: 填下一个字符 如果两个线索下一个要填的字符相同,那么直接填 如果不同则还需判断…
传送门 显然的贪心题啊...考试没调出来10pts滚了妙的一啊 直接分别用堆贪心出洗完第iii件衣服需要的最少时间和晾完第iii件衣服需要的最少时间. 我们设第一个算出来的数组是aaa,第二个是bbb,然后令ccc数组是bbb的一个任意排列. 于是要求minminmin{maxmaxmax{a1+c1,a2+c2,...al+cla_1+c_1,a_2+c_2,...a_l+c_la1​+c1​,a2​+c2​,...al​+cl​}} 里面东西跟排序不等式很像啊 ,于是aaa正序bbb倒序加起…
传送门 先处理出每一件衣服最早什么时候洗完,堆+贪心即可 然后同样处理出每件衣服最早什么时候烘干 然后倒序相加取最大值 # include <bits/stdc++.h> using namespace std; typedef long long ll; const int maxn(1e5 + 5); int l, n, m, d[maxn], w[maxn]; ll ans, tim1[maxn * 10], tim2[maxn * 10]; priority_queue < pa…
这个题的搜索可以打到48分…… #include <cstdio> #include <cstring> #include <algorithm> ; bool must[N],in[N]; int cnt; int n,a[N][N],q[N],b[N]; inline bool judge(int len,int lim){ return lim-len>=cnt; } inline bool check(int len){ register int i,j,…
这道题的贪心好迷啊~我们对于两个过程进行单独贪心,然后再翻转一个,把这两个拼起来.先说一下单独贪心,单独贪心的话就是用一个堆,每次取出最小的,并且把这个最小的加上他单次的,再放进去.这样,我们得到的结果,是对于某些洗衣机,不停地洗,然后把这些洗衣机的时间,混在一起,排个序,由于对于每个洗衣机,如果被用到,那么他就会被不停地用,如果我们稍作改动,就一定会是用小的换来大的,所以这样最优.我们把两个拼起来为什么是对的呢.对于两个单独的答案,最优的无疑是,翻转之后拼起来,因为如果不是这样,也就是说进行了…
题目   点这里看题目. 分析   首先考虑只有洗衣机的情况.我们可以想到,当前洗衣任务结束越早的洗衣机应该被先用,因此可以用堆来动态维护.   再考虑有烘干机的情况.很显然,越晚洗完的衣服应该越早烘干.因此我们可以按照处理洗衣机的方法,给衣服按照结束洗衣时间从大到小分配烘干机.   用一个堆对洗衣机和烘干机各维护一次,时间\(O(k\log_2n)\). 代码 #include <queue> #include <cstdio> using namespace std; type…
LOJ_6045_「雅礼集训 2017 Day8」价 _最小割 描述: 有$n$种减肥药,$n$种药材,每种减肥药有一些对应的药材和一个收益. 假设选择吃下$K$种减肥药,那么需要这$K$种减肥药包含的药材也等于$K$时才会有效果. 求最小收益,收益可能是负的.保证有完美匹配. 分析: 先把所有权值取相反数求最大收益,因为最小收益看着很难受. $S$->减肥药($inf$+收益),减肥药->药材($inf$),药材->$T$($inf$). 然后求最小割,答案就是$S$连出去的边的容量和…