[atAGC106E]Medals
暴力二分答案+网络流,点数为$o(nk)$,无法通过
考虑Hall定理,即有完美匹配当且仅当$\forall S\subseteq V_{left}$,令$S'=\{x|\exists y\in V_{left}且(x,y)\in E\}$,满足$|S|\le |S'|$
代入本题中,即$o(2^{n})$枚举工人,判断前$i$天内这些工人中有人存在的天数>=工人数的$k$倍
(虽然每一个工人被裂为了$k$个点,但由于中$k$个点的出边相同,选多个不会增大$|S'|$,必然全选)
考虑如何统计,先预处理出每一天存在的工人的二进制,再将所有于其有交的二进制全部加1即可
反过来,就是所有与其无交点的二进制,即全部属于其补集的二进制,高位前缀和即可
还有二分上限的问题,可以证明是$2kn$的,这样可以保证每一个工人都出现了至少$kn$次,任取$k$次即可
考虑时间复杂度,总复杂度为$o(n^{2}k+(n2^{n}+nk)\log_{2}nk)$,可以通过


1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 3600005
4 int n,m,x,day[N],tot[N],f[N];
5 bool pd(int k){
6 for(int i=0;i<(1<<n);i++)f[i]=0;
7 for(int i=1;i<=k;i++)f[day[i]]++;
8 for(int i=0;i<n;i++)
9 for(int j=0;j<(1<<n);j++)
10 if (j&(1<<i))f[j]+=f[j^(1<<i)];
11 for(int i=0;i<(1<<n);i++)
12 if (tot[i]*m>k-f[(1<<n)-1-i])return 0;
13 return 1;
14 }
15 int main(){
16 scanf("%d%d",&n,&m);
17 for(int i=0;i<n;i++){
18 scanf("%d",&x);
19 for(int j=1;j<N-4;j++)
20 if ((j-1)/x%2==0)day[j]|=(1<<i);
21 }
22 for(int i=0;i<(1<<n);i++)tot[i]=tot[i>>1]+(i&1);
23 int l=1,r=N-5;
24 while (l<r){
25 int mid=(l+r>>1);
26 if (pd(mid))r=mid;
27 else l=mid+1;
28 }
29 printf("%d",l);
30 }
[atAGC106E]Medals的更多相关文章
- 构建通用的 React 和 Node 应用
这是一篇非常优秀的 React 教程,这篇文章对 React 组件.React Router 以及 Node 做了很好的梳理.我是 9 月份读的该文章,当时跟着教程做了一遍,收获很大.但是由于时间原因 ...
- go语言赋值
使用赋值语句可以更新一个变量的值,最简单的赋值语句是将要被赋值的变量放在=的左边,新值的表达式放在=的右边. x = // 命名变量的赋值 *p = true // 通过指针间接赋值 person.n ...
- [教程]phpwind9.0应用开发基础教程
这篇文章着重于介绍在9.0中如何开发一个插件应用的示例,step by step来了解下在9.0中一个基础的应用包是如何开发的.1.目录结构OK,首先是目录结构,下面是一个应用我们推荐的目录. 应用包 ...
- XIV Open Cup named after E.V. Pankratiev. GP of SPb
A. Bracket Expression 直接按题意模拟即可. 时间复杂度$O(n)$. #include<stdio.h> #include<algorithm> #inc ...
- 浅谈数位DP
在了解数位dp之前,先来看一个问题: 例1.求a~b中不包含49的数的个数. 0 < a.b < 2*10^9 注意到n的数据范围非常大,暴力求解是不可能的,考虑dp,如果直接记录下数字, ...
- "Accepted today?"[HDU1177]
"Accepted today?" Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (J ...
- discuz学习,文件列表
文件颜色说明: 红色:程序核心文件,修改这类文件时千万要注意安全! 橙色:做插件几乎不会用到的文件,大概了解功能就可以了,其实我也不推荐修改这些文件 绿色:函数类文件,许多功能强大的自定义函数可以调用 ...
- Top 10 Universities for Artificial Intelligence
1. Massachusetts Institute of Technology, Cambridge, MA Massachusetts Institute of Technology is a p ...
- CF Gym 100685A Ariel
传送门 A. Ariel time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...
随机推荐
- 算法——快速排序迭代式和递归式的Java实现
快速排序迭代式和递归式的Java实现 快速排序基于分治法的思想,在待排序表中任选一值作为中枢值 pivot,一趟快排将所有大于该值的元素置于一边,小于该值的元素置于另一边,这样一个元素在排序中的最终位 ...
- Hibernate的介绍及入门小案例
1.Hibernate的诞生 在以前使用传统的JDBC开发应用系统时,如果是小型应用系统,并不觉得有什么麻烦,但是对于大型应用系统的开发,使用JDBC就会显得力不从心,例如对几十,几百张包含几十个字段 ...
- L1-027 出租 (20 分) java题解
下面是新浪微博上曾经很火的一张图: 一时间网上一片求救声,急问这个怎么破.其实这段代码很简单,index数组就是arr数组的下标,index[0]=2 对应 arr[2]=1,index[1]=0 对 ...
- python中的load、loads实现反序列化
load与loads 简介: 在python自动化中,我们传递一些参数是需要从文件中读取过来的,读取过来的字典并非python对象数据类型而是string类型. 这样在我们传递参数的时候就会出现格式不 ...
- 【UE4 C++】DateTime、Timespan 相关函数
基于UKismetMathLibrary DateTime 相关函数 Timespan 运算操作相关函数见尾部附录 /** Returns the date component of A */ UFU ...
- Beta阶段第六次会议
第六次会议 时间:2020.5.22 完成工作 姓名 任务 难度 完成度 xyq 1.编写技术博客 中 90% ltx 1.编写小程序2.添加全局变量之后页面无法加载的bug 中 90% lm(迟到) ...
- Noip模拟17 2021.7.16
我愿称这场考试为STL专练 T1 世界线 巧妙使用$bitset$当作vis数组使用,内存不会炸,操作还方便,的确是极好的. 但是这个题如果不开一半的$bitset$是会炸内存的,因为他能开得很大,但 ...
- python3中的bytes和string
原文链接:https://www.cnblogs.com/abclife/p/7445222.html python 3中最重要的新特性可能就是将文本(text)和二进制数据做了更清晰的区分.文本总是 ...
- set prompt = "任意匹配字符" 当前目录详解
转载:https://blog.csdn.net/alexdream/article/details/6865730 研究了两天的FreeBSD,总是感觉输入提示符那里怪怪的,而且默认的提示符还不带显 ...
- 整数中1出现的次数 牛客网 剑指Offer
整数中1出现的次数 牛客网 剑指Offer 题目描述 求出113的整数中1出现的次数,并算出1001300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1.10.11.12.13因此 ...