传送门 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;
}

最新文章

  1. iOS开发——post异步网络请求封装
  2. python基础一
  3. VBA编程常用语句
  4. spring mvc fastJson 自定义类型转换(返回数据) 实现对ObjectId类型转换
  5. 在这个变化的年代,IT人的方向在哪里?看两个故事
  6. OC知识梳理-NSArray与NSMutableArray相关知识
  7. dubbo源码之四——服务发布二
  8. 【ZZ】超全面的设计模式总结
  9. 如何在DJANGO里获取?带数据的东东,基于CBV
  10. 20160410javaweb之JDBC---DBUtils框架
  11. 《Effective C++》条款14 总是让base class拥有virtual destructor
  12. [转]IDENT_CURRENT、SCOPE_IDENTITY、@@IDENTITY 差異對照表
  13. web容器 - Jetty
  14. 走进C标准库(2)——&quot;stdio.h&quot;中的fopen函数
  15. Python twisted article
  16. Redis从入门到精通:中级篇
  17. PDF文件怎么修改,PDF文件编辑方法
  18. Android利用Mediapalyer播放本地资源文件声音
  19. text3
  20. loj#2038. 「SHOI2015」超能粒子炮・改

热门文章

  1. Apache BeanUtils与Spring BeanUtils性能比较
  2. 6月28日 Django form组件 和 modelform组件
  3. 内网渗透----Windows下信息收集
  4. ssh端口转发学习笔记
  5. 四旋翼中的PID调节方法 | betaflight固件如何调节PID
  6. [MRCTF]XOR-无法生成反汇编的处理
  7. class文件和java文件区别
  8. zookeeper的通知机制
  9. jinfo介绍
  10. (转载)mos管电压规格是什么,什么是VMOS管栅极