hdu 1205 吃糖果(抽屉原理)
2015-06-04 16:41
393 查看
题意:N种糖果,不能把一样的放在一起吃,即第一次吃一种,下一次吃另一种。
思路:找到个数最多的糖果种类(最大的数目记作 ma,该糖果种类记为a),首先把这n个糖果放到n个抽屉里面,然后把剩余的N-1种糖果往抽屉里面放。因为n是最大的数目,即剩余的N-1种糖果的放置过程中,每一种糖果都可以分别放到不同的抽屉里,也就是说,不会出现一个抽屉里有相同的糖果。 只要保证最多有一个抽屉只有一个a糖果即可。也就是说除了a糖果外,剩下的糖果总数要 >=ma-1。(吃的时候就好说了,一个抽屉一个抽屉的吃就可以了,吃的时候保证当前抽屉吃的最后一个不要与下一个抽屉的第一个相同即可。)
于是也就得到满足条件的公式:sum-ma>=ma-1
其中sum为总和,ma为数目最多那种糖果数目,
代码:
View Code
思路:找到个数最多的糖果种类(最大的数目记作 ma,该糖果种类记为a),首先把这n个糖果放到n个抽屉里面,然后把剩余的N-1种糖果往抽屉里面放。因为n是最大的数目,即剩余的N-1种糖果的放置过程中,每一种糖果都可以分别放到不同的抽屉里,也就是说,不会出现一个抽屉里有相同的糖果。 只要保证最多有一个抽屉只有一个a糖果即可。也就是说除了a糖果外,剩下的糖果总数要 >=ma-1。(吃的时候就好说了,一个抽屉一个抽屉的吃就可以了,吃的时候保证当前抽屉吃的最后一个不要与下一个抽屉的第一个相同即可。)
于是也就得到满足条件的公式:sum-ma>=ma-1
其中sum为总和,ma为数目最多那种糖果数目,
代码:
#include<iostream> #include<stdio.h> using namespace std; int main(){ int T,N,Mi,ma; __int64 sum; scanf("%d",&T); while(T--){ sum=0; ma=0; scanf("%d",&N); while(N--){ scanf("%d",&Mi); sum=sum+Mi; if(Mi>ma)ma=Mi; } if(sum-ma>=ma-1)printf("Yes\n"); else printf("No\n"); } return 0; }
View Code
相关文章推荐
- 访问HTTPS时SSL/TLS证书拒绝问题 : unable to find valid certification path to requested target
- DB2 日常操作基本命令
- Java 对日期的操作
- 学习资源
- WinCE6.0学习之EBoot源码分析----startup.s
- 一封来自知乎的手机拍摄要领
- 第14周-输入输出流,文本文件-项目0-课后实践·程序阅读5
- C语言的不完整类型(incomplete type)和前置声明
- 使用Spark+Cassandra打造高性能数据分析平台
- 神话电视剧配乐
- Centos编译安装 LAMP (apache-2.4.7 + mysql-5.5.35 + php 5.5.8)+ Redis
- js操作cookie方法
- OK335xS-Android mkmmc-android-ubifs.sh hacking
- 在Linux下使用Prips打印指定范围内的IP地址的方法
- 新版FFmpeg音频编解码处理
- IOS开发系列--GCD详解介绍
- Firefly3288—Lubuntu显示0-4串口设备
- POJ2752KMP逆序处理
- 关于Class.getResource和ClassLoader.getResource的路径问题
- ecshop的订单状态