您的位置:首页 > 其它

HDU-5835 Danganronpa(模拟水题)

2016-08-15 12:17 369 查看


Danganronpa

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)

Total Submission(s): 379    Accepted Submission(s): 278


[align=left]Problem Description[/align]
Chisa Yukizome works as a teacher in the school. She prepares many gifts, which consist ofn
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?
 

[align=left]Input[/align]
The first line of input contains an integer
T(T≤10)
indicating the number of test cases.

Each case contains one integer n.
The next line contains n(1≤n≤10)
numbers: a1,a2,...,an,(1≤ai≤100000).
 

[align=left]Output[/align]
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.
 

[align=left]Sample Input[/align]

1
2
3 2

 

[align=left]Sample Output[/align]

Case #1: 2

 

[align=left]比赛时被题目题意吓到,但是这道题的数据太水,sum/2都能过,呵呵哒[/align]
[align=left]本题题意:有一个老师想给学生分配礼物,要求每个学生有一个神秘礼物和一个普通礼物[/align]
[align=left]神秘礼物没有要求,但是需要相邻的学生有不同的一般礼物,问如何才能让更多的学生分配[/align]
[align=left]到礼物。[/align]
[align=left]下边是正解:[/align]
[align=left]      本题无非两种情况,但是一开始我想着先放最多的,然后穿插着来,但是100,2,2这组[/align]
[align=left]数据就过不了,后来想了想,觉得可以对最大那堆和剩下的总和相比较[/align]
[align=left](1)最大的大于剩下的总和,此时肯定是(sum-max)*2+1,不难想出[/align]
[align=left](2)最大的小于剩下的总和,这是不足的需要后面的来补,答案肯定是sum/2,[/align]
[align=left]如果想到这两种情况,那么这道题目便解决了。。(PS:贪心还是不够熟练,贪心的思想还是很神奇的!)[/align]
[align=left]代码如下:[/align]
#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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: