小 I 买不到票

小 I 买不到票

Time Limit: 1000 ms Memory Limit: 65536 KiB

Submit Statistic

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 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

思路:

第一步先选出两小时忍耐值不超过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 ;
}


/***************************************************
****************************************************/

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值