总的思路是:先二分找第l,r个字符位于第几个数。然后差分计算两个数之间有多少个 . 和 | 即可。
具体的:先实现一个函数,求第i个数的最后一个数位,位于第几个字符。然后就可以轻松的使用二分答案求第i个字符位于第几个数内。
这里注意,字符位于 ./| 上,也算作它位于后面那一个数。具体细节见代码注释。
定义一个无限字符串 S。依次写下正整数 1,2,3,… 的十进制形式,并在相邻两个数之间放入一个分隔符。将这些数从 1 开始每三个分为一组,组内使用短分隔符 ,,组与组之间使用长分隔符 ;。因此 S 的开头为 1,2,3;4,5,6;7,8,9;10,11,12;13,14...。
请回答若干次询问:给出两个位置 l 和 r(下标从 1 开始),统计 S 中闭区间 [l,r] 里的短分隔符 , 和长分隔符 ; 分别出现多少次。
保证询问次数 t 不超过 104,且 1≤l≤r≤1012。
第一行输入一个整数 t,表示询问次数。接下来 t 行,每行输入两个正整数 l 和 r,表示一次询问。保证 1≤t≤104,1≤l≤r≤1012。
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册