您当前的位置: 首页 > 

对方正在debug

暂无认证

  • 4浏览

    0关注

    399博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Power Walking(贪心/排序/set)

对方正在debug 发布时间:2022-02-27 14:01:46 ,浏览量:4

题目 题意:给定一个长度为 n n n的数组,将这数组的元素分配到k个集合 s t i st_i sti​里边,要求每个元素都分配到其中一个集合,且每个集合不能为空。问怎么分配,才能使最终所有集合的大小和,最小。即求 m i n ( s u m i = 1 k ( s t i . s i z e ( ) ) ) min(sum_{i=1}^k(st_i.size())) min(sumi=1k​(sti​.size()))。其中k取1到n。

思路:贪心,将相同元素分配到同个集合,使相同的元素,贡献为1。 令 n u m num num表示数组中不同元素的个数,对于 k < = n u m knum k>num的情况,由于此时集合数量超过了不同元素个数,我们只能将相同元素,拆分到新的集合中。此时答案为 k k k。

#include
using namespace std;
#define ll long long
const int maxn = 300010;

int n, a[maxn], x;
set st;
// 排序和set都能过,unordered_set T了,有点神奇 
//unordered_set st;  
void solve() {
	scanf("%d", &n);
	st.clear();
	int num = 0;
	for (int i = 0; i             
关注
打赏
1664895754
查看更多评论
0.0444s