CF1418A Buying Torches

本文介绍了Codeforces竞赛中CF1418A题目——Buying Torches,主要讨论如何使用木棒和煤炭合成火把,并通过交易策略找到获得k个火把的最少交易次数。关键在于理解交易规则并推导出数学公式。代码实现中需要注意防止溢出,并考虑交易次数取整的情况。
摘要由CSDN通过智能技术生成

CF1418A Buying Torches

题目链接

题目描述

你要获得 k 个火把,最开始你有 1 根木棒。一个木棒和一个煤炭可以合成一个火把,你也可以通过两种交易方式得到木棒或煤炭:

通过给商人 1 根木棒,获得 x 根木棒。
通过给商人 y 根木棒,获得 1 个煤炭。
求得到 k 个火把的最少交易次数。

思路

  • 1.由题意得一根木棒可以向商人换x根木棍,所以每次换的木根数要减一,就是x-1;
  • 2.由提意得一根加一个煤炭才可以做一个火把,向商人用x根木根才可以换一个煤炭所以,煤炭所要的木根个数是yk
    3,所以总共要做y根火把所需的木棍数为yk+y-1,所以需要的兑换次数为【(y
    k)+(y-1)】(x-1).

坑点

  • 1.要开long long

代码

#include <iostream>
using namespace std;
int main(){
    long long x,y,k,t,n;
    cin>>t;//t组数据
    for (int i=1;i<=t;i++){
        cin>>x>>y>>k;
        n=(k*y+k-1)/(x-1)+k;//n用来存储次数
        if ((k*y+k-1)%(x-1)==0){
            cout<<n<<endl;
        }
        else {
            n++;
            cout<<n<<endl;
        }
    }
    return 0;
}

总结

推公式,小思维题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值