牛客 C-山楂

题目描述

    众所周知,清楚姐姐最近迷上了一个老年游戏“山楂串”(点进去可以玩)这个游戏中我们可以将34个iii级糖果合并,升级成为一个高一级的糖果并且获得x∗ix*ix∗i点积分,xxx为消耗同级糖果的数量,iii为你消耗的糖果等级,当你拥有了一个9级糖果也就代表你有了一串山楂串,这个时候你的9级糖果就会消失。

    请问 如果给定你每级若干个糖果,你最多能得到多少积分。

qcjj的记录:

输入描述:

 

第一行输入8个非负整数 ai≤109a_i \leq 10^9ai​≤109分别代表iii级糖果的数量。

输出描述:

一个正整数输出你获得的最高积分。

示例1

输入

3 3 2 2 2 2 2 2

输出

110

说明

 

我们将1级糖果拿3个出来全部合并 获得3点积分并得到一个2级糖果

我们将2级糖果拿4个出来全部合并 获得8点积分并得到一个3级糖果

我们将3级糖果拿3个出来全部合并 获得9点积分并得到一个4级糖果

我们将4级糖果拿3个出来全部合并 获得12点积分并得到一个5级糖果

我们将5级糖果拿3个出来全部合并 获得15点积分并得到一个6级糖果

我们将6级糖果拿3个出来全部合并 获得18点积分并得到一个7级糖果

我们将7级糖果拿3个出来全部合并 获得21点积分并得到一个8级糖果

我们将8级糖果拿3个出来全部合并 获得24点积分并得到一个9级糖果

9级糖果全部消失

最终我们的得分为

3+8+9+12+15+18+21+24=110

代码如下:

#include<iostream>
#include<cstring> 
long long int a[10];
long long int res = 0;
int main(){
	memset(a, 0, sizeof(a));
	for(int i = 1; i <= 8; i ++){
		std::cin >> a[i];
	}
	
	for(int i = 1; i <= 8; i ++){

		if(a[i] <= 5){
			if(a[i] > 3){
			res += 4 * i;
			a[i + 1] += 1;
			}
			if(a[i] == 3){
				res += 3 * i;
				a[i + 1] += 1;
			}
		}
		
		else{
		
			while(a[i] % 3 != 0){
				a[i] -= 4;
				res += 4 * i;
				a[i + 1] += 1;
			}
				if(a[i] % 3 == 0){
				res += a[i] * i;
				a[i + 1] += a[i] / 3;
				continue;
			}
		}
	
	}
	std::cout << res;
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值