AcWing1536. 均分纸牌 AcWing122. 糖果传递—数学推导、贪心

news2024/11/26 15:40:13

均分纸牌 && 糖果传递

  • 均分纸牌
  • 糖果传递

均分纸牌

题目链接 AcWing1536. 均分纸牌
问题描述
在这里插入图片描述
分析

这道题有个特殊的地方就是A1只能从A2获取纸牌,或者A1只能将多余的纸牌给A2,此操作后A1的纸牌数应该为avg。
A2的纸牌只能从A3获取,或者给A3不能从A1获取,或者给A1,因为A1==avg,这样做会使得操作重复(A1就是通过A2来达到avg的),这样我们就能知道当前的数Ai要通过Ai+1来达到avg。这里我们从左端A1来考虑,从右端An来考虑也是可以的。

代码如下

#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=110;
int f[N];
int res=0;

int main(){
    int n,sm=0;
    cin>>n;
    for(int i=1;i<=n;i++){
       scanf("%d",&f[i]);
       sm+=f[i];
    } 
    int avg=sm/n;
    for(int i=1;i<=n;i++)
        if(f[i]!=avg){
            res++;
            f[i+1]+=f[i]-avg;
        }
    cout<<res;
    return 0;
}

糖果传递

问题链接 AcWing122. 糖果传递
问题描述
在这里插入图片描述
分析
这道题看起来和上面的题很像,其实题意确实差不多,区别就是上一道题的两端和这道题的两端不同,这道题是一道环型均分纸牌问题,虽然改动了一点,但是解法却完全不同。
在这里插入图片描述
如图所示,a1可以从a2获得x2,a2可以从a3获得x3,… ,an从a1获得x1,其中x2,x3,…,x1可正可负。
我们可以预先得到均分后的糖果数量 avg=(a1+a2+…+an)/n
那么就有

a1+x2-x1=avg
a2+x3-x2=avg
a3+x4-x3=avg
.....
an-1 + xn -xn-1=avg
an +x1-xn=avg

变形后可得

x1-x2=a1-avg
x2-x3=a2-avg
....
xn-1 - xn=an-1 - avg
xn-x1 = an-avg

依次从下往上做累加可得

0=0
x2-x1=(an+an-1+..+a2)-(n-1)*avg
....
xn-1 -x1=(an-1 +an)-2*avg
xn-x1=an-avg

再将x1挪到右边,让x2~xn由x1来表示

x1=x1
x2=x1+(an+an-1+..+a2)-(n-1)*avg
....
xn-1=x1+(an-1 +an)-2*avg
xn=x1+an-avg

再变形,将等式右边转化成差的形式

x1=x1-0
x2=x1-{(n-1)*avg-(an+an-1+..+a2)}
....
xn-1=x1-{2*avg-(an-1 +an)}
xn=x1-{avg-an}

我们的目标是求最小的代价,也就是求最小的|x1|+|x2|+…+|xn|
那么根据上式,

min{|x1|+|x2|+....+|xn|}=min{|x1-0|+|x1-{(n-1)*avg-(an+an-1+..+a2)}|+.....+|x1-{2*avg-(an-1 +an)}|+|x1-{avg-an}|}

其中

min{|x1-0|+|x1-{(n-1)*avg-(an+an-1+..+a2)}|+.....+|x1-{2*avg-(an-1 +an)}|+|x1-{avg-an}|}

是不是看起来很熟悉?这个就是找到一个点x1,让x1到点0,(n-1)avg-(an+an-1+…+a2),…{2avg-(an-1 +an)},{avg-an}的距离和最小,那么这就相当于是一个区间选址问题,那这就很容易解决了。

总结,这道题偏数学,如果第一次遇到很难想出来这种解法

代码如下

#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N=1e6+10;

ll f[N];
int h[N];
int main(){
    ll n,avg=0,res=0;
    cin>>n;
    for(int i=0;i<n;i++){
        scanf("%d",&h[i]);
        avg+=h[i];
    }
    avg/=n;
    ll t=0;
    for(int i=0;i<n;i++){
        t+=avg-h[n-i-1];
        f[i]=t;
    }
    sort(f,f+n);
    for(int i=0;i<n;i++)
        res+=abs(f[n>>1]-f[i]);
    cout<<res;
    return 0;
}

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

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

相关文章

PS VR2头显有望将与PC兼容,并实现破解6DOF跟踪功能

Sony在今年早些时候推出了专门为PlayStation 5打造的高级虚拟现实头显PS VR2&#xff0c;这款头显赢得了行业的赞誉&#xff0c;为用户提供了独特的体验。 然而&#xff0c;由于其高达599美元&#xff08;约合4283元人民币&#xff09;的售价&#xff08;相比于售价为399美元的…

MySQL学生表和分数表的多表查询

目录 一、创建学生表 二、创建分数表 1.查询student表的所有记录 2.查询student表的第2条到4条记录 3.从student表查询所有学生的学号&#xff08;id&#xff09;、姓名&#xff08;name&#xff09;和院系&#xff08;department&#xff09;的信息 4.从student表中查询计…

【Hello mysql】 mysql的索引

Mysql专栏&#xff1a;Mysql 本篇博客简介&#xff1a;介绍mysql的索引 mysql索引 索引索引是什么索引的分类索引作用查看 磁盘mysql的工作过程认识磁盘定位扇区磁盘随机访问(Random Access)与连续访问(Sequential Access)mysql和磁盘交互的基本单位 索引的理解建立测试表为何I…

Python(十四)数据类型——浮点型

❤️ 专栏简介&#xff1a;本专栏记录了我个人从零开始学习Python编程的过程。在这个专栏中&#xff0c;我将分享我在学习Python的过程中的学习笔记、学习路线以及各个知识点。 ☀️ 专栏适用人群 &#xff1a;本专栏适用于希望学习Python编程的初学者和有一定编程基础的人。无…

Redis(分布式缓存详解)

Redis 一、Redis简介1.1. 适用场景1.2. 常用数据类型1.3. 单点Redis缺陷 二、持久化机制&#xff08;解决数据丢失&#xff09;2.1. RDB2.1.1. RDB优缺点 2.2. AOF2.2.1. AOF配置2.2.2. AOF优缺点 三、Redis集群3.1. 主从&#xff08;解决并发读&#xff09;3.1.1. 主从数据同步…

HBase v2.2 高可用多节点搭建

最近刚刚完成了HBase相关的一个项目,作为项目的技术负责人,完成了大部分的项目部署,特性调研工作,以此系列文章作为上一阶段工作的总结. 前言 其实目前就大多数做应用的情况来讲,我们并不需要去自己搭建一套HBase的集群,现有的很多云厂商提供的服务已经极大的方便日常的应用使…

GEE:计算每个对象的面积、标准差、周长、宽度、高度

作者:CSDN @ _养乐多_ 本文记录了面对对对象分割,以及计算每个对象的面积、标准差、周长、宽度、高度的代码。 文章目录 一、代码一、代码 // 设置种子 var seeds = ee.Algorithms.Image.Segmentation.seedGrid(20)

node.js 第一天

目录 使用readFile()方法读取文件内容 判断文件是否读取成功 判断文件是否写入成功 案例 考试成绩整理 path path.join&#xff08;&#xff09; path.basename() 使用readFile()方法读取文件内容 // 1. 导入 fs 模块&#xff0c;来操作文件 const fs require(fs)// 2.…

Redis(二)网络协议和异步方式(乐观锁悲观锁)

Redis系列文章 Redis&#xff08;一&#xff09;原理及基本命令&#xff08;柔性数组&#xff09; Redis&#xff08;二&#xff09;网络协议和异步方式&#xff08;乐观锁&悲观锁&#xff09; Redis&#xff08;三&#xff09;存储原理与数据模型&#xff08;hash冲突、渐…

2023年NOC决赛-加码未来编程赛项决赛模拟题-Python模拟题--卷2

第一题: 题目:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。 第二题: 题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10…

mysql invalid conn排查

mysql invalid conn排查 问题背景 服务使用golang &#xff0c;客户端库是go-mysql-driver ,系统测试环境频繁但是不总是报出invalid conn 错误&#xff0c;但实际拿sql执行时却是正常执行。 排查思路 原因分析 客户端使用了无效连接 由于连接无效&#xff0c;首先考虑客…

AI绘画StableDiffusion实操教程:冰霜旗袍美女

飞书原文链接&#xff0c;获取更多资源&#xff1a;AI绘画StableDiffusion实操教程&#xff1a;冰霜旗袍美女 前几天分享了StableDiffusion的入门到精通教程&#xff1a;AI绘画&#xff1a;Stable Diffusion 终极炼丹宝典&#xff1a;从入门到精通 但是还有人就问&#xff1a…

数学专题训练1 概率dp

数学专题训练1 1. RollingDiceDivOne 有 n n n​ 个骰子&#xff0c;第 i i i​ 个骰子拥有 d i c e [ i ] dice[i] dice[i] 面&#xff0c;每面包含 1 , 2 , . . . , d i c e [ i ] 1,2,...,dice[i] 1,2,...,dice[i] 的点数。同时掷这 n n n 个骰子&#xff0c;问掷出来…

JavaWeb——类的加载过程

目录 一、类加载的过程 1、加载 2、连接 &#xff08;1&#xff09;、验证 &#xff08;2&#xff09;、准备 &#xff08;3&#xff09;、解析 3、初始化 二、类加载的触发 三、双亲委派模型 1、定义 2、过程 3、优点 &#xff08;1&#xff09;、避免重复加载类 …

Redis持久化AOF和RDB,学习总结篇!

大家好&#xff0c;我是三叔&#xff0c;很高兴这期又和大家见面了&#xff0c;一个奋斗在互联网的打工人。 前面笔者写了一篇关于Redis 数据结构和数据类型的博客总结&#xff0c;这篇博客总结一下关于 Redis 持久化。部分图片来自作者&#xff1a;小林哥&#xff0c;小林哥y…

JS debug跳过的几种方法

JS debug跳过的几种方法 第一种反调试解决方法: 禁用断点法 禁用所有断点&#xff0c;包括自己打的断点&#xff0c;无法调式。第二种反调试解决方法: 从来不执行法 在debug处 点击右键&#xff0c;选择 Nerver pause here&#xff0c;点击确定。第三种反调试解决方法: 条件…

常见的JS内置对象之数组

数组&#xff08;Array&#xff09; 1&#xff09;定义数组 直接push的话&#xff0c;值放在了创建的大小之后&#xff0c;用下标进行操作值在创建大小里 创建两个空对象 2&#xff09;数组的遍历&#xff1a; for in 循环 迭代数组&#xff1a;迭代出的是下标 拿到的不是值&am…

CnosDB x LangChain: 聊着天来查询时序数据库

本篇我们将主要介绍如何使用 LangChain 连接 CnosDB 数据库&#xff0c;实现使用自然语言和数据库的交流。 大模型等的相关话题已经霸榜半年有余&#xff0c;在讨论关注之余&#xff0c;CnosDB技术团队将大模型与人工智能相关技术与数据库开发与实践进行融合。继CnosDB全面整合…

实现最大子段和的计算,输入数据从文件读取。

1.设计思路   求解该题可以用分治法解题&#xff0c;总共有三种情况&#xff0c;最大子段在我们数组的左侧&#xff1b;最大子段在我们数组的右侧&#xff1b;最大子段跨过了左右两侧&#xff0c;在中间最大。第一种和第二种将两个子问题递归解出。分开的位置就是我们的中心位…

ios oc button 设置

Button调整内部的子控件的位置