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. helium的浏览器启动及option配置 - 1

    helium的浏览器启动及option配置 前言 helium只支持chrome和firefox两个浏览器,其中option配置是基于selelium来配置的,所以所调用的也是seleium的配置方式 ...

  2. Java解析xml文件遇到特殊符号&会出现异常的解决方案

    文/朱季谦 在一次Java解析xml文件的开发过程中,使用SAX解析时,出现了这样一个异常信息: Error on line 60 of document : 对实体 "xxx" ...

  3. 是时候学习Linux了

    前言: Linux是一个开源.免费的操作系统.其稳定性.安全性.处理多并发已经得到业界的认可,目前很多企业级的项目都会部署到Linux/unix系统上.如果你还不太了解Linux,希望本篇文章能够带你 ...

  4. python爬虫——抖音数据

    最近挺火的抖音短视频,不仅带火了一众主播,连不少做电商的也进驻其中,于是今天我来扒一扒这火的不要不要的抖音数据: 一.抓包工具获取用户ID 对于手机app数据,抓包是最直接也是最常见的手段,常用的抓包 ...

  5. 使用chrony安装chrony

      yum install chrony -y   使用chrony安装chrony 使用root用户登录~]# yum install chrony 默认的chrony进程位置/usr/sbin/c ...

  6. Linux创建RAID5_实战

    Linux创建RAID5实战 Linux创建RAID5 RAID5最少由三个硬盘组成,它将数据分散存储于阵列中的每个硬盘,并且还伴有一个数据校验位,数据位与校验位通过算法能相互验证 RAID5最多能允 ...

  7. IT菜鸟之VTP应用项目

    项目拓扑 项目要求 PC0和PC2能通信,PC1和PC3能通信,其余不能通信. 项目分析 可以通过vlan来实现相同网段不能通信:而相同vlan可以通信,不同vlan不能通信:同时需要用到trunk封 ...

  8. mysql基础之mariadb对表中数据的增删改查

    复习: 查看表:show tables; 创建表:create table 表名(字符类型); 删除表:drop table 表名; 对表的结构进行增删改查: 查看表结构:desc 表名; 修改表-添 ...

  9. STM32自己的封装库

    以前一直使用STM32的标准库,需要一步步地将代码加进去,将编译选项设置好,然后再编译整个工程. 这个编译过程是一个相当慢的过程!完全编译大约需要一支烟的时间.每次建立工程都这么编译,是一个相当浪费时 ...

  10. Java--反射机制——反射 API(Day_04)

    生活中迷茫感的产生,往往源之于坚持一件事放弃的那一刻,因为从那一刻起,你开始变得无聊,变得没有方向感. 运行环境 JDK8 + IntelliJ IDEA 2018.3  本文中使用的jar包链接 h ...