uva3177BeijingGuards

简介: 题意:有n个人围城一个圈,其中第i个人想要ri个不同的礼物,相邻的两个人可以聊天,炫耀自己的礼物,如果两个相邻的人拥有同一种礼物,则双方都会很不高兴。问:医用需要多少种礼物才能满足所有人的需要?假设每种礼物有无穷多个,不相邻的两个人不会一起聊天。

题意:有n个人围城一个圈,其中第i个人想要ri个不同的礼物,相邻的两个人可以聊天,炫耀自己的礼物,如果两个相邻的人拥有同一种礼物,则双方都会很不高兴。问:医用需要多少种礼物才能满足所有人的需要?假设每种礼物有无穷多个,不相邻的两个人不会一起聊天。

分析:《训练指南》上的分析我没看懂,但是我觉得书上讲的麻烦了。当输入完每个人的ri后,统计相邻两个人的ri之和的最大值Max,如果这个Max比应当提供给所有人礼物数的均值的两倍还要少,那么ans=均值的两倍,否则ans=Max,代码写起来也很短:

View Code
 1 #include <stdio.h>
 2 #include <iostream>
 3 using namespace std;
 4 const int MAXN = 100000 + 10;
 5 int a[MAXN];
 6 int main(){
 7     int n, i, j;
 8     while(scanf("%d", &n)!=EOF&&n){
 9         int sum =0, Max=0;
10         for(i=0; i<n; i++) scanf("%d", &a[i]);
11         for(i=0; i<n; i++){
12             sum+=a[i];
13             j=i+1;
14             if(j==n) j=0;
15             if(Max<a[i]+a[j]) Max=a[i]+a[j];
16         }
17         int tmp=(sum-1)/(n/2)+1;
18         if(Max<tmp)Max=tmp;
19         printf("%d\n", Max);
20     }
21     return 0;
22 }

 

目录
相关文章
|
9月前
UVa10123 No Tipping
UVa10123 No Tipping
41 0
|
C++
UVA 之10010 - Where's Waldorf?
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/SunnyYoona/article/details/24863879 ...
688 0
|
存储 固态存储
|
机器学习/深度学习 人工智能
uva 10870 Recurrences
点击打开uva 10870 思路:构造矩阵+矩阵快速幂 分析: 1 题目给定f(n)的表达式 f(n) = a1 f(n - 1) + a2 f(n - 2) + a3 f(n -3) + .
718 0
|
C++
uva 11136 Hoax or what
点击打开链接uva 11136 思路: STL 分析: 1 题目意思比较不好理解,理解了题目之后我们可以利用STL的multiset来做 2 每次找到最大和最小的值,然后求解即可 代码: #include #include #in...
828 0
uva 1388 - Graveyard
点击打开链接uva1388 思路:数学 分析: 1 我们把原先的n个墓碑看成是园内的正n变形,现在的n+m个墓碑看成是园内的正n+m变形。那么通过画图我们可以知道当这个两个正多边形有一个点重合的时候移动的总距离最小 2 那么我们把这个圆进...
984 0
|
人工智能
uva 11300 - Spreading the Wealth
点击打开链接uva 11300 思路:数学分析+贪心 分析: 1 首先最终每个人的金币数量可以计算出来,它等于金币总数除以人数n。接下来我们用m来表示每人的最终的金币数 2 现在假设编号为i的人初始化为Ai枚金币,Xi表示第i个人给第i-1个人Xi枚金币,对于第一个人来说他是给第n个人。
839 0
uva 11627 Slalom
点击打开链接uva 11627 思路:二分答案 分析: 1 给定S个滑雪板的速度,问是否可以找到一个滑板使得通过所有的门的时间最少,如果找不到输出IMPOSSIBLE 2 很明显的二分题目,我们知道了二分那应该怎么判断是否可以通过所有...
1048 0