HDU-5835 Danganronpa(模拟水题)



Danganronpa

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 379    Accepted Submission(s): 278


Problem Description
Chisa Yukizome works as a teacher in the school. She prepares many gifts, which consist of n kinds with a[i] quantities of each kind, for her students and wants to hold a class meeting. Because of the busy work, she gives her gifts to the monitor, Chiaki Nanami. Due to the strange design of the school, the students' desks are in a row. Chiaki Nanami wants to arrange gifts like this:

1. Each table will be prepared for a mysterious gift and an ordinary gift.

2. In order to reflect the Chisa Yukizome's generosity, the kinds of the ordinary gift on the adjacent table must be different.

3. There are no limits for the mysterious gift.

4. The gift must be placed continuously.

She wants to know how many students can get gifts in accordance with her idea at most (Suppose the number of students are infinite). As the most important people of her, you are easy to solve it, aren't you?
 

Input
The first line of input contains an integer T(T10) indicating the number of test cases.

Each case contains one integer n . The next line contains n (1n10) numbers: a1,a2,...,an , (1ai100000) .
 

Output
For each test case, output one line containing “Case #x: y” (without quotes) , where x is the test case number (starting from 1) and y is the answer of Chiaki Nanami's question.
 

Sample Input
  
  
1 2 3 2
 

Sample Output
  
  
Case #1: 2
 

比赛时被题目题意吓到,但是这道题的数据太水,sum/2都能过,呵呵哒
本题题意:有一个老师想给学生分配礼物,要求每个学生有一个神秘礼物和一个普通礼物
神秘礼物没有要求,但是需要相邻的学生有不同的一般礼物,问如何才能让更多的学生分配
到礼物。
下边是正解:
      本题无非两种情况,但是一开始我想着先放最多的,然后穿插着来,但是100,2,2这组
数据就过不了,后来想了想,觉得可以对最大那堆和剩下的总和相比较
(1)最大的大于剩下的总和,此时肯定是(sum-max)*2+1,不难想出
(2)最大的小于剩下的总和,这是不足的需要后面的来补,答案肯定是sum/2,
如果想到这两种情况,那么这道题目便解决了。。(PS:贪心还是不够熟练,贪心的思想还是很神奇的!)
代码如下:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<limits.h>
#include<queue>
#include<math.h>
#include<stack>
#include<vector>
#include<algorithm>
using namespace std;
#define maxn  100005
int a[maxn];
int  main()
{
	int T,i,sum,ans,maxs,n,cases=0;
	scanf("%d",&T);
	while(T--)
	{
		maxs=0;sum=0;
		scanf("%d",&n);
		for(i=1;i<=n;i++)
		{
			scanf("%d",&a[i]);
			sum+=a[i];
			maxs=max(maxs,a[i]);
		}
		int ans=min(sum/2,(sum-maxs)*2+1);
		printf("Case #%d: %d\n",++cases,ans);
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值