ARC106E-Medals【hall定理,高维前缀和】

正题

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


题目大意

nnn个员工,第iii个在[1,Ai][1,A_i][1,Ai]工作,[Ai+1,2×Ai][A_i+1,2\times A_{i}][Ai+1,2×Ai]休息,[2×Ai+1,3×Ai][2\times A_i+1,3\times A_i][2×Ai+1,3×Ai]工作…以此类推。

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

1≤n≤18,1≤k,Ai≤1051\leq n\leq 18,1\leq k,A_i\leq 10^51n18,1k,Ai105


解题思路

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

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

这样显然会TTT但是这是一个正解的启示。

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

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

如果fs<∣s∣×kf_s<|s|\times kfs<s×k就无解了,然后fsf_sfs要用高维前缀和或者FWTFWTFWT做就好了。

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


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;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/318753.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

高并发、低延迟之C#玩转CPU高速缓存(附示例)

写在前面好久没有写博客了&#xff0c;一直在不断地探索响应式DDD&#xff0c;又get到了很多新知识&#xff0c;解惑了很多老问题&#xff0c;最近读了Martin Fowler大师一篇非常精彩的博客The LMAX Architecture&#xff0c;里面有一个术语Mechanical Sympathy&#xff0c;姑且…

RMQ问题:与众不同(st表的高端应用)

解析 预处理 用pre[i]表示以i结尾的最长完美序列起始点&#xff0c;用last[i]表示数字i最后出现的位置 那么可以得到递推式&#xff1a; pre[i]max(pre[i-1],last[x[i]]1);也就是说这个pre要么是受前一位一样的限制&#xff0c;要么是受自己的限制 用f[i]表示以i结尾的最长完…

codeforces1554 E. You(思维+数学+转化)

E. You 首先我们假设每个节点有个点权&#xff0c;点权是儿子的数量。 一个点可以和他的父亲所要权值1&#xff08;先删去自己&#xff0c;再删去父亲&#xff09;&#xff0c;并且此操作不可逆。于是dfs从叶子节点一次递推即可得出某个kkk是否能作为gcd⁡\gcdgcd。 由于上述…

牛客题霸 [括号生成] C++题解/答案

牛客题霸 [括号生成] C题解/答案 题意&#xff1a; 给出n对括号&#xff0c;请编写一个函数来生成所有的由n对括号组成的合法组合。 例如&#xff0c;给出n3&#xff0c;解集为&#xff1a; “((()))”, “(()())”, “(())()”, “()()()”, “()(())”, 题解&#xff1a; …

P5404-[CTS2019]重复【KMP,dp】

正题 题目链接:https://www.luogu.com.cn/problem/P5404 题目大意 给出一个字符串SSS&#xff0c;然后求有多少个长度为mmm的串TTT满足。无限多个串TTT拼接起来后能找出一个长度和SSS相等的子串字典序比SSS小。 1≤∣S∣,m≤20001\leq |S|,m\leq 20001≤∣S∣,m≤2000 解题思…

Docker最全教程——从理论到实战(四)

容器是应用走向云端之后必然的发展趋势&#xff0c;因此笔者非常乐于和大家分享我们这段时间对容器的理解、心得和实践。本篇教程持续编写了2个星期左右并且一直在完善、补充具体的细节和实践&#xff0c;预计全部完成需要1到2个月的时间。由于编写的过程中极其费时&#xff0c…

模板:高精

想必大家一定都深受高精所害 python党&#xff1a;啥叫高精&#xff1f; 这里送上一种高精板子 写法 转载自巨神wyx的博客 #include <bits/stdc.h> using namespace std;const int maxn 1000;struct bign {int d[maxn], len;void clean() {while (len > 1 &&…

牛客题霸 [最长公共子序列] C++题解/答案

牛客题霸 [最长公共子序列] C题解/答案 题目描述 给定两个字符串str1和str2&#xff0c;输出连个字符串的最长公共子序列。如过最长公共子序列为空&#xff0c;则输出-1。 题解&#xff1a; dp经典问题 代码&#xff1a; class Solution { public:/*** longest common su…

2021牛客暑期多校训练营4 G-Product(组合意义+容斥原理)

G-Product Spy_Savior题解 Ultraman-Ace题解 组合意义容斥原理 转化后题目关键要求有DnkDnkDnk个小球放在nnn个盒子中&#xff0c;每个盒子至少有k个小球的方案数。 题目的等价式子为 ∑∑i1naiDnk[ai≥k]D!∏i1nai!\sum_{\sum_{i1}^na_iDnk[a_i\ge k]}\frac{D!}{\prod_{i1}^…

P6122-[NEERC2016]Mole Tunnels【模拟费用流】

正题 题目链接:https://www.luogu.com.cn/problem/P6122 题目大意 给出nnn个点的一棵满二叉树&#xff0c;每个点有容量cic_ici​&#xff0c;mmm次从pip_ipi​处加一只仓鼠然后求每只仓鼠都到一个点的最短路径长度和。 1≤n≤1051\leq n\leq 10^51≤n≤105 解题思路 模拟费…

牛客题霸 [矩阵查找] C++题解/答案

牛客题霸 [矩阵查找] C题解/答案 题目描述 请写出一个高效的在m*n矩阵中判断目标值是否存在的算法&#xff0c;矩阵具有如下特征&#xff1a; 每一行的数字都从左到右排序 每一行的第一个数字都比上一行最后一个数字大 例如&#xff1a; 对于下面的矩阵&#xff1a; [ [1, 3,…

AtCoder Beginner Contest 211 E - Red Polyomino(暴力+状态记录)

E - Red Polyomino 暴力&#xff0c;对于状态的记录考虑下面用set<vector<string>> mp #include<bits/stdc.h> using namespace std; using lllong long; template <class Tint> T rd() {T res0;T fg1;char chgetchar();while(!isdigit(ch)) {if(ch-…

CF960G-Bandit Blues【第一类斯特林数,分治,NTT】

正题 题目链接:https://www.luogu.com.cn/problem/CF960G 题目大意 求有多少个长度为nnn的排列&#xff0c;使得有AAA个前缀最大值和BBB个后缀最大值。 0≤n,A,B≤1050\leq n,A,B\leq 10^50≤n,A,B≤105 解题思路 显然的是把最大的数两边然后左边的是前缀最大值&#xff0c;…

动态规划:openjudge 2.6-3532 最大上升子序列和 解题心得

传送门 题目描述 一个数的序列bi&#xff0c;当b1 < b2 < … < bS的时候&#xff0c;我们称这个序列是上升的。对于给定的一个序列(a1, a2, …,aN)&#xff0c;我们可以得到一些上升的子序列(ai1, ai2, …, aiK)&#xff0c;这里1 < i1 < i2 < … < iK…

边缘化搭建 DotNet Core 2.1 自动化发布和部署(下)

写在前面本篇文章是上一篇边缘化搭建 DotNet Core 2.1 自动化发布和部署(上)的后续操作&#xff0c;本文主要讲解如何开启Docker Remote API&#xff0c;开启Remote API后的权限安全问题。配置Jenkins构建项目&#xff0c;并在云服务器上构建成功。废话不多说&#xff0c;我们一…

牛客题霸 [二进制中1的个数] C++题解/答案

牛客题霸 [二进制中1的个数] C题解/答案 题目描述 输入一个整数&#xff0c;输出该数32位二进制表示中1的个数。其中负数用补码表示。 题解&#xff1a; 判断1的个数 x&(-x)2^k 有点类似于树状数组中lowbit的操作 代码&#xff1a; class Solution { public:int Num…

2021牛客暑期多校训练营5 G-Greater Integer, Better LCM(暴力+子集dp)

G-Greater Integer, Better LCM 看到校大佬的代码就瞬间会做了。 当时和队友想的是&#xff0c;首先转化题意即找两个数x≥a,y≥b[lcm(a,b)c]x\ge a,y\ge b[\text{lcm}(a,b)c]x≥a,y≥b[lcm(a,b)c]&#xff0c;首先不考虑x≥a,y≥bx\ge a,y\ge bx≥a,y≥b的限制&#xff0c;显…

P2179-[NOI2012]骑行川藏【导数,二分】

正题 题目链接:https://www.luogu.com.cn/problem/P2179 题目大意 给出EEE和nnn个si,ki,uis_i,k_i,u_isi​,ki​,ui​求一个序列viv_ivi​满足 ∑i1nkisi(vi−ui)2≤E\sum_{i1}^nk_is_i(v_i-u_i)^2\leq Ei1∑n​ki​si​(vi​−ui​)2≤E 的情况下最小化 ∑i1nsivi\sum_{i1}^…

不止代码:乘法游戏 题解(区间dp)

题目描述 乘法游戏是在一行牌上进行的。每一张牌包括了一个正整数。在每一个移动中&#xff0c;玩家拿出一张牌&#xff0c;得分是用它的数字乘以它左边和右边的数&#xff0c;所以不允许拿第1张和最后1张牌。最后一次移动后&#xff0c;这里只剩下两张牌。 你的目标是使得分的…

边缘化搭建DotNet Core 2.1 自动化构建和部署环境(上)

写在前面写这篇文章的缘由是由于笔者的对新兴技术方向有所追求&#xff0c;但个人资产有限&#xff0c;只能容许购买一台阿里云低配1核2G服务器。服务器上搭建了 Centos7 & Docker & Jenkins & ASP.NET Core 2.0 自动化发布和部署 环境后牺牲了大部分性能。造成了一…