前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >2020 CCPC Wannafly Winter Camp Day5 Div.1&2 A题(二进制 枚举 贪心)

2020 CCPC Wannafly Winter Camp Day5 Div.1&2 A题(二进制 枚举 贪心)

作者头像
glm233
发布2021-03-23 12:01:07
2920
发布2021-03-23 12:01:07
举报
文章被收录于专栏:glm的全栈学习之路

题目传送门

思路:由于k小于等于3 所以至多有三场比赛 当只有一场比赛的时候 答案就是参加比赛的人数

两场比赛的时候就是 max(只参加1,只参加2)加上1、2都参加

三场比赛也是同理 但需要用到贪心策略

先把1 2、1 3 、2 3 全部消耗掉 可以分别和3、2、1匹配然后最终只剩下 1 、2、3 取剩下最大值即可~

代码语言:javascript
复制
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int n,a[N],k,st[N],num[N];
int main(){
	cin>>n>>k;
	for(int i=0;i<k;i++){
		int x;
		cin>>x;
		for(int j=0;j<x;j++){
			int tep;
			cin>>tep;
			st[tep]|=(1<<i);
		}
	}
	
	for(int i=1;i<=n;i++){
		num[st[i]]++;
	}
	if(k==1){
		cout<<num[1]<<endl;
		return 0;
	}
	else if(k==2){
		int ans=num[3],test=max(num[1],num[2]);
		cout<<ans+test<<endl;
		return 0;
	}
	int ans=num[7];
	ans+=num[6],num[1]-=min(num[1],num[6]);
	ans+=num[3],num[4]-=min(num[4],num[3]);
	ans+=num[5],num[2]-=min(num[2],num[5]);
	ans+=max(num[1],max(num[4],num[2]));
	cout<<ans<<endl;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/03/21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档