传送门 显然的贪心题啊...考试没调出来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…
这道题的贪心好迷啊~我们对于两个过程进行单独贪心,然后再翻转一个,把这两个拼起来.先说一下单独贪心,单独贪心的话就是用一个堆,每次取出最小的,并且把这个最小的加上他单次的,再放进去.这样,我们得到的结果,是对于某些洗衣机,不停地洗,然后把这些洗衣机的时间,混在一起,排个序,由于对于每个洗衣机,如果被用到,那么他就会被不停地用,如果我们稍作改动,就一定会是用小的换来大的,所以这样最优.我们把两个拼起来为什么是对的呢.对于两个单独的答案,最优的无疑是,翻转之后拼起来,因为如果不是这样,也就是说进行了…
题目   点这里看题目. 分析   首先考虑只有洗衣机的情况.我们可以想到,当前洗衣任务结束越早的洗衣机应该被先用,因此可以用堆来动态维护.   再考虑有烘干机的情况.很显然,越晚洗完的衣服应该越早烘干.因此我们可以按照处理洗衣机的方法,给衣服按照结束洗衣时间从大到小分配烘干机.   用一个堆对洗衣机和烘干机各维护一次,时间\(O(k\log_2n)\). 代码 #include <queue> #include <cstdio> using namespace std; type…
题目传送门 传送门 题目大意 有一个位置数列,给定$n$条线索,每条线索从某一个位置开始,一直向左或者向右走,每遇到一个还没有在线索中出现的数就将它加入线索,问最小的可能的数列长度. 依次从左到右考虑每一位上填的数. 用$f_{L, a, R, b, S}$表示正在满足向右走的线索是$L$,前$a$个字符已经满足,正在满足向左走的线索是$R$,前$b$个字符还没有满足,还未被考虑的线索集合是$S$. 主要有两种转移: 填下一个字符 如果两个线索下一个要填的字符相同,那么直接填 如果不同则还需判断…
题目传送门 唯一的传送门 题目大意 给定$n$个串,每个串只包含 ' .问是否可能任意两个不同的串不满足一个是另一个的前缀. 2-sat的是显然的. 枚举每个通配符填0还是1,然后插入Trie树. 对于Trie的每个点在2-sat中建点. 如果其中一个点被选择,那么它祖先和所有后继的结束点都不能选.(然后逆否命题连边) 对于一个包含通配符的串,通配符替换为0以及通配符替换为1的否命题等价,同样,通配符替换为1以及通配符替换为0的否命题等价(连双向边). 对于一个不包含通配符的串,直接它到的节点的…
这个题的搜索可以打到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,…
记得之前做过几道2-sat裸体,以及几道2-sat前缀优化建图,这道题使用了前缀树上前缀树优化建图.我们暴力建图肯定是n^2级别的,那么我们要是想让边数少点,就得使用一些骚操作.我们观察我们的限制条件,不就是选了一个点,那么这个点的前缀都不能选吗(选了一个点,以他为前缀的的点也不能选,这个限制条件可以通过前面那个限制条件体现出来,所以说观察到问题本质是一样的,可以简化我们的问题).那么我们就可以在Trie上建图,使得选择一个点,那么他的前缀点都必须不能选,就可以了.但是对于一个点上有多个点的情况…
[LOJ 6031] 「雅礼集训 2017 Day1」字符串 题意 给定一个长度为 \(n\) 的字符串 \(s\), \(m\) 对 \((l_i,r_i)\), 回答 \(q\) 个询问. 每个询问会给定一个长度为 \(k\) 的字符串 \(w\) 以及一对 \(L,R\), 求所有满足 \(i\in [L,R]\) 的 \(w[l_i:r_i]\) 在 \(s\) 中的出现次数之和. \(n,m,k,q\le 1\times 10^5\), \(\sum |w|\le 1\times 10…
[LOJ 6030] 「雅礼集训 2017 Day1」矩阵 题意 给定一个 \(n\times n\) 的 01 矩阵, 每次操作可以将一行转置后赋值给某一列, 问最少几次操作能让矩阵全为 1. 无解输出 -1. \(n \le 1000\). 题解 首先手玩下样例就可以发现一个非常虾皮的明显性质: 因为操作是赋值而不是取或, 于是一定是先让某一行都为 1 然后用这一行去染所有不是全 1 的列. 对于构造一个全 1 的行, 如果行号为 \(k\), 那么显然是用某一行的第 \(k\) 列上的 1…