CodeForces-1296 B Food Buying

本文讨论了如何在拥有初始金额s的情况下,通过购买食物并获取现金返还来最大化消费。关键在于每次选择花费10的倍数,以获取最大现金回馈。对于每个测试用例,给出了如何通过优化策略花费最多金额的方法。
摘要由CSDN通过智能技术生成

See this article on my own blog https://dyingdown.github.io/2020/02/05/CodeForces-1296B-Food-Buying/

B. Food Buying
time limit per test: 1 second
memory limit per test: 256 megabytes
input: standard input
output:standard output

Mishka wants to buy some food in the nearby shop. Initially, he has s s s burles on his card.

Mishka can perform the following operation any number of times (possibly, zero): choose some positive integer number 1 ≤ x ≤ s 1≤x≤s 1xs, buy food that costs exactly xx burles and obtain ⌊ x 10 ⌋ ⌊\frac{x}{10}⌋ 10x burles as a cashback (in other words, Mishka spends x x x burles and obtains ⌊ x 10 ⌋ ⌊\frac{x}{10}⌋ 10x back). The operation ⌊ a b ⌋ ⌊\frac{a}{b}⌋ ba means a a a divided by b b b rounded down.

It is guaranteed that you can always buy some food that costs x x x for any possible value of x x x.

Your task is to say the maximum number of burles Mishka can spend if he buys food optimally.

For example, if Mishka has s = 19 s=19 s=19 burles then the maximum number of burles he can spend is 21 21 21. Firstly, he can spend x = 10 x=10 x=10 burles, obtain 1 1 1 burle as a cashback. Now he has s = 10 s=10 s=10 burles, so can spend x = 10 x=10 x=10 burles, obtain 1 1 1 burle as a cashback and spend it too.

You have to answer t t t independent test cases.

Input

The first line of the input contains one integer t t t ( 1 ≤ t ≤ 104 ) (1≤t≤104) (1t104) — the number of test cases.

The next t t t lines describe test cases. Each test case is given on a separate line and consists of one integer s s s ( 1 ≤ s ≤ 109 ) (1≤s≤109) (1s109) — the number of burles Mishka initially has.

Output

For each test case print the answer on it — the maximum number of burles Mishka can spend if he buys food optimally.

Example

input
6
1
10
19
9876
12345
1000000000
output
1
11
21
10973
13716
1111111111

Analysis

This is stimulating the process.

First, spend the money of multiples of ten. Spend the most at once.

Second, add up the rest and feedback money.

Third, do the first do.

Loop until the money is 0.

Code

#include<bits/stdc++.h>

using namespace std;

int a[200000];
int main() {
    int t;
    cin >> t;
    while(t --) {
        int n;
        cin >> n;
        int count = 0;
        while(n) {
            if (n < 10) {
                count += n;
                n = 0;
            } else {
                int s = n / 10;
                count += s * 10;
                n %= 10;
                n += s;
            }
        }
        cout << count << endl;
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值