贪心算法专题

news2024/11/27 0:26:57

1.Acwing 1055. 股票买卖 II

题目链接:1055. 股票买卖 II - AcWing题库

思路:逢涨就买

#include<iostream>
using namespace std;

int main()
{
    int n;
    long long ans=0;
    int a[100005];
    cin>>n;
    cin>>a[0];
    for(int i=1;i<n;++i)
    {
        cin>>a[i];
        if(a[i]>a[i-1]) ans+=a[i]-a[i-1];
    }
    
    cout<<ans<<endl;
    
    return 0;
}

2.ACwing 104. 货仓选址

题目链接:104. 货仓选址 - AcWing题库

思路:货仓一定在最中间的商店(即货仓左端的商店数一定等于货仓右边的商店数)

如果左右商店数不一样,如左边有2个,右边有4个

-------1--------2---------货仓-------3---------4---------5-----------6

那么,货仓往左移动d个单位,左边商店离货仓的总距离减少2d,右边商店离货仓的总距离增加4d,总距离增加2d。

同理可得,若货仓向右移动d个单位,总距离减少2d。

所以为了找到最佳选址,货仓现在应该向右移动,直到左右商店数都相等。

AC代码:

#include<iostream>
#include<algorithm>
using namespace std;

int main()
{
    int n;
    long long ans=0;
    long long a[100005];
    cin>>n;
    
    for(int i=1;i<=n;++i)
    {
        cin>>a[i];
    }
    
    sort(a+1,a+n+1);
    
    int mid=(n+1)>>1;
    
    for(int i=1;i<=n;++i)
    {
        ans+=abs(a[i]-a[mid]);
    }
    
    cout<<ans<<endl;
    
    return 0;
}

3.Acwing 122. 糖果传递

题目链接:122. 糖果传递 - AcWing题库

思路:设最终每个小朋友最终得到M个糖果,第n个小朋友给第1个小朋友x1个糖果,第1个小朋友给第二个小朋友x2个糖果,以此类推,可以得到:

 AC代码:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;

const int MAXN = 1000005;
typedef long long ll;
int n;
int mid;
ll M=0,ans=0;
ll a[MAXN];
ll c[MAXN];


int main()
{
    cin>>n;
    for(int i=1;i<=n;++i) 
    {
        scanf("%d",&a[i]);
        M+=a[i];
    }
    
    M/=n;
    mid=(n+1)>>1;
    
    for(int i=2;i<=n;++i)
    {
        c[i]=c[i-1]+M-a[i-1];
    }
    
    sort(c+1,c+n+1);
    
    for(int i=1;i<=n;++i)
    {
        ans+=abs(c[i]-c[mid]);
    }
    
    cout<<ans<<endl;
    
    return 0;
}

4. Acwing112. 雷达设备

题目链接:112. 雷达设备 - AcWing题库

思路:先算出每个小岛如果可以被覆盖的话,雷达可以设立的区间。

再根据每个区间的右端点 从小到大排序,每次选每段区间的右端点。

如果上次选择的右端点在这次的范围内,则这次的小岛已经被上次的雷达覆盖,不需再设雷达。

AC代码:

#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;

const int MAXN = 1005;
int x,y;
int n,d;
double len;
bool noAns;
double last = -1e20;
int ans=0;

struct Segment
{
    double l,r;
    bool operator<(const Segment a)const
    {
        return r<a.r;
    }
}s[MAXN];

int main()
{
    cin>>n>>d;
    
    for(int i=0;i<n;++i)
    {
        cin>>x>>y;
        if(y>d) noAns=true;
        else
        {
            len=sqrt((double)d*d-y*y);
            s[i]={x-len,x+len};
        }
    }
    
    sort(s,s+n);
    
    for(int i=0;i<n;++i)
    {
        if(last<s[i].l){
            ans++;
            last=s[i].r;
        }
    }
    
    if(noAns) cout<<"-1"<<endl;
    else cout<<ans<<endl;
    
    return 0;
    
    
}

5.Acwing 1235. 付账问题

题目链接:1235. 付账问题 - AcWing题库

评价:老6数据,最后一个测试点精度差0.0001

思路:先将每个人的钱数从小到大排序,如果这个人的钱低于平均值,那么他就得All in,同时后面的人也会因此付出更多的钱来弥补,当钱多的人弥补的钱数都相等时,方差最小。每次有人付不够钱,都要更新 每个人应付钱数的平均值,直到有人可以付清平均值的钱数(也意味着后面的所有人也都能付清钱),停止更新。

注意点:选用long double 提高精度

AC代码:

#include<iostream>
#include<algorithm>
#include<cmath>
#include<iomanip>
using namespace std;

const int MAXN = 500005;

int main()
{
    int n;
    int a[MAXN];
    long double ans=0;
    long double S;
    long double tm,M;
    
    cin>>n>>S;
    for(int i=0;i<n;++i) cin>>a[i];
    
    sort(a,a+n);
    M=S/n;
    tm=M;
    
    for(int i=0;i<n;++i)
    {
        //tm=S/(n-i);
        if(a[i]<tm)
        {
            ans+=(M-a[i])*(M-a[i]);
            //S-=a[i];
            tm+=(tm-a[i])/(n-i-1);
        }
        else
        {
            ans+=(M-tm)*(M-tm);
            //S-=tm;
        }
    }
    ans=sqrt(ans/n);
    
    cout<<fixed<<setprecision(4)<<ans<<endl;
    
    return 0;
}

6.Acwing 1247. 后缀表达式

题目链接:1247. 后缀表达式 - AcWing题库

思路:分类讨论:

1.没有减号 那直接将所有数相加即可

2.有减号,且数据有正有负。可以利用减号将任意个负数变为正数

一个负数: -a                  a为负数

多个负数:-(a+b+c)    a,b,c为负数

3.有减号,且数据都为正:将一个整数减两遍可以让他还是整数,但还必须减掉一个

例:a-(b-c-d)= a + c + d -b

4有减号,且数据都为负:打头的数字一定是加,必须加一个负数

AC代码:

#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;

typedef long long ll;
const int MAXN = 200005;
int n,m;
ll a[MAXN];
ll ans=0;

int main()
{
    cin>>n>>m;
    for(int i=0;i<n+m+1;++i) cin>>a[i];
    
    sort(a,a+n+m+1);
    
    if(m==0)
    {
        for(int i=0;i<=n;++i) ans+=a[i];
    }
    else
    {
        if(a[0]>0) 
        {
            ans=-a[0];
            for(int i=1;i<n+m+1;++i) ans+=a[i];
        }
        else if(a[n+m]<0)
        {
            ans=a[n+m];
            for(int i=0;i<n+m;i++) ans+=abs(a[i]);
        }
        else
        {
            for(int i=0;i<n+m+1;++i) ans+=abs(a[i]);
        }
    }
    
    cout<<ans<<endl;
    
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/167065.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言—动态内存管理

专栏&#xff1a;C语言 个人主页&#xff1a;HaiFan. 专栏简介&#xff1a;本专栏主要更新一些C语言的基础知识&#xff0c;也会实现一些小游戏和通讯录&#xff0c;学时管理系统之类的&#xff0c;有兴趣的朋友可以关注一下。 动态内存管理前言一、为什么会存在动态内存分配二…

磨金石教育分享||CG特效技术主要应用在哪几个领域

前面我们介绍了很多关于CG特效的知识&#xff0c;我们知道CG特效发展的历史以及重大意义。那么我们今天再来详细讨论一下CG特效主要应用的几个领域。近几年文化艺术的发展伴随着互联网信息技术高速传播。文化艺术产业变得多元&#xff0c;动漫、3A大作游戏、商业大片、虚拟现实…

Java 元注解

​ 元注解是负责对其它注解进行说明的注解&#xff0c;自定义注解时可以使用元注解。Java 5 定义了 4 个注解&#xff0c;分别是 Documented、Target、Retention 和 Inherited。Java 8 又增加了 Repeatable 和 Native 两个注解。这些注解都可以在 java.lang.annotation 包中找到…

前端压缩图片为指定宽高

压缩图片原理 通过原生的input标签拿到要上传的图片文件将图片文件转化成img元素标签在canvas上压缩绘制该HTMLImageElement将图片转化为一个包含图片展示的data URI&#xff0c;即图片被转换成base64编码的字符串 实现 通过原生的input标签拿到上传的图片文件 css部分<…

Linux 通过监控监控系统内存并定时重启指定服务

一、使用Free命令监控系统内存 1.1 查看系统内存情况 free -m1.1.1 获取空闲物理内存 echo Mem-free: `free -m | grep Mem | awk {print $4}`M1.1.2 获取缓冲区内存

php 安装curl扩展支持sftp协议

原因&#xff1a;php默认安装的依赖的libcurl.so中不支持sftp 协议 解决方法&#xff1a;先安装libssh2&#xff0c;curl安装时编译参数带–with-libssh2&#xff0c;这样可以支持sftp 一.编译安装libssh2-1.8.0 1.下载源码 地址: https://github.com/libssh2/libssh2 2.编译…

requests页面常用操作(post、put、get、head、patch、delete方法)

1 requests主要方法2 请求返回信息3 应用3.1 登录页面3.2 退出登录3.3 修改参数3.4 上传文件Requests 是一个 Python 的 HTTP 客户端库。每次调用 requests 请求之后&#xff0c;会返回一个 response 对象&#xff0c;该对象包含了具体的响应信息。可以通过requests模拟提交请求…

蓝桥杯 stm32 实现 ADC 采集数据功能 CubeMX

文章内的代码使用 HAL 库。 ADC 即 模数转换器&#xff0c;是指 将 连续变化的模拟信号 转换成 离散的数字信号 的器件。 文章目录前言一、ADC 原理图二、CubeMX 配置三、ADC 代码讲解总结前言 一、ADC 原理图 从原理图我们可以看到 STM32G431 内部集成 两个 最高位 12 位 的 A…

通信电子、嵌入式类面试题刷题计划03

文章目录021——"Hello, world!"022——计算圆的面积023——打印10x10的星号024——字符串打印025——打印26个英文字母026——strlen函数的用法027——sizeof函数的使用028——if else、变量赋值语句029——if else语句030——if elseif else语句&#xff0c;判断是…

数字IC设计、验证、FPGA笔试必会 - Verilog经典习题 ( 七)求两个数的差值

数字IC设计、验证、FPGA笔试必会 - Verilog经典习题 &#xff08;七&#xff09;求两个数的差值 &#x1f508;声明&#xff1a; &#x1f603;博主主页&#xff1a;王_嘻嘻的CSDN博客 &#x1f9e8;未经作者允许&#xff0c;禁止转载 &#x1f511;系列专栏&#xff1a;牛客Ve…

Redis作为缓存应用场景分析

为什么使用缓存 Redis是一个内存型数据库&#xff0c;也就是说&#xff0c;所有的数据都会存在与内存中&#xff0c;基于Redis的高性能特性&#xff0c;我们将Redis用在缓存场景非常广泛。使用起来方便&#xff0c;响应也是远超关系型数据库。 应用场景 Redis的应用场景非常…

绝了,超越YOLOv7、v8,YOLOv6 v3.0正式发布

超越YOLOv7、v8! YOLOv6 v3.0正式发布!!! YOLOv6 全新版本v3.0正式发布&#xff01;引入新的网络架构和训练方案&#xff0c;其中YOLOv6-S以484 FPS的速度达到45.0% AP&#xff0c;超过YOLOv5-S、YOLOv8-S&#xff0c;其代码刚刚开源 由于前段时间Ultralytics公司透露出V8的发…

马哥架构第2周课程作业

haproxy、nginx、lvs负责均衡相关的话题一. nginx和haproxy的异同点二. 实现haproxy四层地址透传&#xff0c;并且做基于cookie的会话保持2.1 haproxy四层地址透传2.2 基于cookie的会话保持2.2.1 配置选项2.2.2 配置示例2.2.3 验证 Cookie 信息三. 实现自定义错误页面和https的…

【学习笔记】【Pytorch】12.损失函数与反向传播

【学习笔记】【Pytorch】12.损失函数与反向传播一、损失函数的介绍1.L1Loss类的使用代码实现2.MSELoss类的使用3.损失函数在模型中的实现二、反向传播一、损失函数的介绍 参考&#xff1a; 损失函数&#xff08;loss function&#xff09; pytorch loss-functions 文档 作用&…

【JavaEE】基于TCP的客户端服务器程序

✨哈喽&#xff0c;进来的小伙伴们&#xff0c;你们好耶&#xff01;✨ &#x1f6f0;️&#x1f6f0;️系列专栏:【JavaEE】 ✈️✈️本篇内容:基于TCP的客户端服务器程序。 &#x1f680;&#x1f680;代码存放仓库gitee&#xff1a;JavaEE初阶代码存放&#xff01; ⛵⛵作者…

【JavaEE初阶】第二节.进程篇

文章目录 前言 一、操作系统 二、进程 2.1 进程的概念 2.2 进程的管理​​​​​​​​​​​​​​ 2.3 PCB 2.3.1 PCB里面的一些属性 2.3.2 进程的调度 2.3.3 进程的虚拟地址空间 2.3.4 进程间通信 总结 前言 本节内容我们继续对JavaEE的有关内容进行学习&#xff0c;…

汽车智能化,集度做加法

CES2023刚刚落下帷幕&#xff0c;这场名为“国际消费电子展”的业界盛会&#xff0c;近几年重心正明显转向智能汽车及其周边产业链。在2022年的CES上&#xff0c;集度与英伟达宣布合作&#xff0c;也透露了智能汽车研发的相关计划。而在本届CES之前、2022年末的广州车展上&…

一个关于image访问图片跨域的问题

一、背景 项目中遇到一个问题&#xff0c;同一个图片在 dom 节点中使用了 img 标签来加载&#xff0c;同时由于项目使用了 ThreeJS 3D 渲染引擎&#xff0c;在加载纹理时使用了 TextureLoader 来加载了同一张图片&#xff0c;而由于图片是在阿里云服务器上的&#xff0c;所以最…

SourceTree 拉取、重置提交、回滚、变基与合并

SourceTree的重置当前分支到此次提交 使用场景&#xff1a;“我想把已提交未推送的修改撤销” 使用模式说明软合并软合并是指将此次提交回滚到指定提交位置&#xff0c;但这个过程中会将修改过的文件暂存到暂存区。混合合并混合合并是指将此次提交回滚到指定的位置&#xff0c…

本来挺喜欢刷《剑指offer》的.......(第十一天)

跟着博主一起刷题 这里使用的是题库&#xff1a; https://leetcode.cn/problem-list/xb9nqhhg/?page1 目录剑指 Offer 66. 构建乘积数组剑指 Offer 68 - I. 二叉搜索树的最近公共祖先剑指 Offer 68 - II. 二叉树的最近公共祖先剑指 Offer 66. 构建乘积数组 剑指 Offer 66. 构建…