首页 > 其他分享 >个人向口胡题解(4/3)

个人向口胡题解(4/3)

时间:2023-04-03 20:46:03浏览次数:49  
标签:个人 get 题解 LL len p10 向口 num sum

ABC295 F

题意:十进制下,给定两个正整数\(L、 R\)和一个字符串\(S\),设\(F(x)\)为\(S\)在\(x\)中一共出现多少次,求\(\sum_{x=L}^{R}F(x)\)。

如\(S=22, F(122)=1,F(123)=0,F(222)=2\)

思路:可以按\(S\)在\(x\)中匹配的位置分别计算贡献,匹配的位置知道了,那么合法的数个数就是这位的贡献。下界的限制有点麻烦,一个很常用的trick:\(\sum_{x=L}^{R}F(x)=\sum_{x=1}^{R}F(x)-\sum_{x=1}^{L-1}F(x)\),这样合法的数就是所有小于等于上界的数,这些数的个数可以二分出来。如果\(S\)是以\(0\)开头需要特判。

\(code\):

LL get_num(LL i, int k) {
    int t = k - len_s + 1;
    if (t < 0) return 1e17;
    i--;
    if (s[0] == '0') i += p10[t];
    LL p = i / p10[t], q = i % p10[t];
    return p * p10[k + 1] + stoll(s) * p10[t] + q;
}

LL calc(LL x) {
    len_s = s.length();
    LL res = 0;
    rep (k, 0, 15) {  // 从低位到高位枚举s[0]的起始位置k
        LL mn = get_num(1, k);
        if (mn > x) continue;
        LL l = 1, r = p10[16 - len_s];
        while (l < r) {
          LL mid = l + r + 1 >> 1;
          if (get_num(mid, k) <= x) l = mid;
          else r = mid - 1;
        }
        res += l;
    }
    return res;
}

void work() {
    LL L, R;
    cin >> s >> L >> R;
    cout << calc(R) - calc(L - 1) << '\n';
}

标签:个人,get,题解,LL,len,p10,向口,num,sum
From: https://www.cnblogs.com/xhy666/p/17284344.html

相关文章

  • win10计划任务程序库实现定时任务的自动执行程序及问题解决。
    win10计划任务程序库可以实现按照规则频率执行脚本的功能。现在将设置方法记录如下:创建任务步骤1、右键点击我的电脑,选择管理,依次点击:系统工具-》任务计划程序-》任务计划程序库。 2、点击最右侧操作中的创建基本任务,打开下面的弹窗。 3、创建任务的基本信息,下一步选择......
  • NodeJS 实战系列:个人开发者应该如何选购云服务
    这文章至少值一千元,因为这是我保守估计花出去的冤枉钱(请自行脑补一个苦笑的emoji)文章中会穿插选择云服务的一些建议,当然也会提供一些“薅羊毛”的技巧。不过在此之前我们要想清楚一件更重要的事情:我为了什么购买云服务做产品还是做技术这个问题不仅决定了你接下来的购买策略,还......
  • 问题解决-jdk配置问题
    我这里其实犯了一个低级错误。jdk的版本配置问题。之前报500实例化Servlet类[testServlet]异常就是这个问题。看图    这两个地方的版本一定要相同,不然报错是肯定的。虽然是很低级的问题,但是却真的会遇到,一不小心就弄错了。......
  • [2022年蓝桥杯C/C++ A组]个人做题记录
    碎碎念欸嘿,鸽了小半年去做了一些不喜欢的事情,但兜兜转转,还是acm最香捏求和题意求\(\sum_{i=1}^n\sum_{j=1}^na_i*a_j(i!=j)\)题解感觉是去年的时候笨人唯一做满分的题……经典前缀和,设\(sum[i]=\sum_{j=i}^na[j]\),答案即为\(\sum_{i=1}^{n-1}a[i]*sum[i+1]\)#definein......
  • Uniapp开发的微商个人相册多端小程序源码
    ☑️品牌:Uniapp☑️语言:vue☑️类型:微商个人相册☑️支持:小程序......
  • CF594A Warrior and Archer 题解
    由于本人在思索了很久后才把本题思路打通,所以为了帮助像我一样没有非常理解解法的人,我打算再将解法非常详细地叙述一遍,如果您无法理解解法,请跟着我再一步步将题目捋顺。Step.1解题意题目要求其实很好理解,共给出\(n\)个点的位置,A,B两个人轮流取点,A要求最后剩下的两个点尽量近,B......
  • 洛谷 P8918 『MdOI R5』Jump 题解
    题目传送门这一题其实很简单,只是要想到正确方法我一开始用了奇怪的搜索①无解的情况:看上去很离奇,实际上略加思索就会发现,如果输入\(n\)为偶数,那么就铁定无解。证明过程如下:令\(n\bmod{2}=0\),人距离\(n\)点的距离为\(dis\),则当走出第一步(步长为\(1\))时,有:\[dis=\midn......
  • 洛谷 P9009 [入门赛 #9] 牵连的世界 (Hard Version) 题解
    P9009[入门赛#9],真9。这是一道hack题,即你需要自造符合题意的数据使题中所给程序无法AC。Task01看数据范围知一切,显然有\(-2\times10^9\lea_i\le2\times10^9\),因此\(a_i\)可能为负数。注意C/C++中的取模%(mod)运算实质上是为取余运算(rem)对于整型数a,b来说......
  • 洛谷 P8762 [蓝桥杯 2021 国 ABC] 123 题解
    为什么可以使用前缀和,这里提供解释:初读题目,我们发现这个数列很迷惑,似乎不能使用数学方法来解。\[1,1,2,1,2,3,1,2,3,4,\cdots\]但是,我们可以想到数形结合的方式,我们将数列看作一个三角形,于是他变成了:\[1\]\[1,2\]\[1,2,3\]\[1,2,3,4\]\[\cdots\cdots\]于是本题变得好思......
  • SP181 SCUBADIV - Scuba diver 题解
    题目传送门题目大意潜水员有\(n\)个气缸,每个气缸能够提供容量为\(o_i\)的氧气和容量为\(d_i\)的氮气,每个气缸的重量为\(w_i\)。给出潜水员所需要的氧气量和氮气量,求所需气缸的总重的最低限度是多少。解题思路对于每个气缸,有两种不同的费用:氧气和氮气,需要满足这两个条......