9.26 模拟

T1 荒诞

题目大意

\(1^2+2^2+...+n^2\)

题目分析

水过。

T2 失意

题目大意

给定\(n\)个线段,从中取出\(m\)个线段使得这些线段交集最长,求最长长度以及一个任意的合法方案。

题目分析

求交集的长度很简单,就是\(max(0,r_{min}-l_{max})\)。那么我们将所有线段按左端点排序。枚举当前左端点\(i\),将左端点小于\(i\)的线段的右端点放入堆中。如果当前堆的大小\(>m\)就弹出堆中右端点最小的。当前最优答案就是堆中右端点最小值-\(i\)

T3 孤独

题目分析

容斥。但是在计算子集贡献的时候需要换一种快速的写法

for(int j=0;j<n;j++){
	for(int i=1;i<(1<<n);i++)if(i&(1<<j))cnt[i^(1<<j)]+=cnt[i];
}
posted @ 2018-09-27 13:25  Trrui  阅读(107)  评论(0编辑  收藏  举报