数码

数码

https://ac.nowcoder.com/acm/problem/13221

https://ac.nowcoder.com/acm/problem/13221
emm,数据范围1e9,顶多O(n)复杂度,但是看题可想而知,复杂度要小于O(n),跟数学有关系;再者,i|n形式,可以考虑考虑数论分块;

#include<iostream>
#include<algorithm>
using namespace std;
  long long l,r;
long long calculate(long long x,long long k)
{
    long long h=0,ans=x/k;//k为第几个数码,ans初始化,对于1~r中,含有k的数的个数为x/k
    long long be=k*10,end=min(x,k*10+9);//枚举,例如:10~19
    for(;be<=x;be*=10,end=end*10+9)//在1~r中含有多少个,10~19,100~199,1000~1999...类似(不超范围)
    {
        h=min(x,end);
        for(int i=be;i<=h;)
        {
            long long tag=x/i;
            long long lim=min(x/tag,h);//数论分块的结论,x/(x/i),在这个区间里,贡献都一样,为tag
            ans+=tag*(lim-i+1);//lim为右端点-1(即lim+1这个数的贡献与前一个数不一样)
            i=lim+1;
        }
    }
    return ans;
}
int main()
{
    cin>>l>>r;
   for(int i=1;i<=9;i++)
   {
       cout<<calculate(r,i)-calculate(l-1,i)<<endl;
   }
    return 0;
}
全部评论

相关推荐

暴杀流调参工作者:春招又试了一些岗位,现在投递很有意思,不仅要精心准备简历,投递官网还得把自己写的东西一条一条复制上去,阿里更是各个bu都有自己的官网,重复操作无数次,投完简历卡完学历了,又该写性格测评、能力测评,写完了又要写专业笔试,最近还有些公司搞了AI辅助编程笔试,有些还有AI面试,对着机器人话也听不明白录屏硬说,终于到了人工面试又要一二三四面,小组成员面主管面部门主管面hr面,次次都没出错机会,稍有不慎就是挂。 卡学历卡项目卡论文卡实习什么都卡,没有不卡的😂
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务