Codeforces1195A Drinks Choosing 贪心

题意:有n个学生,k种饮料,每个学生需要一种饮料,有n/2向上取整组饮料,每组饮料有两个同种饮料,求得到满足的学生的最多个数
思路:每次取偶数个肯定是最优的,输入的时候判断当前品种饮料是否需求为偶数,是则减去一组,满足学生加2,并将标志设为0,若还有剩余没选,则从当前剩余的单数个中选完剩余饮料,每选一次满足学生加1

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1005;
int n, k, a[maxn], vis[maxn];
int main()
{
	while (cin >> n >> k) {
		int t = (n+1) / 2, res = 0;
		memset(vis, 0, sizeof(vis));
		for (int i = 0; i < n; i++) {
			cin >> a[i];
			if (vis[a[i]] && t >= 1) {
				res += 2;
				vis[a[i]] = 0;
				t--;
			}
			else
				vis[a[i]] = 1;
		}
		for (int i = 0; i <= k; i++)
			if (vis[i] && t >= 1) {
				res++;
				t--;
			}
		cout << res << endl;
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值