hdu 1205 :吃糖果

article/2025/10/18 9:49:49

鸽巢原理

1.把某种糖果看做隔板,如果某种糖果有n个,那么就有n+1块区域,至少需要n-1块其他种糖果才能使得所有隔板不挨在一块..也就是说能吃完这种糖果.至少需要其他种类糖果n-1块..(鸽巢原理)

2.数量最多的糖果(隔板)可以构造最多的空间,如果这种糖果有maxn个....那么需要maxn-1个其他种糖果.对于某种数量少于maxn的糖果来说,可以在原本数量最多的糖果构造的隔板上"加厚"原有的隔板...,那么这"某种糖果"就销声匿迹了.....

考虑极端情况.如果某种糖果无法在这maxn+1的空间内构造出符合条件的序列,那么这种糖果至少要有maxn+1+1个(考虑只有两种糖果的情况)...(鸽巢原理)...但是这与数量最多的那种糖果只有maxn个矛盾.....(maxn+1+1>maxn 这不等式不难理解吧....).

题意:要求吃糖果不能连续吃同一种类型的糖果,给出各类糖果的总数,问是否能够吃完所有的糖果,如果违反规则就表示吃不完。

 

题解:网上看到的方法,把最多一类的糖果当成隔板,这样然后剩余的糖果贴上去就相当于是在给这个隔板加厚,这样就利用这个隔板模型将不连续吃同一类糖果的问题相

对应起来了,然后我们来看看这个模型是否成立,成立的条件其实是隔板是否会连续出现,即隔板没有剩余(即除最大数量糖果类型的其他类型糖果)的糖果可以放置,那么

可能会问会不会其他类型的两个糖果连续在一起呢(这里想了很久,其实关键注意隔板的存在就行了),这是不可能出现的问题,因为有隔板的存在,它总是起着一个隔离相同类型糖果的作用,并且这个隔板是数量最多的一类糖果,如果把数量第二大的类型的糖果用来加厚,要想第二大数量的连续在一起,只能是第二大数量的糖果数量>第一大数量的糖果(即隔板),显然这是不可能的,也就是说用来加厚的同种类型糖果不会循环超过隔板一周,以此类推再用第三大数量的糖果继续加厚,也不会出现连续,那么可能唯一连续的就是隔板;这样我们把最大数量类型的糖果分为一类 其数量为max,其他类型的糖果分为一类 其数量为c,如果max-c>=2  说明是肯定存在连续的隔板相邻在一起的



所以就吃不完糖果,否则就能吃完,不用去管它具体如何吃的策略;这就是典型的透过具体过程,从结果来论证的数学方法。

 根据网上的思路,把最大的数目的糖果数当作盒子数,用来划分不同种类的糖果,然后每种糖果依次放到每一个盒子里,根据鸽巢原理,如果空盒子数大于等于2,那么就是No

第一抽屉原理
原理1: 把多于n+1个的物体放到n个抽屉里,则至少有一个抽屉里的东西不少于两件。
证明(反证法):如果每个抽屉至多只能放进一个物体,那么物体的总数至多是n,而不是题设的n+k(k≥1),故不可能。
原理2 :把多于mn(m乘以n)个的物体放到n个抽屉里,则至少有一个抽屉里有不少于(m+1)的物体。
证明(反证法):若每个抽屉至多放进m个物体,那么n个抽屉至多放进mn个物体,与题设不符,故不可能。
原理3 :把无穷多件物体放入n个抽屉,则至少有一个抽屉里 有无穷个物体。
原理1 、2 、3都是第一抽屉原理的表述。
第二抽屉原理
把(mn-1)个物体放入n个抽屉中,其中必有一个抽屉中至多有(m—1)个物体(例如,将3×5-1=14个物体放入5个抽屉中,则必定有一个抽屉中的物体数少于等于3-1=2)。
证明(反证法):若每个抽屉都有不少于m个物体,则总共至少有mn个物体,与题设矛盾,故不可能。


#include<stdio.h>
__int64 sum = 0;
int main(){int t = 0;int max_sweet = 0;scanf("%d",&t);while(t--){int n = 0,m= 0,i = 0;max_sweet = sum = 0;scanf("%d",&n);for(i =0;i<n;i++){scanf("%d",&m);if(max_sweet<m){max_sweet = m;}sum += m;}if(sum-max_sweet+1>=max_sweet){printf("Yes\n");}else{printf("No\n");}}return 0;
}


吃糖果

Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)
Total Submission(s): 27817    Accepted Submission(s): 7883


Problem Description
HOHO,终于从Speakless手上赢走了所有的糖果,是Gardon吃糖果时有个特殊的癖好,就是不喜欢将一样的糖果放在一起吃,喜欢先吃一种,下一次吃另一种,这样;可是Gardon不知道是否存在一种吃糖果的顺序使得他能把所有糖果都吃完?请你写个程序帮忙计算一下。

Input
第一行有一个整数T,接下来T组数据,每组数据占2行,第一行是一个整数N(0<N<=1000000),第二行是N个数,表示N种糖果的数目Mi(0<Mi<=1000000)。

Output
对于每组数据,输出一行,包含一个"Yes"或者"No"。

Sample Input
  
2 3 4 1 1 5 5 4 3 2 1

Sample Output
  
No Yes
Hint
Hint
Please use function scanf

Author
Gardon


http://chatgpt.dhexx.cn/article/SAUMtmUk.shtml

相关文章

RecyclerView局部刷新

在RecyclerView中&#xff0c;我们时常会用到局部刷新&#xff0c;我们大多数是使用&#xff1a;notifyItemChanged。 我在使用这个局部刷新过程中突然发现我有几个notifyItemChanged没有效果&#xff0c;我就在&#xff1a; onBindViewHolder(NonNull ViewHolder holder, in…

android局部动态刷新,RecyclerView的局部刷新爬坑之路简述

RecyclerView的局部刷新爬坑之路简述&#xff0c;实际上RecyclerView做局部刷新是非常容易的&#xff0c;其实就是使用好带payload参数的这个notifyItemRangeChanged方法&#xff0c;以及override带payload的这个onBindViewHolder方法&#xff0c;在onBindViewHolder中去刷新你…

RecyclerView局部刷新机制

之前在使用RecyclerView的遇到过一个问题&#xff0c;使用notifyItemChanged刷新数据的时候会出现重影或者闪烁的现象。 这个问题很容易出现&#xff0c;当我们的列表中有进度显示&#xff08;比如下载&#xff09;&#xff0c;这时候需要不停的更新进度&#xff0c;就需要使用…

jsp java局部刷新_jsp怎么实现局部刷新

jsp实现局部刷新的方法&#xff1a;首先创建一个处理ajax请求的jsp文件&#xff1b;然后设置输出信息的格式及字符集&#xff1b;最后利用JSP和ajax来实现局部页面刷新即可。 通过 AJAX&#xff0c;JavaScript 可使用 JavaScript 的 XMLHttpRequest 对象来直接与服务器进行通信…

bootstrap切换tab页局部刷新_AdminLTE实现局部刷新

前言 AdminLTE是一个基于boostrap的前端模板,里面集成了好多插件,可以说方便又臃肿,毕竟不是所有插件都用得到,。好不容易找到个喜欢的前端模板,无奈每次点击菜单都会整个页面刷新一次,网上找了半天也没找到一个喜欢的局部刷新的解决方法。只好自己去啃js了。由于修改了原…

java局部刷新_HTML页面局部刷新的实现代码

这篇文章主要介绍了HTML页面局部刷新的实现代码的相关资料&#xff0c;写的十分的全面细致&#xff0c;具有一定的参考价值&#xff0c;对此有需要的朋友可以参考学习下。如有不足之处&#xff0c;欢迎批评指正。 事件响应刷新&#xff1a;有请求才会刷新 1、通过JS HTML DOM或…

原生JS局部刷新

目录 使用XMLHttpRequest对象进行异步请求&#xff1a; 2.使用fetch API进行异步请求 3.使用事件监听器进行局部刷新 4.servlet实现img验证码局部刷新 依赖jar包 Servlet login.jsp 在原生JS中&#xff0c;可以使用以下几种方式实现局部刷新&#xff1a; 使用XMLHttpReques…

html局部刷新数据,局部刷新.html

&#xfeff;局部刷新 $axure.utils.getTransparentGifPath function() { return resources/images/transparent.gif; }; $axure.utils.getOtherPath function() { return resources/Other.html; }; $axure.utils.getReloadPath function() { return resources/reload.html;…

flutter 局部刷新

目的&#xff1a;局部刷新 效果&#xff1a;点击右下角刷新按钮后&#xff0c;对九宫格中的图片刷新状态 思路&#xff1a;两个方法 一、整个页面都刷新&#xff0c;局部组件有变化&#xff0c;用UniqueKey() 二、只针对局部组件刷新&#xff0c;用GlobalKey() 具体操作&…

什么是局部刷新

局部刷新 浏览器在展示数据时&#xff0c;此时在窗口既可以看到本次的响应数据&#xff0c;同时又可以看到浏览器内存原有数据。 局部刷新原理&#xff1a; 不由浏览器发送请求给服务端 浏览器委托浏览器内存中一个脚本对象代替浏览器发送请求 这个行为导致服务端直接将…

【PSFTP】Windows从Linux获取文件或目录

1、安装Putty Win10先安装Putty 官方下载地址&#xff1a;http://www.putty.be/latest.html 安装后&#xff0c;Win10运行PSFTP 2、登录Linux 提示使用open host.name连接服务器 psftp: no hostname specified; use "open host.name" to connect psftp>参考…

putty、pscp、psftp 使用教程

如何从安装了Windows的工作电脑连远程接到Linux服务器?其实有很多软件,比如 PuTTY、XShell、CRT、MobaXterm等等。不过还是 PuTTY最简单易用、无需安装、并且开源免费。PuTTY其实是一个软件套装,里边除了最常用的putty之外,还包含了像 pscp、psftp等可以用于文件传输的工具…

putty和psftp命令行参数

putty和psftp命令行参数 https://the.earth.li/~sgtatham/putty/latest/w32/putty.zip https://the.earth.li/~sgtatham/putty/latest/w64/putty.zip https://the.earth.li/~sgtatham/putty/latest/puttydoc.zip https://the.earth.li/~sgtatham/putty/latest/putty-0.72.tar.g…

psftp

2019独角兽企业重金招聘Python工程师标准>>> 当连接到远程计算机以后&#xff0c;使用以下命令&#xff1a; bye 结束 psftp 。 cd 改变远程服务器的目录。 chmod 改变远程服务器的文件或文件夹的权限及属性。 del 删除远程服务器上的文件。 dir …

linux psftp,使用PSFTP实现Windows、Linux之间的文件传输

安装PuTTY时自动安装了PSFTP 使用PSFTP可以实现Winodws、Linux之间的文件传输。 打开PSFTP&#xff0c;输入Linux的ip地址&#xff0c;输入要登录的用户名、密码 Windows向Linux传文件&#xff1a; put D:\jdk-8u241-linux-x64.rpm /root/jdk-8u241-linux-x64.rpm put 本地文件…

putty以及psftp的基本操作,使用方法等

1、putty登陆远程服务器 open之后进入登陆界面&#xff0c;输入用户名之后点击Enter&#xff0c;之后输入登陆密码&#xff08;界面不显示&#xff0c;输入正确后直接Enter就可以&#xff09; 进入之后的界面 之后就可以输入命令进行操作了 2、文件传输psftp&#xff1a; 运行…

PSFTP工具的使用教程

PSFTP&#xff1a;是Putty的SFTP客户端&#xff0c;可以通过SFTP协议在两台电脑之间的传输文件。它和 PSCP相比的优点在于可以与服务器进行交互&#xff0c;遍历服务器上的文件系统&#xff0c;在一个会话中上传或下载多个文件。而 PSCP 只能一次传输一个文件&#xff0c;传输完…

Vector3.Lerp

Unity3D中的线性插值Lerp()函数解析 在unity3D中经常用线性插值函数Lerp()来在两者之间插值&#xff0c;两者之间可以是两个材质之间、两个向量之间、两个浮点数之间、两个颜色之间&#xff0c;其函数原型如下&#xff1a; Material.Lerp 插值 function Lerp(start : Materi…

Unity 的Vector3.Project 和 Vector3.ProjectOnPlane

目录 1.public static Vector3 Project(Vector3 vector, Vector3 onNormal); 描述 &#xff1a; 代码&#xff1a; 效果&#xff1a; 结论&#xff1a; 2.public static Vector3 ProjectOnPlane(Vector3 vector, Vector3 planeNormal);返回向量在平面上的位置。 描述 …

Vector3——简单的3D向量类

参考资料&#xff1a;1、 [美] 邓恩&#xff08;Dunn F.&#xff09;著. 3D数学基础——图形设计与开发. 史银雪&#xff0c;陈洪&#xff0c;王荣静 译 清华大学出版社 p57-65 2、http://www.2cto.com/kf/201311/260139.html 编程环境 QT4.8.4 VS2010 本文用 C实现一个简单…