hdu 1205 吃糖果(鸽巢原理)
来源:互联网 发布:传奇世界仗剑天涯源码 编辑:程序博客网 时间:2024/05/17 09:03
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1205
234 1 155 4 3 2 1
NoYes
【思路】:
1.把某种糖果看做隔板,如果某种糖果有n个,那么就有n+1块区域,至少需要n-1块其他种糖果才能使得所有隔板不挨在一块..也就是说能吃完这种糖果.至少需要其他种类糖果n-1块..(鸽巢原理)
2.数量最多的糖果(隔板)可以构造最多的空间,如果这种糖果有maxn个....那么需要maxn-1个其他种糖果.对于某种数量少于maxn的糖果来说,可以在原本数量最多的糖果构造的隔板上"加厚"原有的隔板...,那么这"某种糖果"就销声匿迹了.....
考虑极端情况.如果某种糖果无法在这maxn+1的空间内构造出符合条件的序列,那么这种糖果至少要有maxn+1+1个(考虑只有两种糖果的情况)...(鸽巢原理)...但是这与数量最多的那种糖果只有maxn个矛盾.....(maxn+1+1>maxn 这不等式不难理解吧....). 来源:大神博客
最多的糖有max,剩下的糖 = sum-max;
就是说 只要剩下的糖能把数量最多的糖max分隔开 就能满足条件,其余的糖因为数量小于max,所以可以插入之前 max分割后组成的序列
MMMMM NNNN BBBB VVV CC X
M NM NM NM NM
数目最多的M被分隔后。
MN BMNBMN B M N BM 这个时候 B选择插入的位置就有很多种了, 因此 ,只要满足数目最大的糖能被分隔开,就能使所有的糖满足条件;
【代码如下:】
#include <iostream>#include <cstdio>#include <algorithm>#define maxn 1000000+10using namespace std;typedef long long ll;//注意sum的极限情况可达到1000000*1000000= 1e12,超过了int的表示范围ll num[maxn];int main(){ int t; scanf("%d",&t); while(t--) { int n; ll sum=0,max=0; scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%lld",&num[i]); if(num[i]>max) max=num[i]; sum+=num[i]; } if(sum-max>=max-1) printf("Yes\n"); else printf("No\n"); } return 0;}
- hdu 1205 吃糖果(鸽巢原理)
- [ACM] hdu 1205 吃糖果(鸽巢原理)
- HDU 1205 吃糖果(组合数学鸽巢原理)
- hdu 1205 吃糖果(鸽巢原理)
- HDU 1205 吃糖果(鸽巢原理)
- HDU——1205吃糖果(鸽巢原理)
- 1205 吃糖果(鸽巢原理)
- hdoj 1205 吃糖果 【鸽巢原理】
- 1205 吃糖果(鸽巢原理)
- HDU 1205 吃糖果(鸽巢定理)
- HDU 1205.吃糖果【鸽巢原理】【8月1】
- hdu 1205 吃糖果(抽屉原理)
- HDU 1205 吃糖果 (抽屉原理)
- 【HDU】1205 - 吃糖果(抽屉原理)
- [HDU]1205 吃糖果 [抽屉原理]
- hdu 1205 吃糖果 抽屉原理
- 【hdu 1205】 吃糖果 (抽屉原理)
- 吃糖果 hdu 1205 数论中思维问题 鸽巢原理
- 5-14 数据结构啊poi A.暑假作业
- android错误:at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork
- C++ XML解析之TinyXML篇
- M牛C原创博客——IOS开发必备技能——安装离线xcode的api
- 关于控制文件转储后的trace文件中'Controlfile Checkpointed at scn'的含义
- hdu 1205 吃糖果(鸽巢原理)
- Hibernate HelloWorld-05 对象关系映射文件
- 列表生成式
- Java学习第一篇 Java程序运行机制和jvm
- 基于对话框的MFC应用程序的Edit控件中实时显示系统时间的方法:
- 程序员必须知道的10大基础实用算法及其讲解
- 5-14 数据结构啊poi T.三个数组的故事
- 小组成绩排名
- 第一次使用GIT,创建仓库并提交项目代码