[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)$,可以通过
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
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 ...
随机推荐
- CF911G Mass Change Queries(线段树+暴力)
cf机子真的快. 其实这个题的维护的信息还是很巧妙的. 首先,观察到题目中涉及到,区间修改这个操作,然后最后只查询一次,我们不妨用线段树来维护这个过程. 但是貌似直接维护每个位置的值可能不太好维护. ...
- Java(8)详解Random使用
作者:季沐测试笔记 原文地址:https://www.cnblogs.com/testero/p/15201556.html 博客主页:https://www.cnblogs.com/testero ...
- Java(18)抽象类
作者:季沐测试笔记 原文地址:https://www.cnblogs.com/testero/p/15201625.html 博客主页:https://www.cnblogs.com/testero ...
- 【Java虚拟机3】类加载器
前言 Java虚拟机设计团队有意把类加载阶段中的"通过一个类的全限定名来获取描述该类的二进制字节流"这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需的类. ...
- 第2次 Beta Scrum Meeting
本次会议为Beta阶段第2次Scrum Meeting会议 会议概要 会议时间:2021年5月31日 会议地点:「腾讯会议」线上进行 会议时长:0.5小时 会议内容简介:对完成工作进行阶段性汇报:对下 ...
- UltraSoft - Alpha - Scrum Meeting 4
Date: Apr 18th, 2020. 会议内容为 例行汇报. Scrum 情况汇报 进度情况 组员 负责 前两日进度 后两日任务 CookieLau PM 完成前后端交互规格的约定,了解前后端进 ...
- CSP-S 2021 遗言
感谢€€£,谢谢宁嘞! 第一题,€€£给了很多限制条件,什么"先到先得"."只有一个跑道",让它看起来很好做,然后来骗,来偷袭,广大"消费者" ...
- 安装pytorch的细节记录
1.根据教程安装pytorch的时候发现太慢了,无法容忍,根据https://blog.csdn.net/zzq060143/article/details/88042075z在Ancona Prom ...
- 如何清理history
工作中,需要清理history 清理当前会话历史命令 history -c 清理当前用户所有历史命令 echo > .bash_history #在用户主目录执行此操作
- 算法:杨辉三角(Pascal's Triangle)
一.杨辉三角介绍 杨辉三角形,又称帕斯卡三角形.贾宪三角形.海亚姆三角形.巴斯卡三角形,是二项式系数的一种写法,形似三角形,在中国首现于南宋杨辉的<详解九章算法>得名,书中杨辉说明是引自贾 ...