zoukankan      html  css  js  c++  java
  • Create The Teames(贪心)

    Create The Teames

    原题链接:传送门

    题目大意

    有一个数组具有n个数字,对这n个数进行分组,要求:每一个小组内元素个数乘以小组内元素的最小值必须要大于等于给定值 x

    问最多可以分多少组(可以存在有的元素不在任意一组之内)

    分析

    这个问题很明显是一个贪心问题,我们可以对该数组进行从大到小排序,依次检验从该元素开始最多向右移动几次可以巨被分成一个组的条件如果具备条件则立即划分。

    这题其实自己是A掉了的 但是代码写的好像有点长了,没有标程写的简单,那就贴出来学习一下标程也是对自己今后写代码的一个启示。

    AC 代码

    自己的代码

    void slove()
    {
    	int n , x;
    	cin >> n >> x;
    	vector<int> a(n + 1);
    	for(int i = 0;i < n ;i ++)cin >> a[i];
    	sort(a.begin(),a.end(),greater<int>());
    	int id = 0, size = 1 , minc = a[id] , ans = 0;
    	while(id < n)
    	{
    		if(a[id] >= x){
    			id++;ans++;
    			continue;
    		}
    		size = 1 , minc = a[id];
    		while(id < n && size * minc < x)
    		{
    			id++;size++;minc = min(minc , a[id]);
    		}id++;
    		if(size * minc >= x)ans ++;
    	}
    	cout << ans << endl;
    }
    

    标程代码

    写法确实很好值得学习这样优美简单的代码

    void slove()
    {
    	int n , x;cin >> n >> x;
    	vector<int> a(n + 1);
    	for(int i = 0;i < n ;i ++)cin >> a[i];
    	sort(a.begin(),a.end(),greater<int>());
    	int size = 0 , ans = 0;
    	for(auto p : a)
    	{
    		size++;
    		if(p * size >= x)
    		{
    			size = 0;ans++;
    		}
    	}
    	cout << ans << endl;
    }
    
  • 相关阅读:
    hdu 1255 矩形覆盖面积(面积交)
    hdu 3642 覆盖3次以上体积
    hdu 3255 体积并
    hdu 3265 矩形剪块面积并
    HDU 3397 区间覆盖,颠倒,合并(好题)
    ACM-线段树扫描线总结
    POJ 3667 线段树区间合并
    数组排序----Demo
    Spring MVC配置详解(3)
    生产者消费者模式--
  • 原文地址:https://www.cnblogs.com/wlw-x/p/13621053.html
Copyright © 2011-2022 走看看