count

洛谷p1836

题目描述

一本书的页码是从 1-n 编号的连续整数: 1, 2, 3, ... , n。请你求出全部页码中

所有单个数字的和,例如第 123 页,它的和就是 1+2+3=6。

输入输出

输入

一行为 n(1 <= n <= 10^9)。

输出

一行,代表所有单个数字的和。

样例

样例输入

3456789

样例输出

96342015

说明

时间限制 1s/testcase

空间限制 32MB

思路

鉴于 n 可以达到 10^9,直接模拟是不可取的

逐位递推,发现规律.

  1. 对于10^7以内的数据,直接模拟暴力可以过
for(int i=1; i<=n; i++)
ans+=solve(i);
inline int solve(int x) {
int an=0;
while(x) {
an=an+x%10;
x/=10;
}
}
  1. 可以先用暴力算出n=1e1,1e2,1e3,1e4,1e5,1e6,1e7,1e8,1e9时的答案
  2. 对于大于1e7的数据我们可以逐位来算

    举个较小的例子:7654

    第一位:7 ;

    (1) 则1~6一定都在第一位出现了1e3次;

    (2) 7出现了654+1次

    (3) 再加上7*ans(1e3时的答案)

    (4) 然后去掉这一位,原本的第二位,变成了现在的第一位

代码

#include<cstdio>
#include<iostream>
#include<cstring>
#include<ctime> using namespace std;
typedef long long ll;
int n;
ll ans;
ll a[20];
inline int solve(int x) {
int an=0;
while(x) {
an=an+x%10;
x/=10;
}
return an;
}
int main() {
freopen("count.in","r",stdin);
freopen("count.out","w",stdout);
scanf("%d",&n);
if(n<=1e7) {
for(int i=1; i<=n; i++)
ans+=solve(i);
printf("%d",ans);
return 0;
}
a[1]=45;
a[2]=900;
a[3]=13500;
a[4]=180000;
a[5]=2250000;
a[6]=27000000;
a[7]=315000000;
a[8]=3600000000LL;
if(n<1e8) {
ll temp=1e7,pos=7;
while(pos) {
int k1=n/temp;
k1--;
ans+=(ll)temp*(ll)k1*(ll)(k1+1)/2;
ans+=(ll)(k1+1)*(ll)a[pos];
ans+=(ll)(k1+1)*(ll)(n%temp+1);
n%=temp;
temp/=10;
pos--;
}
ans+=(ll)n*(ll)(n+1)/2;
printf("%lld",ans);
return 0;
}
if(n<1e9) {
ll temp=1e8,pos=8;
while(pos) {
int k1=n/temp;
ans+=(ll)temp*(ll)k1*(ll)(k1-1)/2; //(1)
ans+=(ll)(k1)*(ll)a[pos]; //(3)
ans+=(ll)(k1)*(ll)(n%temp+1); //(2)
n%=temp; //(4)
temp/=10; //(4)
pos--; //(4)
}
ans+=(ll)n*(ll)(n+1)/2;
printf("%lld",ans);
return 0;
}
return 0;
}

【数学】8.30题解-count数页码的更多相关文章

  1. 洛谷试炼场-简单数学问题-P1045 麦森数-高精度快速幂

    洛谷试炼场-简单数学问题 B--P1045 麦森数 Description 形如2^P−1的素数称为麦森数,这时P一定也是个素数.但反过来不一定,即如果PP是个素数,2^P-1 不一定也是素数.到19 ...

  2. P1836 【数页码_NOI导刊2011提高(04)】

    P1836 数页码_NOI导刊2011提高(04) 题目描述 一本书的页码是从1—n编号的连续整数:1,2,3,…,n.请你求出全部页码中所有单个数字的和,例如第123页,它的和就是1+2+3=6. ...

  3. [题解] LOJ 3300 洛谷 P6620 [省选联考 2020 A 卷] 组合数问题 数学,第二类斯特林数,下降幂

    题目 题目里要求的是: \[\sum_{k=0}^n f(k) \times X^k \times \binom nk \] 这里面出现了给定的多项式,还有组合数,这种题目的套路就是先把给定的普通多项 ...

  4. 【LSGDOJ 2015】数页码

    题目描述 一本书的页码是从 1-n 编号的连续整数:1, 2, 3, ... , n.请你求出全部页码中所有单个数字的和,例如第 123 页,它的和就是 1+2+3=6. 输入 一行为 n(1 < ...

  5. 题解-[SDOI2014]数数

    [SDOI2014]数数 这题的前置知识是AC自动机和dp,前置题目是 [JSOI2007]文本生成器,前置题目我写的题解 题解-[JSOI2007]文本生成器.我的讲解假设你做过上面那道题. 这题比 ...

  6. [LeetCode 题解]: Count and Say

    The count-and-say sequence is the sequence of integers beginning as follows:1, 11, 21, 1211, 111221, ...

  7. [转载]数学【p1900】 自我数

    题目描述-->p1900 自我数 本文转自@keambar 转载已经原作者同意 分析: 思路还是比较好给出的: 用类似筛选素数的方法筛选自我数. 但是要注意到题目限制的空间仅有4M,不够开10^ ...

  8. 洛谷【P839】【NOI导刊】——数页码

    题面 一道找规律好题... 首先,我们肯定只能一位一位的统计答案,考虑从高位向低位统计,显然这样要方便的多. 对于第i位,我们统计从$a[i+1]*10^i+0$到$a[i+1]*10^i+a[i]* ...

  9. LeetCode(38)题解: Count and Say

    https://leetcode.com/problems/count-and-say/ 题目: The count-and-say sequence is the sequence of integ ...

随机推荐

  1. .NET Worker Service 如何优雅退出

    上一篇文章中我们了解了 .NET Worker Service 的入门知识[1],今天我们接着介绍一下如何优雅地关闭和退出 Worker Service. Worker 类 从上一篇文章中,我们已经知 ...

  2. php中输出函数的区别

    isset() .empty()与is_null的区别 1.当变量未定义时,is_null() 和"参数本身"是不允许作为参数判断的,会报Notice警告错误: 2.empty , ...

  3. Linux 面试总结

    1. 统计指定目录的文件个数: find / -type f | wc –l 2.Linux 下常用目录 /boot:这个目录是用来存放与系统启动相关的文件/root:root用户的家目录/bin:存 ...

  4. Swagger简明教程

    一.什么是swagger Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化RESTful风格的 Web 服务.总体目标是使客户端和文件系统作为服务器以同样的速度来更新.文件的方法, ...

  5. [源码分析] 定时任务调度框架 Quartz 之 故障切换

    [源码分析] 定时任务调度框架 Quartz 之 故障切换 目录 [源码分析] 定时任务调度框架 Quartz 之 故障切换 0x00 摘要 0x01 基础概念 1.1 分布式 1.1.1 功能方面 ...

  6. CENTOS7network config文件不能直接bak 必须建立bak目录再bak

    CENTOS7network config文件不能直接bak 必须建立bak目录再bak

  7. 在python的class中的,self到底是什么?

    答案:self可以理解为一个字典变量,内部存的就是对象的数据属性.如:{'name':'zhang','age':'18'}就是这些. 注意只有数据属性,并没有创建新的类的方法.  类-----> ...

  8. testlink安装(mac os)

    安装依赖:xampp.mysql.testlink 一.xampp安装(参考:https://blog.csdn.net/it_cgq/article/details/79430511) 1.下载xa ...

  9. Linux 部署 iSCSI 客户端配置(Windows)

    Linux 部署 iSCSI 客户端配置(Windows) 客户端环境 Client :Windows 7 ip :192.168.121.138 一.首先查看客户端本地所有的磁盘 查看路径:邮件计算 ...

  10. bug修复

    bug严重级别 bug个数 bug修复率 上个版本的bug修复率 和arm对比 arm已修复