【Google Kickstart】吃糖果(第一题难度)

吃糖果

题目描述

Supervin喜欢吃糖果。
今天,他最喜欢的糖果店提供了N个糖果,排列成一排。
这一排中的第i个糖果(从1开始计数)的甜度为Si。
请注意,糖果的甜度可能是负的,这意味着糖果味道很苦。

Supervin喜欢吃甜的糖果。
然而,吃掉的糖果的甜度总和不能超过D,否则对他来说摄入糖分的量就超标了。
Supervin同时意识到甜度为奇数的糖果是“奇怪的”,他不想吃超过O个这样的糖果。
换句话说,奇怪的糖果是甜度不能被2整除的糖果。

此外,由于Supervin时间紧迫来不及挑选,所以只能吃下若干连续排在一起的糖果。
因此,他想吃掉若干个糖果,这些糖果必须相连,其中奇数甜度的糖果不能超过 O 个,并且使得总甜度最大化,但不能超过 D。

请你帮助Supervin确定他可以获得的最大总甜度是多少,如果没有满足条件的糖果集合,则返回IMPOSSIBLE。

注意: Supervin至少要吃掉一个糖果,不可以不吃。

输入格式

第一行包含整数T,表示共有T组测试数据。
每组测试数据包含两行,第一行包含三个整数N、O、D。

第二行包含七个整数X1,X2,A,B,C,M,L; 这些值用于生成值Si,如下所示:
Xi=(A×Xi−1+B×Xi−2+C)modM,3≤i≤N
Si=Xi+L,1≤i≤N

输出格式

每组数据输出一个结果,每个结果占一行。
结果表示为“Case #x: y”,其中x为组别编号(从1开始),y为最大总甜度,如果没有满足条件的糖果集合,则为IMPOSSIBLE。

数据范围

1≤T≤100,
2≤N≤5∗105,
0≤O≤N,
|D|≤1015,
0≤X1,X2,A,B,C≤109,
1≤M≤109,
−5∗108≤L≤0

样例

输入样例:

5
6 1 1000000000000000
1 1 1 1 0 100 0
6 1 -100
1 1 1 1 0 100 0
10 1 8
4 3 4 1 5 20 -10
10 2 8
4 3 4 1 5 20 -10
10 1 8
4 3 4 1 5 20 -19

输出样例:

Case #1: 13
Case #2: IMPOSSIBLE
Case #3: 7
Case #4: 8
Case #5: -5

样例解释

在样例#1中,生成的甜度值Si的数组是:[1,1,2,3,5,8],奇数用下划线标出。Supervin只能吃一个奇数甜度的糖果,选择第五和第六个糖果可获得最大的总甜度。
在样例#2中,生成的甜度值Si的数组与样例#1中的相同。然而,这次Supervin不能吃总甜度超过-100的糖果,因此没有连续的糖果集满足条件。
在样例#3中,生成的甜度值Si的数组是:[-6,-7,-9,2,4,3,1,-8,-6,-7],奇数用下划线标出。由于Supervin只能吃一个奇数甜度的糖果而且他不能吃总甜度超过8的糖果,选择第五和第六个糖果可获得最大的总甜度。
在样例#4中,生成的甜度值Si的数组与样本案例#3中的相同。然而,这次Supervin可以吃两个奇数甜度的糖果。因此,选择第五,第六和第七个糖果可获得最大的总甜度。
在样例#5中,生成的甜度值Si的数组是:[-15,-16,-18,-7,-5,-6,-8,-17,-15,-16]其中奇数用下划线标出。注意,最大总甜度水平可能是负的。

思路

#include <iostream>
#include <algorithm>
#include
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值