小 I 去天津玩啦,一路上,他跟他的同学发生了许多有趣的事。
既然去了天津,那天津之眼就不得不去看了。小 I 跟他的同学们第一天傍晚就去了天津之眼,但是无奈的是票已经卖完了。
在外面看着天津之眼,小 I 在想,明天该什么时候来呢?明天的气温可是高的离谱,如果等的时间太长可能要被晒成干了。
我们假设,如果想买到票,就必须等两个小时。
假如小 I 一开始有 100 的忍耐值,每个小时都有不同的气温,会减少一定的忍耐值,如果连着两个小时减少的忍耐值超过 100 ,则小 I 不会选择那个时间段去排队。
在排队之后,他会马上去坐天津之眼,即如果他在 15 点、 16 点排队,则他会在 17 点去坐天津之眼。
每个时间段坐天津之眼获得的享受也不同。
现在,他想选出一个开始排队的时间,在能忍受排队 2 小时的炎热的基础上,获得最大的享受。如果有多个开始排队的时间能获得最大的享受,则输出减少的忍耐值最少的那一个。(不会再出现减少的忍耐值也相同)
你能帮他选出这个最佳的开始排队的时间吗?
Input
多组输入,对于每组输入:
•第一行有 13 个数,表示 8 点 – 20 点每个小时会减少的忍耐值。(保证对每个数num,有1<=num<=100)
•第二行有 13 个数,表示 10 点 – 22 点每个小时坐天津之眼获得的享受值。(保证对每个数num2,有1<=num2<=10)
Output
对于每组输入,输出一行,表示小 I 最好在几点开始排队。(其实根据题意,输出一定是在 8 - 19 内的一个整数)
如果不存在合适的时间,则输出 -1。
Sample Input
10 15 25 30 40 50 60 50 40 40 30 25 20
1 1 1 1 1 1 10 1 2 2 5 7 7
Sample Output
19
Hint
在 16 时去坐天津之眼时有最大的享受值,但是 14 时、15 时减少的忍耐值为 60 + 50 = 110 > 100 ,所以不能选择 14 时为开始排队的时间。
在 18 时、19 时去坐有第二高的享受值,而在 19 时 、20 时排队减少的忍耐值比在 18 时、19 时获得的享受值相同但减少的忍耐值少,所以最佳的开始排队时间是 19 时。
Source
【2017级《程序设计基础(B)II》期末上机考试】IceCapriccio
#include<bits/stdc++.h>
using namespace std;
int ren[15], xiang[15];
int main()
{
while(~scanf("%d", &ren[0]))
{
for(int i = 1;i < 13; i++) scanf("%d", &ren[i]);
for(int i = 0;i < 13; i++) scanf("%d", &xiang[i]);
int Max = 0;
int Min;
int ans = -1;
for(int i = 0;i < 12; i++)
{
int a = ren[i] + ren[i+1];
if(a <= 100 )
{
if(xiang[i] > Max)
{
Max = xiang[i];
ans = i;
Min = a;
}
else if(xiang[i] == Max)
{
if(a < Min)
{
ans = i;
Min = a;
}
}
}
}
if(ans != -1) printf("%d\n", ans+8);
else printf("-1\n");
}
return 0;
}