AtCoder Regular Contest 090 F - Number of Digits
题目链接
Description
For a positive integer \(n\), let us define \(f(n)\) as the number of digits in base \(10\).
You are given an integer \(S(1≤S≤10^8)\). Count the number of the pairs of positive integers \((l,r)\) \((l≤r)\) such that \(f(l)+f(l+1)+…+f(r)=S\), and find the count modulo \(10^9+7\).
题解
分两种情况讨论。
\(1.\ f(l)\leq 7\)
则至多有\(10^8/8=12500000\)个八位数,所以\(r\leq 22500000\).
因此,可以预处理出\(f[1..22500000]\),然后采用 尺取法 得到 当\(f(l)\leq 7\)时 的\((l,r)\)组数.
\(2. \ f(l)\geq 8\)
此时,由 \(S\) 的限制,易知 \(f(r)-f(l)\leq 1\).
令 \(t=r-l+1\),枚举 \(t\)
若 \(f(l)==f(r)\)
则显然要求 \(t|S\),
记\(N\)位数的个数右 \(D_N\) 个,则符合要求的 \((l,r)\) 组数为 \(D_{\frac{S}{t}}-t+1\)
若 \(f(r)-f(l)==1\)
设 \(len=f(l)\) 且长度为 \(len\) 的数字有 \(x\) 个,长度为 \(len+1\) 的数字有 \(y\) 个,则有
x+y=t\\
x*len+y*(len+1)=S
\end{cases}
\]
其中\(len=\lfloor\frac{S}{t}\rfloor\).
记\(S=tq+r\ (0\leq r\lt t)\)
则方程组可转化为
x+y=t\\
xq+y(q+1)=tq+r
\end{cases}
\]
所以有
x=t-r=t-S\%t\\
y=r=S\%t
\end{cases}
\]
即对每个\(t\)此时有且仅有一组解。
统计上述三部分的答案,即为最终答案。
Code
#include <bits/stdc++.h>
#define lim1 10000000
#define lim2 22500000
using namespace std;
typedef long long LL;
int f[lim2+10];
const LL mod = 1e9+7;
void init() {
int l = 1, r = 10;
for (int k = 1; k <= 7; ++k) {
for (int i = l; i < r; ++i) f[i] = k;
l = r; r *= 10;
}
for (int i = lim1; i <= lim2; ++i) f[i] = 8;
}
LL poww(LL a, LL b) {
LL ret = 1;
while (b) {
if (b & 1) (ret *= a) %= mod;
(a *= a) %= mod;
b >>= 1;
}
return ret;
}
LL count1(LL x) {
int l = 1, r = 1, ret = 0; LL sum = 0;
while (true) {
while (r <= lim2 && sum < x) sum += f[r++];
if (sum < x) break;
if (sum == x) (ret += 1) %= mod;
sum -= f[l++];
if (l == lim1) break;
}
return ret;
}
LL count2(LL x) {
LL upp = x/8,
ret = upp;
for (int t = 1; t <= upp; ++t) {
if (x % t == 0) {
int len = x / t;
LL sub = 9 * poww(10, len-1) % mod;
(sub += mod - t) %= mod;
(ret += sub) %= mod;
}
}
return ret;
}
int main() {
init();
LL n;
scanf("%lld", &n);
LL ans1 = count1(n), ans2 = count2(n);
printf("%lld\n", (ans1+ans2)%mod);
return 0;
}
AtCoder Regular Contest 090 F - Number of Digits的更多相关文章
- AtCoder Regular Contest 069 F Flags 二分,2-sat,线段树优化建图
AtCoder Regular Contest 069 F Flags 二分,2-sat,线段树优化建图 链接 AtCoder 大意 在数轴上放上n个点,点i可能的位置有\(x_i\)或者\(y_i\ ...
- AtCoder Regular Contest 090 C D E F
C - Candies 题意 求左上角走到右下角最大的数字和. 思路 直接\(dp\) Code #include <bits/stdc++.h> #define maxn 110 usi ...
- AtCoder Regular Contest 074 F - Lotus Leaves
题目传送门:https://arc074.contest.atcoder.jp/tasks/arc074_d 题目大意: 给定一个\(H×W\)的网格图,o是可以踩踏的点,.是不可踩踏的点. 现有一人 ...
- AtCoder Regular Contest 081 F - Flip and Rectangles
题目传送门:https://arc081.contest.atcoder.jp/tasks/arc081_d 题目大意: 给定一个\(n×m\)的棋盘,棋盘上有一些黑点和白点,每次你可以选择一行或一列 ...
- AtCoder Regular Contest 090
C - Candies 链接:https://arc090.contest.atcoder.jp/tasks/arc090_a 题意:从左上角走到右下角,只能向右和向下走,问能最多能拿多少糖果. 思路 ...
- AtCoder Regular Contest 064 F - Rotated Palindromes
Problem Statement Takahashi and Aoki are going to together construct a sequence of integers. First, ...
- AtCoder Regular Contest 066 F Contest with Drinks Hard
题意: 你现在有n个题目可以做,第i个题目需要的时间为t[i],你要选择其中的若干题目去做.不妨令choose[i]表示第i个题目做不做.定义cost=∑(i<=n)∑(i<=j<= ...
- AtCoder Regular Contest 076 F - Exhausted?
题意: n个人抢m个凳子,第i个人做的位置必须小于li或大于ri,问最少几个人坐不上. 这是一个二分图最大匹配的问题,hall定理可以用来求二分图最大匹配. 关于hall定理及证明,栋爷博客里有:ht ...
- AtCoder Regular Contest 067 F - Yakiniku Restaurants
题意: 有n个餐厅排成一排,第i个与第i+1个之间距离是Ai. 有m种食物,每种食物只能在一个餐厅里吃,第j种食物在第i个餐厅里吃的收益是$b[i][j]$. 选择每种食物在哪个餐厅里吃,使收益减去走 ...
随机推荐
- oracle中常用的两个伪列
伪列 伪列就行oracle中的一个列表,但世界上它并未存储在表中,伪列可以被查询但是不能被插入或者更改. rowID 该伪列返回该行地址,可以使用rowID值来定位表中的一行.通常rowID值可以标识 ...
- linux下的source命令
Linux Source命令及脚本的执行方式解析 当我修改了/etc/profile文件,我想让它立刻生效,而不用重新登录:这时就想到用source命令,如:source /etc/profile ...
- hihocoder1015 kmp算法
#1015 : KMP算法 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在 ...
- 容斥原理:HDU-4135Co-prime
容斥原理公式:这里就需要用到容斥原理了,公式就是:n/2+n/3+n/5-n/(2*3)-n/(2*5)-n/(3*5)+n/(2*3*5). 求的是多个重合区间的里面的数字个数. 解题心得: 1.一 ...
- Python高级主题:Python ABC(抽象基类)
#抽象类实例 作用统一规范接口,降低使用复杂度.import abcclass Animal(metaclass = abc.ABCMeta): ##只能被继承,不能实例化,实例化会报错 @abc.a ...
- 网络流24题:P2762 太空飞行计划问题
P2762 太空飞行计划问题 题目背景 题目描述 W 教授正在为国家航天中心计划一系列的太空飞行.每次太空飞行可进行一系列商业性实验而获取利润.现已确定了一个可供选择的实验集合E={E1,E2,…,E ...
- 基类View
尽管类视图看上去类的种类繁多,但每个类都是各司其职的,且从类的命名就可以很容易地看出这个类的功能.大致可分为如下三个大的功能块,分别由三个类提供对应的方法: 处理 HTTP 请求.根据 HTTP 请求 ...
- Hyper-V 虚拟机快照:常见问题
发布时间: 2009年3月 更新时间: 2010年12月 应用到: Windows Server 2008 什么是虚拟机快照? 虚拟机快照可捕获正在运行的虚拟机的状态.数据和硬件配置. 快照有哪些用途 ...
- 【Distinct Subsequences】cpp
题目: Given a string S and a string T, count the number of distinct subsequences of T in S. A subseque ...
- 如何过滤adb logcat输出
简介: 本文介绍如何在 shell 命令行中过滤 adb logcat 输出的几个小技巧. 开发当中经常看到别人的 log 如洪水般瞬间刷满了屏幕,对自己有用的信息都被淹没了,影响心情也影响效率.下面 ...