bnu52297Coins(弱校联盟第一场)--找规律

本文针对特定条件下的组合数学问题,提出了一套完整的求解方案。通过对不同输入情况的分类讨论,利用数学推导确定了所有可能组合的覆盖范围,并给出了具体的实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

比赛的时候不会,看题解补题的。
if a >= 2
那么1可以由一个1表示,2可以由两个1表示,这样 1 ~ 3c 范围内的所有数都能被表示,同理3c + 1 ~ 3c + 2b范围内的所有数也可以被表示,3c + 2b + 1 ~ 3c + 2b + a范围内的所有数也可以被表示。
elif a == 1
if b >= 2
那么1~3c+2b以内的所有数都能被表示,再加上上3c + 2b + 1这个数,所以答案为3c+2b+1
elif b == 1
那么1~3c以内的所有数都能被表示,再加上上3c + 1,3c + 2 ,3c + 3这三个数,所以答案为3c + 3
elif b==0
答案为2c+1
elif a == 0
if b >= 2
那么3的倍数,3的倍数 + 1(将一个3换成2个2),3的倍数 - 1(将一个3换成2)都能被表示,共3c种,再加上3c + 2 , 3c + 4 , ….. , 3c + 2b 这些数中还可以去掉一个3,但3c - 1和3c + 1 已经被出现过了,所以答案为3c + b + b - 2
elif b == 1
那么3的倍数,3的倍数 - 1(将一个3换成2)都能被表示,共2c种,再加上3c + 2这个数,所以答案为2c + 1
elif b==0
答案为c

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstdlib>
#include <stack>
#include <vector>
#include <cstring>
#include <queue>
#define msc(X) memset(X,-1,sizeof(X))
#define ms(X) memset(X,0,sizeof(X))
typedef long long LL;
using namespace std;
int main(int argc, char const *argv[])
{
    int a,b,c;
    scanf("%d%d%d",&a,&b,&c);
    if(a>=2) printf("%lld\n",a+2ll*b+3ll*c );
    else {
        if(a==0){
            if(b>=2){
                if(c>0) printf("%lld\n",3ll*c+2ll*b-2ll );
                else printf("%lld\n",(LL)b );
            } 
            else if(b==1) printf("%lld\n",2ll*c+1ll );
            else printf("%lld\n",(LL)c );
        } 
        else{
            if(b>=2){
                if(c>0) printf("%lld\n",3ll*c+2ll*b+1ll );
                else printf("%lld\n",2ll*b+1ll );
            } 
            else if(b==1) printf("%lld\n",3ll*c+3ll );
            else printf("%lld\n",2ll*c+1ll );
        }
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值