Wannafly Camp 2020 Day 5A Alternative Accounts
There are n different accounts on the website, and some of them competed in the recent k contests. However, Mike suspects that there are lots of alternative accounts.
There are axioms believed by everyone that nobody can use two different in one contest simultaneously and each account can be owned by only one person. So different accounts without overlapping contest participation can be owned by the same person.
Mike wants to know the minimum possible number of different people behind these accounts.
k=1
太简单,直接输出个数即可
k=2
max个数即可
k=3
把数字按照它出现的集合分为8类
1类为在所有集合中都出现,这类直接加进答案即可
2,3,4类为在某两个集合中出现,5,6,7类为在某一个集合中出现,8类为没有出现,其中第8类不用计入答案
首先将2类与5类中的一部分“匹配”掉并加入答案,同3-6,同4-7
如果2,3,4类中有剩余,那么这些一定是要被单独算答案的
5,6,7类单独算答案的贡献就是它们的max
我居然把它写RE了(捂脸爪巴爪巴
#include <bits/stdc++.h>
using namespace std;
int n,k,t1,t2,a[9][1000005],s[40];
vector <int> v[9];
int main() {
scanf("%d%d",&n,&k);
for(int i=1;i<=k;i++) {
scanf("%d",&t1);s[i]=t1;
for(int j=1;j<=t1;j++) {
scanf("%d",&t2);
a[i][t2]=1;
}
}
if(k==1) cout<<t1<<endl;
if(k==2) {
cout<<max(s[1],s[2])<<endl;
}
if(k==3) {
for(int i=1;i<=n;i++) {
if(a[1][i]==0 && a[2][i]==0 && a[3][i]==0) v[8].push_back(i);
if(a[1][i]==1 && a[2][i]==1 && a[3][i]==1) v[1].push_back(i);
if(a[1][i]==0 && a[2][i]==1 && a[3][i]==1) v[2].push_back(i);
if(a[1][i]==1 && a[2][i]==0 && a[3][i]==1) v[3].push_back(i);
if(a[1][i]==1 && a[2][i]==1 && a[3][i]==0) v[4].push_back(i);
if(a[1][i]==1 && a[2][i]==0 && a[3][i]==0) v[5].push_back(i);
if(a[1][i]==0 && a[2][i]==1 && a[3][i]==0) v[6].push_back(i);
if(a[1][i]==0 && a[2][i]==0 && a[3][i]==1) v[7].push_back(i);
}
int ans = 0;
ans += v[1].size();
while(v[2].size() && v[5].size()) ++ans, v[2].pop_back(), v[5].pop_back();
while(v[3].size() && v[6].size()) ++ans, v[3].pop_back(), v[6].pop_back();
while(v[4].size() && v[7].size()) ++ans, v[4].pop_back(), v[7].pop_back();
ans += v[2].size() + v[3].size() + v[4].size();
ans += max(v[5].size(), max(v[6].size(), v[7].size()));
cout<<ans<<endl;
}
}
Wannafly Camp 2020 Day 5A Alternative Accounts的更多相关文章
- Wannafly Camp 2020 Day 3I N门问题 - 概率论,扩展中国剩余定理
有一个猜奖者和一个主持人,一共有 \(n\) 扇门,只有一扇门后面有奖,主持人事先知道哪扇门后有奖,而猜奖者不知道.每一轮,猜奖者选择它认为的有奖概率最大(如果有多个最大,随机选一个)的一扇门,主持人 ...
- Wannafly Camp 2020 Day 3F 社团管理 - 决策单调性dp,整体二分
有 \(n\) 个数构成的序列 \({a_i}\),要将它划分为 \(k\) 段,定义每一段的权值为这段中 \((i,j) \ s.t. \ i<j,\ a_i=a_j\) 的个数,求一种划分方 ...
- Wannafly Camp 2020 Day 3D 求和 - 莫比乌斯反演,整除分块,STL,杜教筛
杜教筛求 \(\phi(n)\), \[ S(n)=n(n+1)/2-\sum_{d=2}^n S(\frac{n}{d}) \] 答案为 \[ \sum_{d=1}^n \phi(d) h(\fra ...
- Wannafly Camp 2020 Day 2B 萨博的方程式 - 数位dp
给定 \(n\) 个数 \(m_i\),求 \((x_1,x_2,...,x_n)\) 的个数,使得 \(x_1 \ xor\ x_2\ xor\ ...\ xor\ x_n = k\),且 \(0 ...
- Wannafly Camp 2020 Day 2D 卡拉巴什的字符串 - 后缀自动机
动态维护任意两个后缀的lcp集合的mex,支持在串末尾追加字符. Solution 考虑在 SAM 上求两个后缀的 LCP 的过程,无非就是找它们在 fail 树上的 LCA,那么 LCP 长度就是这 ...
- Wannafly Camp 2020 Day 1D 生成树 - 矩阵树定理,高斯消元
给出两幅 \(n(\leq 400)\) 个点的无向图 \(G_1 ,G_2\),对于 \(G_1\) 的每一颗生成树,它的权值定义为有多少条边在 \(G_2\) 中出现.求 \(G_1\) 所有生成 ...
- Wannafly Camp 2020 Day 2I 堡堡的宝藏 - 费用流
感谢这道题告诉我KM求的是 完备 最大权匹配 :( #include <bits/stdc++.h> using namespace std; #define reset(x) memse ...
- Wannafly Camp 2020 Day 2J 邦邦的2-SAT模板
#include <bits/stdc++.h> using namespace std; int main() { int n; cin>>n; cout<<n& ...
- Wannafly Camp 2020 Day 2F 采蘑菇的克拉莉丝 - 树链剖分
如果暴力维护,每次询问时需要对所有孩子做计算 考虑通过树剖来平衡修改与询问的时间,询问时计算重链和父树,轻链的贡献预先维护好,修改时则需要修改可能影响的轻链贡献,因为某个点到根的路径上轻重交替只有 \ ...
随机推荐
- PostgreSQL将日期转为当前年、月、日的函数date_trunc
PostgreSQL将日期转为年.月.日的函数date_trunc: 当前年: select date_trunc('year',now()) 当前月: select date_trunc('mo ...
- MySQL 什么是事务?
该文为< MySQL 实战 45 讲>的学习笔记,感谢查看,如有错误,欢迎指正 一.事务简介 事务就是为了保证一组数据库操作,要么全部成功,要么全部失败. 事务是在引擎层实现的,也就是说并 ...
- 查看deepin操作系统版本命令
cat /proc/version cat /etc/debian_version cat /etc/os-release lsb_release -a uname -a uname -r sc ...
- docker配置仓库源
1 修改docker配置文件 下面的内网ip改成公司的私有仓库地址 后面两个建议保留(一个是国内加速源,一个是国外仓库.这两个删了也是可以的) 2 重启docker服务 # vim /etc/dock ...
- Python面向对象设计小结
转自林海峰老师,学习之余做的笔记. class School: zhuti='学生和老师‘ def __init__(self,name,dic,country): self.mingzi=name ...
- ubuntu18.04误删apt-get命令恢复总结
1.背景 由于使用aptitude命令替换了apt-get命令后感到后悔,想要恢复apt-get命令,特此总结以下踩过的坑 aptitude和apt-get的区别:https://www.cnblog ...
- SpringBoot整合NoSql--(二)MongoDB
简介: MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案.MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是 ...
- 如何将文本放置在div的底部显示呢?
转自:将文本定位于div的底部的方法 摘要: 下文讲述将文本放于div的底部的两种方法,如下所示: 实现思路: 思路1:采用绝对定位的方式,将其放置于div的底部 思路2:使用Line-height ...
- c#Socket通信基本使用
基本流程 Server private void btnStart_Click(object sender, EventArgs e) { try { //当点击开始监听时在服务器端创建一个负责监视I ...
- MySQL 8 重置 root 密码
如果 root 密码丢失,如何重置 root 密码? 重置 root 密码:Unix 和 类 Unix 系统: 1.登录 Unix 系统用户(运行MySQL服务器的用户) 2.停止MySQL服务器 ...