【蓝桥每日一题]-贪心(保姆级教程 篇2)#纪念品分组 #gcd排序

news/2024/7/11 2:48:18 标签: 算法, 数据结构, c++, 贪心, 贪心算法

目录

题目:纪念品分组

思路:

题目:gcd排序

思路:

题目:纪念品分组

      

          

思路:

贪心思路:先将数据从小到大排序(默认),然后让最左边l和最右边r匹配,如果可以就分成一组,如果不行就让r单独一组。

      
(因为目前最小的都不能和r一组了,所以要放弃r的分组)l继续匹配下一个。直到把所有数据完全分组即可。
  

#include<bits/stdc++.h>                    
using namespace std;
int W,ans=0;
int n,a[30001];
int l,r,i;
int main()
{
    cin>>W>>n;
    for(i=1;i<=n;i++)
      cin>>a[i];
    sort(a+1,a+n+1);
    l=1;  r=n;
    while(l<=r)//一定要有等号,因为如果没等号的话,可能导致最中间的数据无法遍历分组
    {
        if(a[l]+a[r]<=W)   //如果能分就分到一组
          l++,r--,ans++;
        else
          r--,ans++;   //不能就让r单独一组
    }
    printf("%d",ans);
    return 0;
}

   

   

   

题目:gcd排序

 (来自codeforces(893)的一题)题意:将数组1~n进行排列,得到每组的gcd(a[i],a[i+1]),其中不同的数越多,分数越高,问最大分的排列方式

比如输入5:我们应该排列成1 2 4 3 5 然后获得gcd数(1 2 1 1 1)得到分数为2,因为有两个不同的gcd数嘛。无论你再怎么排列也找不到得分更高的了。

        

思路:

cf里面的题比较考思维,主要是枚举简单数据寻找规律就行,我们发现后一个数是前面的倍数时就可以把前面的数取做新的gcd数,所以就按这样排列。

       

啊,听不懂?那举个例子,输入10 开始

   

我们先排列从1开始安排:1 2此时获得gcd(1),那么紧接着安排上4,变成1 2 4就获得了gcd(1 2),然后安排上8,变成gcd(1 2 4),然后没有16,那么8是不可能成为gcd的

    

然后从3开始安排 :3 6 (12没有不管了)

    

然后从5开始安排:5 10

     

然后从7开始安排:7

    

然后从9开始安排:9

    

最后获得排列顺序1 2 4 8 3 6 5 10 7 9,这样就能获得最多的不同的gcd个数

    

       

#include <bits/stdc++.h> 
using namespace std;
const int N=1e5;
int a[N];
int main(){
	int t;cin>>t;
	while(t--){
		int n,cur=0;cin>>n;
		for(int i=1;i<=n;i+=2)//1,3,5,7,9,开始往后翻倍
		  for(int j=i;j<=n;j*=2){//虽然我证明不出来,但是确实所有例子都符合呀
		  	 a[++cur]=j;
		  }
		for(int i=1;i<=n;i++){
			cout<<a[i]<<' ';
		}cout<<'\n';
	}	
}


http://www.niftyadmin.cn/n/5125642.html

相关文章

前端js面试题 (三)

文章目录 JavaScript有哪些垃圾回收机制&#xff1f;null和 undefined的区别是什么&#xff1f;new操作符的作用是什么&#xff1f;this 的指向哪几种 &#xff1f;JS 中继承实现的几种方式原型继承构造函数继承&#xff08;对象冒充继承&#xff09;组合继承&#xff08;终极版…

在antd里面渲染MarkDown并且自定义一个锚点目录TOC(重点解决导航目录不跟随文档滚动的问题)

一、整体思路 由于有很多很长的文档需要渲染&#xff0c;我觉得用MarkDown的方式会比较适合管理&#xff0c;所以这两天测试了一下在antd里面集成MarkDown的渲染模块。 总体思路参考&#xff1a; https://blog.csdn.net/Sakuraaaa_/article/details/128400497 感恩大佬的倾情付…

补码为什么要+1

关于补码的文章&#xff0c;csdn上面遍地都是&#xff0c;所以我们大可不必搬运别人的文章来装点门面&#xff0c;我写这篇博客是想补充一个问题“补码为什么要1”的问题&#xff0c;这个问题&#xff0c;博客园有个叫张子秋的文章写的很好&#xff0c;但是最后对补码为什么1的…

美国IP代理如何获取?适用于哪些场景?

美国代理IP可以是静态&#xff08;不会改变&#xff09;或动态&#xff08;周期性更改&#xff09;&#xff0c;并且可以由专业的代理服务提供商提供。不同的代理IP服务提供商可能提供不同类型的代理&#xff0c;包括数据中心代理、住宅代理和移动代理&#xff0c;以满足不同用…

Active learning Tiny Review for autonomous driving

Introduction 阅读某一特定主题的一本书不会使你成为专家&#xff0c;阅读多本包含相似内容的书也不会。真正掌握一项技能或领域的知识需要来自多样化信息源的大量信息。 这对于自动驾驶和其他人工智能技术同样适用。 负责自动驾驶功能的深度神经网络需要经过详尽的训练&#…

基于机器视觉的停车位识别检测 计算机竞赛

简介 你是不是经常在停车场周围转来转去寻找停车位。如果你的车辆能准确地告诉你最近的停车位在哪里&#xff0c;那是不是很爽&#xff1f;事实证明&#xff0c;基于深度学习和OpenCV解决这个问题相对容易&#xff0c;只需获取停车场的实时视频即可。 该项目较为新颖&#xf…

使用Go模块进行依赖管理

摘要&#xff1a;本文将介绍Go语言中的模块&#xff08;module&#xff09;概念&#xff0c;以及如何使用Go模块进行依赖管理。我们会探讨模块的基本概念、使用方法、配置和依赖关系管理等方面的内容。 一、引言 Go语言自2007年发布以来&#xff0c;一直以其简洁、高效和强大…

Jmeter基础---while控制器举例说明

一、 While 控制器 首先创建一个While Controller (While 循环控制器) ​​ 设置界面如下&#xff1a; Condition (function or variable) &#xff1a;条件说明 条件为 Flase 的时候&#xff0c;才会跳出 While 循环&#xff0c;否则一直执行 While 控制器下的样例 1、不填…