首页 > 其他分享 >Solution -「ARC 106E」Medals

Solution -「ARC 106E」Medals

时间:2023-10-04 16:03:43浏览次数:37  
标签:... 个点 int Solution times ARC 106E Medals

Desc.

  Link.

  你有 \(n\) 个朋友,他们会来你家玩,第 \(i\) 个人 \(1...A_i\) 天来玩,然后 \(A_i+1...2A_i\) 天不来,然后 \(2A_i+1...3A_i\)
又会来,以此类推;

  每天你会选一个来玩的人,给他颁个奖,如果没人来玩,你就不颁奖。

  你要给每个人都颁 \(K\) 个奖,问至少需要多少天。

Sol.

  前面的部分很套路了,主要看看建出二分图后我们应该做什么。首先根据 Hall's marriage theorem,我们要做的是判断任意子集的邻域大小是否大于等于该子集的大小。把 \(n\) 个人拆成 \(n\times k\) 个点,可以发现进行判断时不需要把同一类点(由同一个工人拆出来的 \(k\) 个点)分开。设 \(f(S)\) 为满足存在集合 \(S\) 中任一工人会来打工的天数,则有解的一个充要条件为 \(\forall S\subseteq 2^{\{1,\dots,n\}},m-f(U\setminus S) \geqslant |S|\times k\)。

const int N = 18, K = 1e5;
int n, k, a[N + 5], f[2 * N * K + 5], g[1 << N];
bool check(int upp) {
    const int LIM = 1 << n, U = LIM - 1;
    for (int i=0;i<LIM;++i) g[i] = 0;
    rep (i,1,upp) g[f[i]]++;
    for (int j=0;j<n;++j) for (int i=0;i<LIM;++i) if (!(i&(1<<j))) g[i|(1<<j)] += g[i];
    for (int i=0;i<LIM;++i) if (upp - g[U^i] < __builtin_popcount(i) * k) return false;
    return true;
}
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(nullptr);
    rd(n, k); rds0i(a, n);
    for (int i=0;i<n;++i) {
        for (int t=0;;t+=2) for (int j=t*a[i]+1;j<(t+1)*a[i]+1;++j) {
            if (j > 2 * n * k) goto label;
            f[j] |= 1<<i;
        }
        label:;
    }
    int l = 0, r = 2 * n * k, res = -1;
    while (l <= r) {
        if (int mid = (l + r) / 2; check(mid)) r = mid - 1, res = mid;
        else l = mid + 1;
    }
    cout << res << "\n";
}

标签:...,个点,int,Solution,times,ARC,106E,Medals
From: https://www.cnblogs.com/orchid-any/p/17742322.html

相关文章

  • ElasticSearch系列-索引原理与数据读写流程
    索引原理倒排索引倒排索引(InvertedIndex)也叫反向索引,有反向索引必有正向索引。通俗地来讲,正向索引是通过key找value,反向索引则是通过value找key。ES底层在检索时底层使用的就是倒排索引。索引模型现有索引和映射如下:{"products":{"mappings":{"proper......
  • 几道 ARC 的题目
    写在前面的话我从今年\(7\)月末开始断断续续地写ARC的题目,\(9\)月中旬的时候已经做了少量的题了,还有许多F没写,一方面是因为我水平太差看不懂题解,另一方面是因为一种题写多了总是有一种无聊的感觉的。所以到此为止吧,把这些日子水的题放在这篇博客中吧,以后再写ARC的题大概......
  • springboot整合elasticsearch中的分词查询配置
    前言:elasticsearch最好还是在linux中进行集群部署,这样更符合企业需求和规范,笔者只在windows的单节点9200端口上部署,仅用于测试和学习。 什么是分词查询: 指的是将输入的文本或查询语句切分成一个个独立的词语或词项,以便更好地处理和分析,然后进行查询,比如你在百度上搜索”成都......
  • FPGA直方图均衡化 Label: Research
    使用FPGA对图像直方图做出均衡化,公式如下:$$D_{B}=f(D_{A})=\frac{D_{max}}{A_{0}}\sum_{i=0}^{D_{A}}H(i)$$上式中,H(i)为第i级灰度的像素个数,A为图像的面积,也即像素总数。因此,计算均衡后的图像步骤如下:(1)首先计算出当前图像......
  • [ARC035B] アットコーダー王国のコンテスト事情 题解
    前置芝士排列组合分析明显的贪心,第一问与此题思路相似,优先选择做时间少的,可以尽可能让后面的罚时尽量的小。难点在第二问,第二问问的是有几种可能性,有个显然的结论:相同做题时间的题目,位置调换答案仍然相同。那么可以用桶+排列组合来解决:用桶储存这个做题时间的出现次数\(b......
  • ElasticSearch的安装部署-----图文介绍
    文章目录背景什么是ElasticSearch使用场景ElasticSearch的在linux环境下的安装部署前期准备分配权限(正式实操)启动ElasticSearch创建用户组创建用户,并设置密码用户添加到elasticsearch用户组指定用户操作目录的一个操作权限切换用户解压elasticsearch修改es的配置文件修改jvm.opt......
  • CHAR与VARCHAR如何选择
    在CHAR和VARCHAR的选择上,这些情况下使用VARCHAR是合适的:字符串列的最大长度比平均长度大很多,列的更新很少;使用了像UTF-8这样复杂的字符集,每个字符都使用不同的字节数进行存储。CHAR适合存储很短的字符串,或者所有值定长或都接近同一个长度。例如,CHAR非常适合存储密码的MD5值,因为这是......
  • The solution of P3012
    problem&blog很明显是个DP。于是我们定义\(dp_{i,j,k}\)为末尾的字符的ASCII码为\(i\),有\(j\)个大写字母,\(k\)个小写字母。然后在枚举能接在\(i\)之后所有字母即可。然后考虑\(dp_{i,j,k}\)给后面的DP值得贡献。所以就有:\[dp_{\text{能接在i后面的字母},j......
  • The solution of ABC144F
    都不知道什么时候做的题了problem&blog一开始很容易想到枚举断边然后DP算代价。于是很容易想到DP状态定义:设\(dp_u\)为从\(u\)出发到\(n\)的期望步数。那么显然有\(dp_u=\sum^{v_n}_{v_1}\dfrac{dp_{v_{i}}}{d_u}\),其中\(d_u\)为\(u\)的出度。如果选择......
  • ElasticSearch笔记
    一、常用查询关键字1、matchmatch是模糊匹配查询,根据分词器(如果创建mapping没有指定分词器,Es将会采取默认的分词器:standard,standard分词将会把匹配的词组分成单个的字,而不是短语)将指定的query查询的语句进行分词匹配。#查询索引中name为Tom的文档:{'query':{......