题意

给定两个整数 l 和 r ,对于所有满足1 ≤ l ≤ x ≤ r ≤ 10^9 的 x ,把 x 的所有约数全部写下来。对于每个写下来的数,只保留最高位的那个数码。求1~9每个数码出现的次数。

思路

首先我们只需要能求出从1到x的答案,然后减就好了,对于不超过x√\sqrt x的数,就要在这个的最高位的计数上加x/x√x/\sqrt x,并记录下x/x√x/\sqrt x,放到栈中,对于超过x√\sqrt x的数,就会有一段数作为约数出现在1到x中的次数都相等,而这个界线就是之前存在栈里的那些数,此时我们需要做的是能够求出1到y中对每个数取最高位那么1到9出现的次数,然后相减即可,经过这两步就可以得到题目要的结果

代码

#include <cstdio>
#include <cmath>
#include <stack>
using namespace std;
long long ans1[10],ans2[10],ad1[10],ad2[10];
long long hdigit(long long x)
{while(x>=10)x/=10;return x;
}
void calc2(long long x,long long *d)
{long long xx=x,cnt=0,temp;for(long long i=0;i<=9;i++)d[i]=0;if(x==0)return;while(xx>0){xx/=10;cnt++;}temp=1;for(long long i=0;i<cnt-1;i++){for(int j=1;j<=9;j++)d[j]+=temp;temp*=10;}for(long long i=1;i<hdigit(x);i++)d[i]+=temp;d[hdigit(x)]+=x-hdigit(x)*temp+1;return;
}
void calc(long long x,long long* d)
{for(long long i=0;i<=9;i++)d[i]=0;if(x==0)return;long long e=sqrt(x),ee;ee=e;stack<long long> st;for(long long i=1;i<=e;i++){d[hdigit(i)]+=x/i;st.push(x/i);}while(!st.empty()){if(e==st.top()){st.pop();ee--;continue;}if(st.empty())break;calc2(st.top(),ad1);calc2(e,ad2);//printf("e:%lld sttop:%lld\n",e,st.top());for(long long i=1;i<=9;i++){//printf("%lld\n",ad1[i]-ad2[i]);d[i]+=(ad1[i]-ad2[i])*ee;}e=st.top();}return;
}
int main()
{long long l,r;scanf("%lld%lld",&l,&r);calc(r,ans1);calc(l-1,ans2);for(long long i=1;i<=9;i++)printf("%lld\n",ans1[i]-ans2[i]);return 0;
}

CodeM资格赛E 数码 题解相关推荐

  1. loj 6083.「美团 CodeM 资格赛」数码

    题目: 给定两个整数\(l\)和\(r\),对于任意\(x\),满足\(l\leq x\leq r\),把\(x\)所有约数写下来. 对于每个写下来的数,只保留最高位的那个数码.求\([1,9]\)中 ...

  2. CodeM资格赛B 锦标赛 题解

    题意 组委会正在为美团点评CodeM大赛的决赛设计新赛制. 比赛有 n 个人参加(其中 n 为2的幂),每个参赛者根据资格赛和预赛.复赛的成绩,会有不同的积分.比赛采取锦标赛赛制,分轮次进行,设某一轮 ...

  3. CodeM资格赛C 优惠券 题解

    题意 美团点评上有很多餐馆优惠券,用户可以在美团点评App上购买.每张优惠券有一个唯一的正整数编号.当用户在相应餐馆就餐时,可以在餐馆使用优惠券进行消费.优惠券的购买和使用按照时间顺序逐行记录在日志文 ...

  4. 2018美团codeM资格赛——python代码

    2018美团codeM资格赛--python代码 第一题:下单 题目描述 美团在吃喝玩乐等很多方面都给大家提供了便利.最近又增加了一项新业务:小象生鲜.这是新零售超市,你既可以在线下超市门店选购生鲜食 ...

  5. 美团2017年CodeM资格赛题解

    最近想要参加今年的CodeM竞赛,所以把去年的题做了一遍,顺便写个题解,做个记录. 资格赛有A-F,共6道题,资格赛不限时,而且只要完成一道题就可以了. A.数码 题意:给定两个整数 l 和 r ,对 ...

  6. CodeM资格赛D 送外卖 题解

    题意 n 个小区排成一列,编号为从 0 到 n-1 .一开始,美团外卖员在第0号小区,目标为位于第 n-1 个小区的配送站. 给定两个整数数列 a[0]~a[n-1] 和 b[0]~b[n-1] ,在 ...

  7. CodeM资格赛A 音乐研究 题解

    题意 美团外卖的品牌代言人袋鼠先生最近正在进行音乐研究.他有两段音频,每段音频是一个表示音高的序列.现在袋鼠先生想要在第二段音频中找出与第一段音频最相近的部分. 具体地说,就是在第二段音频中找到一个长 ...

  8. CodeM资格赛 Round A 最长树链

    按照题解的做法,对于每一个质约数分别进行讨论最长链就行 对于每一个数的质约数可是比logn还要小的 比赛的时候没人写,我也没看 = =,可惜了,不过我当时对于复杂度的把握也不大啊 #include & ...

  9. loj 6085.「美团 CodeM 资格赛」优惠券

    题目: 一个有门禁的大楼,初始时里面没有人. 现在有一些人在进出大楼,每个人都有一个唯一的编号.现在有他们进出大楼的记录,但是有些被污染了,只能知道这里有一条记录,具体并不能知道. 一个人只有进大楼, ...

最新文章

  1. git 统计单个开发的代码量
  2. boost::geometry模块Linestring多边形叠加示例
  3. Win7 下打开wifi共享的方法
  4. h264检测是I帧还是P帧
  5. mysql查询库中所有的表名,mysql查询指定表中的所有字段名及其相关信息
  6. TensorFlow实战3——TensorFlow实现CNN
  7. 算法导论笔记 第三十章 多项式与快速傅里叶变化
  8. 面试题--------10、索引是什么,有什么作用和优缺点
  9. 执行pip命令时遇到 Fatal error in launcher: Unable to create process using ''
  10. 10- monkey日志分析
  11. 关于Vivado Simulator-ERROR: Cannot find design unit work. in library work located at xsim.dir /work
  12. 英语形容词的排列顺序
  13. 近期你已经授权登录过_原来我的微信、QQ 授权登录过这么多应用!(附查找及解绑方法)...
  14. 手机如何测光照度_手机摄影,如何进行准确的测光?一篇文章教会你玩转“测光”...
  15. 王炸-GPT4.0的新能力与商业价值
  16. php编程入门先学什么 PHP程序员需要具备哪些技能
  17. python 100days github_GitHub - shuipf/Python-100-Days: Python - 100天从新手到大师
  18. 分析图第二讲导出图片和后期PS5.12
  19. 什么是IP?什么是DN/DNS?什么是hosts文件?计算机访问网络的原理又是怎样的?
  20. 如何选择及管理腾讯云 MySQL 数据库

热门文章

  1. [博学谷学习记录]超强总结,用心分享|架构 Nacos入门
  2. 第 11 场双周赛-5089. 安排会议日程(双指针)
  3. Python——日历模块
  4. 在SNMP Service属性中不显示安全选项的解决办法
  5. 数学建模的常用模型和方法
  6. 2019中信软开社招
  7. LeetCode-912-排序数组
  8. SCAU10690 分面包
  9. 山外看山 —— 评The Art of Unix Programming
  10. 数据分析平台要点梳理