正题

题目链接:https://atcoder.jp/contests/arc106/tasks/arc106_e


题目大意

\(n\)个员工,第\(i\)个在\([1,A_i]\)工作,\([A_i+1,2\times A_{i}]\)休息,\([2\times A_i+1,3\times A_i]\)工作...以此类推。

然后每天可以为一个在工作的人发一枚奖牌,至少多少天才能让每个人都有\(k\)块奖牌。

\(1\leq n\leq 18,1\leq k,A_i\leq 10^5\)


解题思路

首先答案上限显然是\(2\times n\times 10^5\)(就是每个人轮流发)

然后考虑一个暴力的做法。先二分,然后把每天看做一个右边的点,每个员工看做\(k\)个左边的点,然后一个员工干活的天就连边,之后暴力跑网络流。

这样显然会\(T\)但是这是一个正解的启示。

首先我们先拓宽一下\(hall\)定理,原来是\(2\times k\)个点的二分图匹配左边任意\(k\)个点都和右边至少\(k\)个点匹配是这张图有完全匹配的充要条件,但是不难发现如果右边多加了几个点显然还是满足条件的。

所以上面那个可以理解为左边任意\(k\)个点都和右边至少有\(k\)条连边,然后不难发现段其实只有\(2^n\)种不同的,所以我们直接二分一个答案然后设\(f_s\)表示包含集合\(s\)的段匹配了多少个点。

如果\(f_s<|s|\times k\)就无解了,然后\(f_s\)要用高维前缀和或者\(FWT\)做就好了。

时间复杂度\(O(2^nn\log nk)\)


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=18;
ll n,k,a[N],bit[1<<N],f[1<<N],s[N*200000];
bool check(ll t){
ll MS=(1<<n);
memset(f,0,sizeof(f));
for(ll i=1;i<=t;i++)
f[MS-1]++,f[s[i]^(MS-1)]--;
for(ll i=0;i<n;i++)
for(ll j=0;j<MS;j++)
if(j&(1<<i))f[j^(1<<i)]+=f[j];
for(ll i=0;i<MS;i++)
if(f[i]<bit[i]*k)
return 0;
return 1;
}
signed main()
{
scanf("%lld%lld",&n,&k);
for(ll i=0;i<n;i++)
scanf("%lld",&a[i]);
ll MS=(1<<n),L=2*n*1e5;
for(ll i=1;i<MS;i++)bit[i]=bit[i-(i&-i)]+1;
for(ll i=1;i<=L;i++)
for(ll j=0;j<n;j++)
if((i-1)%(a[j]<<1)<a[j])
s[i]|=(1<<j);
ll l=1,r=L;
while(l<=r){
ll mid=(l+r)>>1;
if(check(mid))r=mid-1;
else l=mid+1;
}
printf("%lld\n",l);
return 0;
}

ARC106E-Medals【hall定理,高维前缀和】的更多相关文章

  1. 【2019.8.15 慈溪模拟赛 T2】组合数(binom)(卢卡斯定理+高维前缀和)

    卢卡斯定理 题目中说到\(p\)是质数. 而此时要求组合数向质数取模的结果,就可以用卢卡斯定理: \[C_x^y=C_{x\ div\ p}^{y\ div\ p}\cdot C_{x\ mod\ p ...

  2. 【BZOJ2138】stone Hall定理+线段树

    [BZOJ2138]stone Description 话说Nan在海边等人,预计还要等上M分钟.为了打发时间,他玩起了石子.Nan搬来了N堆石子,编号为1到N,每堆包含Ai颗石子.每1分钟,Nan会 ...

  3. 【BZOJ2138】stone(线段树,Hall定理)

    [BZOJ2138]stone(线段树,Hall定理) 题面 BZOJ 题解 考虑一个暴力. 我们对于每堆石子和每个询问,显然是匹配的操作. 所以可以把石子拆成\(a_i\)个,询问点拆成\(K_i\ ...

  4. EOJ-3300 奇数统计(高维前缀和)

    题目链接: https://acm.ecnu.edu.cn/problem/3300/ 题目大意: 给n个数,求在n个数中选两个数(可重复),使得这两个数的组合数是奇数,求总共有多少种取法. 解题思路 ...

  5. ARC076 F Exhausted? Hall定理 + 线段树扫描线

    ---题面--- 题目大意: 有n个人,m个座位,每个人可以匹配的座位是[1, li] || [ri, m],可能有人不需要匹配座位(默认满足),问最少有多少人不能被满足. 题解: 首先可以看出这是一 ...

  6. Hall 定理

    Hall 定理 是匈牙利算法的基础 大意是说,对于一个二分图 左边的集合记为X,右边的集合记为Y 存在完美匹配,(即匹配数目=min(|X|,|Y|))的充分必要条件是 对于任意一个X的子集,设大小为 ...

  7. 【BZOJ2138】stone(线段树+hall定理)

    传送门 题意: 现在有\(n\)堆石子,每堆石子有\(a_i\)个. 之后会有\(m\)次,每次选择\([l,r]\)的石子堆中的石子扔\(k\)个,若不足,则尽量扔. 现在输出\(1\)~\(m\) ...

  8. 模拟赛 怨灵退治 题解(Hall定理+线段树)

    题意: 有 n 群怨灵排成一排,燐每秒钟会选择一段区间,消灭至多 k 只怨灵. 如果怨灵数量不足 k,则会消灭尽量多的怨灵. 燐作为一只有特点的猫,它选择的区间是不会相互包含的.它想要知道它每秒最多能 ...

  9. LOJ6062「2017 山东一轮集训 Day2」Pair(Hall定理,线段树)

    题面 给出一个长度为 n n n 的数列 { a i } \{a_i\} {ai​} 和一个长度为 m m m 的数列 { b i } \{b_i\} {bi​},求 { a i } \{a_i\} ...

随机推荐

  1. C#托管堆和垃圾回收

    垃圾回收 值类型 每次使用都有对应新的线程栈 用完自动释放 引用类型 全局公用一个堆 因此需要垃圾回收 操作系统 内存是链式分配 CLR 内存连续分配(数组) 要求所有对象从 托管堆分配 GC 触发条 ...

  2. SpringMVC的拦截器和过滤器的区别

    一 简介 (1)过滤器: 依赖于servlet容器.在实现上基于函数回调,可以对几乎所有请求进行过滤,但是缺点是一个过滤器实例只能在容器初始化时调用一次.使用过滤器的目的是用来做一些过滤操作,获取我们 ...

  3. C++多态中虚函数表合并与继承问题

    多态: C++的多态是通过一张虚函数表(Virtual Table)来实现的,简称为 V-Table.在这个表中,主要是一个类的虚函数的地址表,这张表解决了继承.覆写的问题,保证其真实反应实际的函数. ...

  4. CSS样式下border的几种线型

    在用border的时候经常会忘记它有多少种线型以及各种线型的写法:每次都得从头开始,或是用到Google.百度之类的,有空整理了一下 (1)none (没有边框,无论边框宽度设为多大) (2)dott ...

  5. Java网络编程之TCP

    Java网络编程之TCP ​ TCP主要需要两个类:Socket和ServerSocket,Socket是客户端连接服务器时创建,参数需要指定服务器的ip和端口,ServerSocket是服务器端创建 ...

  6. Mybatis-Plus增强包

    简介 本框架(Gitee地址 )结合公司日常业务场景,对Mybatis-Plus 做了进一步的拓展封装,即保留MP原功能,又添加更多有用便捷的功能.具体拓展体现在数据自动填充(类似JPA中的审计).关 ...

  7. JVM详解(一)——概述

    Test https://www.cnblogs.com/yrxing/p/14651346.html#gc的基础知识 https://www.cnblogs.com/yinzhengjie/p/92 ...

  8. git跟踪忽略规则文件.gitignore

    在使用Git的过程中,我们希望有的文件比如临时文件,编译的中间文件等不要被跟踪,也不需要提交到代码仓库,这时就要设置相应的忽略规则,来忽略这些文件的提交. 配置语法 以斜杠"/"开 ...

  9. error: object file .git/objects/...

    cd .git find . -type f -empty -delete -print tail -n 2 .git/logs/refs/heads/master git show xxxx(版本号 ...

  10. ClientValidationFunction

    CustomValidator.ClientValidationFunction 属性 获取或设置用于验证的自定义客户端脚本函数的名称. 命名空间:   System.Web.UI.WebContro ...