小 I 买不到票
Time Limit: 1000 ms Memory Limit: 65536 KiB
Problem Description
小 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 7Sample Output
19Hint
在 16 时去坐天津之眼时有最大的享受值,但是 14 时、15 时减少的忍耐值为 60 + 50 = 110 > 100 ,所以不能选择 14 时为开始排队的时间。
在 18 时、19 时去坐有第二高的享受值,而在 19 时 、20 时排队减少的忍耐值比在 18 时、19 时获得的享受值相同但减少的忍耐值少,所以最佳的开始排队时间是 19 时。Source
【2017级《程序设计基础(B)II》期末上机考试】IceCapriccio
思路:
第一步先选出两小时忍耐值不超过100,然后在第一个条件下选出享受值最大的,如果享受值最大的有多个,这在着多个中选出忍耐值最小的。
代码如下:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int a[20] ,b[20] ;
int i , j ;
int flag ;
int max ;
while(~scanf("%d",&a[0]))
{
flag = 0 ;
for( i = 1 ; i< 13; i++)
{
scanf("%d",&a[i]) ;
}
for( j = 0 ; j<13 ;j++)
{
scanf("%d",&b[j]) ;
}
max = -1 ;
j=0 ;
for(i = 0 ; i<12 ; i++)
{
a[i] = a[i] +a[i+1] ;
if(a[i]<=100){
flag = 1 ;
if(b[i]>max)
{
max = b[i] ;
j = i ;
}
else if(b[i]==max)
{
if(i!=j)
{
if(a[i]<a[j])
j = i ;
}
}
}
}
if(flag)
printf("%d\n",j+8) ;
else printf("-1\n") ;
}
return 0 ;
}
/***************************************************
****************************************************/