码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 数位dp,338. 计数问题


    338. 计数问题 - AcWing题库

    给定两个整数 a 和 b,求 a 和 b 之间的所有数字中 0∼90∼9 的出现次数。

    例如,a=1024,b=1032,则 a 和 b 之间共有 9 个数如下:

    1024 1025 1026 1027 1028 1029 1030 1031 1032

    其中 0 出现 10 次,1 出现 10 次,2 出现 7 次,3 出现 3 次等等…

    输入格式

    输入包含多组测试数据。

    每组测试数据占一行,包含两个整数 a 和 b。

    当读入一行为 0 时,表示输入终止,且该行不作处理。

    输出格式

    每组数据输出一个结果,每个结果占一行。

    每个结果包含十个用空格隔开的数字,第一个数字表示 0 出现的次数,第二个数字表示 1 出现的次数,以此类推。

    数据范围

    0

    输入样例:
    1. 1 10
    2. 44 497
    3. 346 542
    4. 1199 1748
    5. 1496 1403
    6. 1004 503
    7. 1714 190
    8. 1317 854
    9. 1976 494
    10. 1001 1960
    11. 0 0
    输出样例:
    1. 1 2 1 1 1 1 1 1 1 1
    2. 85 185 185 185 190 96 96 96 95 93
    3. 40 40 40 93 136 82 40 40 40 40
    4. 115 666 215 215 214 205 205 154 105 106
    5. 16 113 19 20 114 20 20 19 19 16
    6. 107 105 100 101 101 197 200 200 200 200
    7. 413 1133 503 503 503 502 502 417 402 412
    8. 196 512 186 104 87 93 97 97 142 196
    9. 398 1375 398 398 405 499 499 495 488 471
    10. 294 1256 296 296 296 296 287 286 286 247

     解析:

    数位dp核心思想:分类讨论,处理特殊情况

    本题技巧:求区间中的答案,可以考虑前缀和答案,类似前缀和

    AcWing 338. 计数问题(算法基础课) - AcWing

    1. #include
    2. #include
    3. #include
    4. #include
    5. #include
    6. #include
    7. #include
    8. #include
    9. #include
    10. #include
    11. #include
    12. #include
    13. #include
    14. #include
    15. using namespace std;
    16. typedef long long LL;
    17. int a, b;
    18. int get(vector<int>num, int l, int r) {
    19. int ret = 0;
    20. for (int i = l; i >=r; i--) {
    21. ret = ret * 10 + num[i];
    22. }
    23. return ret;
    24. }
    25. int power(int i) {
    26. int ret = 1;
    27. while (i--) {
    28. ret *= 10;
    29. }
    30. return ret;
    31. }
    32. int count(int n,int x) {
    33. if (!n)return 0;
    34. vector<int>num;
    35. int ret = 0;
    36. while (n) {
    37. num.push_back(n % 10);
    38. n /= 10;
    39. }
    40. n = num.size();
    41. for (int i = n - 1 - !x; i >= 0; i--) {
    42. if (i < n - 1) {
    43. ret += get(num, n - 1, i+1) * power(i);
    44. if (x == 0)ret -= power(i);
    45. }
    46. if (num[i] == x) {
    47. ret += get(num, i-1, 0) + 1;
    48. }
    49. else if (num[i] > x) {
    50. ret += power(i);
    51. }
    52. }
    53. return ret;
    54. }
    55. int main() {
    56. while (scanf("%d%d", &a, &b) != EOF) {
    57. if (a == 0 && b == 0) {
    58. break;
    59. }
    60. if (a > b)
    61. swap(a, b);
    62. for (int i = 0; i < 10; i++) {
    63. cout << count(b, i) - count(a-1, i) << " ";
    64. }
    65. cout << endl;
    66. }
    67. return 0;
    68. }

  • 相关阅读:
    c语言实现通讯录(用三种方法来实现一个属于你的通讯录)
    商超智能守护:AI监控技术在零售安全中的应用
    《软件方法》自测题解析007:设计工作流,有彩蛋
    Windows10上使用llama-recipes(LoRA)来对llama-2-7b做fine-tune
    100V-240V输入5V/2A输出恒压恒流隔离控制芯片AH1010
    2022牛客多校十 F-Shannon Switching Game?(博弈+bfs)
    【React-Router】路由导航
    基础不牢的把vue的插槽再好好看下吧
    kali插入无线网卡后WiFi图标是灰色,无法扫描网络
    react数据管理之setState与Props
  • 原文地址:https://blog.csdn.net/Landing_on_Mars/article/details/133434735
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号