B: 小李打台球

B: 小李打台球

题目描述

在异乡打拼的小李同志迷上了一款叫斯诺克的台球游戏,而且随着练习的深入,他总是能在某些神奇的时候开启外挂模式,此时小李指哪打哪,直至无球可打。现在小李想让你帮他计算下当他开启外挂模式的时候最多可以取得多少分数。

注意:台面上的球数经常会异于传统斯诺克。

斯诺克比赛的基本规则如下:
一、彩球共分8种颜色,红(1分)、黄(2分)、绿(3分)、棕(4分)、蓝(5分)、粉(6分)、黑(7分)、白(主球,控制白球大其余球)。
二、当台面上有红球的时候你必须先击打一个红球,然后只能击打一个彩球(不包括红球),此时落袋的彩球将会被放回桌面,一直重复该过程。
三、当打完规则二的彩球(不包括红球)发现已经没有红球时,按彩球的分值从高到低将其依次击入袋中。

输入
输入仅有一行,共7个用空格隔开的整数,分别为当前台面上红、黄、绿、棕、蓝、粉、黑球的数目。

输出
输出仅有一行,共1个整数,表示小李可以得到的最高得分。

样例输入

2 0 1 0 3 0 2

样例输出

48

提示
台面上共有红球2个、绿球1个、蓝球3个、黑球2个,获得最高分的打法是红-黑-红-黑-绿-蓝-蓝-蓝-黑-黑,共可以获得48分。
保证最后得分不超过2^31-1.

解题思路

注意只有红球和没有红球的情况,其余按题意模拟即可

AC代码

#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<vector>
#include<stack>
#include<sstream>
#include<queue>
#include<map>
#include<bitset>
#include<deque>
#define ll long long
using namespace std;
int main()
{
    int a[7];
    int i,maxpoint,sum;
    for(i=0;i<7;i++)
        cin>>a[i];
    for(maxpoint=6;maxpoint>0;maxpoint--)
        if(a[maxpoint]!=0)  //找出分值最高的彩球
        break;
    if(maxpoint==0&&a[0]!=0)  //只有红球
    {
        cout<<1<<endl;
        return 0;
    }
    sum=a[0]+a[0]*(maxpoint+1);
    for(i=6;i>0;i--)
        sum+=a[i]*(i+1);
    cout<<sum<<endl;
    return 0;
}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值