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

2021-03-23 12:01:07 浏览数 (1)

题目传送门

思路:由于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;
}
max

0 人点赞