博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
codeforces B. Making Sequences is Fun 解题报告
阅读量:5051 次
发布时间:2019-06-12

本文共 1325 字,大约阅读时间需要 4 分钟。

题目链接:

题目意思:给出w,m和k,需要找出从m开始,可以有多少个连续的数(m+1,m+2,...)(在添加(m+i)这个数到序列时,需要付出s(m+i) * k的代价,i = 1,2,...)满足不超过总代价w的长度。

      可以列一个这样的方程:

  一位数的个数*1*k + 两位数的个数*2*k + 三位数的个数*2*k + ... + n位数的个数*n*k = w

     化简后得到:

  一位数的个数*1 + 两位数的个数*2 + 三位数的个数*2 + ... + n位数的个数*n = w / k

     思路就是:得出m是一个几位数(假设为len)——> m要到达len+1位数时还需要多少个len位数 ——> 代价 w 更新。

     

1 #include 
2 #include
3 #include
4 using namespace std; 5 6 int main() 7 { 8 __int64 w, m, k, i, res, tmp, num; 9 10 while (scanf("%I64d%I64d%I64d", &w, &m, &k) != EOF)11 {12 w /= k;13 int len = 0;14 // 判断m是几位数(len)15 for (tmp = m; tmp; tmp /= 10)16 len++;17 // 赋予num最大的len位数(10,100,1000, ...)18 num = 1;19 for (i = 1; i <= len; i++)20 num *= 10;21 for (res = 0, i = len; ;i++)22 {23 if (w - (num-m) * i >= 0) // i位数里有多少个k24 {25 w -= i * (num-m); 26 res += num - m;27 m = num;28 num *= 10;29 }30 else // w 不足num-m31 {32 res += w/i; 33 break;34 }35 }36 printf("%I64d\n", res);37 }38 return 0;39 }

 

转载于:https://www.cnblogs.com/windysai/p/3474267.html

你可能感兴趣的文章
ES6学习笔记(五)-函数扩展
查看>>
统计学习方法笔记 -- 朴素贝叶斯
查看>>
PyQt5+python+pycharm开发环境配置
查看>>
python做语音信号处理
查看>>
App被拒选择回复还是重新提审,如何选择最高效的应对方式?
查看>>
第一阶段冲刺(第二天)
查看>>
四、优化及调试--网站优化--SEO在网页制作中的应用
查看>>
23个常用的文件处理方法
查看>>
51Nod 1182 完美字符串
查看>>
十天冲刺(5)
查看>>
C语言中关于strcry 引发的思考
查看>>
创建一个数组有三种方法
查看>>
Mysql了解及安装
查看>>
redis的string和list
查看>>
marquee标签详解
查看>>
黑马 StringBuffer
查看>>
dedecms /include/uploadsafe.inc.php SQL Injection Via Local Variable Overriding Vul
查看>>
ThinkPHP--浏览历史
查看>>
iptables
查看>>
mysql常用函数
查看>>