zoukankan      html  css  js  c++  java
  • Educational Codeforces Round 116 (Rated for Div. 2), problem: (C) Banknotes

    传送门 Problem - C - Codeforces 

     题目

    题目重点内容手打翻译:(欢迎批评指正)

    在柏林, 使用着n套不同的货币(banknotes)。第i个货币面额为10ai 元,货币的第一种只能是1。定义f(s)为需要s元的最小货币数量,例如货币面额分别为1,10,100,然后f(59) = 14 :因为 九个面额1元的货币和五个面额10元的货币,也就是9*1+5*10=59元,并且没有办法使用更少的货币数量

     思路

    尽量选择小面值的, 还不能被其它货币代替的, 也就是10ai+1  - 10ai - 1, 题目样例很良心, 可以猜出来, 部分解释在代码里

     AC代码

    #include <iostream>
    #include <algorithm>
    
    using namespace std;
    
    typedef long long LL;
    const int N = 1e6;
    LL money[15];
    int a[20];
    
    void init()
    {
        money[0] = 1;//money是10的i次方
        for(int i = 1; i <= 10; i ++)
            money[i] = money[i-1]*(LL)10;
    }
    int main(){
        int t, n, k;
        
        init();
        cin >> t;
        while(t --)
        {
            cin >> n >>k;
            k ++;//k是货币数量, +1因为最后要让他k个货币无法达到这些钱(res)
            for(int i = 0; i < n; i ++)    cin >> a[i];
            
            sort(a, a+n);
            
            LL res = 0;
            for(int i = 0; i < n; i ++)
            {
                if(i == n-1){//特判, 多写点这些就不用考虑最后了
                    res += (LL)k * money[a[i]];
                    break;
                }

            //chaju就是差距,比如1和10差9,1和100差99,代表本回合最多能加多少个a[i] LL chaju
    = 0, tt = a[i+1]-a[i]; chaju = money[tt] - 1; if(k > chaju){ k -= chaju; res += (LL)chaju * money[a[i]]; } else{ res += (LL)k * money[a[i]]; break; } } cout << res <<endl; } return 0; }
  • 相关阅读:
    JQuery 快速入门一篇通
    Winform 显示Gif图片
    MD5编码工具类 MD5Code.java
    Asp.Net 上传图片并生成高清晰缩略图
    winform时钟c#代码
    PHP面试题汇总
    PHP条件语句语法与示例
    Android声音播放实例代码
    html和js基础功能代码备份
    纯C#实现屏幕指定区域截屏
  • 原文地址:https://www.cnblogs.com/la-la-wanf/p/15542074.html
Copyright © 2011-2022 走看看