首页 > 其他分享 >ABC338G 题解

ABC338G 题解

时间:2024-03-01 22:34:14浏览次数:35  
标签:Case 1234 题解 贡献 ABC338G 加号 考虑 times

ABC338G 题解

计数题,没有太多思维难度,就是麻烦。

显然 +* 是比较难搞的,应考虑子问题。

复杂度要求线性,考虑每个位置的贡献。

Case 1:只有数字

Ex: 1234

考虑 2 的贡献,枚举一下看看。

  • \(12=1\times 10+2\times1\)
  • \(123=1\times 100+2\times10+3\times1\)
  • \(1234=\dots\)
  • \(2=2\times1\)
  • \(23=2\times 10+3\times 1\)
  • \(234=\dots\)

2 贡献了 \(2\times 111=222\) 次。

引理:总贡献次数 \(=\) 左边 \(\times\) 右边

例如:122 贡献了 \(2\) 次,2342 贡献了 \(111\) 次,1234 中正好是 \(2\times111\) 次。

设当前是第 \(p\) 位,长度为 \(n\),则总贡献次数为 \(p\times\sum\limits_{i=0}^{n-p} 10^i\)。

证明显然,请读者自行完成。

Case 2:只有数字 & +

Ex: 99+1234+999

仍然考虑 2 的贡献次数,请读者仿照 Case 1 自行枚举。

发现第一个加号前和第二个加号后的内容是不影响答案的,故可以只考虑两加号之间的部分,最后加上前后长度即可。

设当前位置、后面第一个加号位置为 \(s,t\),当前忽略加号的位置为 \(pd\),总数字量为 \(n\),则总贡献次数为
\(pd\times\left(\sum\limits_{i=0}^{t-s-1} 10^i+ (n-pd)\times10^{t-s-1}\right)\)。

好长的式子

Case 3:数字 & + & *(原问题)

先解决算重复的问题。

比如 2*3 中,\(2\times3\) 只应该被计算一次,但如果计算贡献,会在 23 上分别统计一次,就算重了。

key:只在最后一个数上统计乘法答案(结合律)。

(当然你也可以在第一个数上计算,只不过从左到右扫,在最后统计更方便)

2*3 中,2 贡献 \(1\) 次,3 贡献 \(2+1=3\) 次。


Ex: 99+345*456*567*12+999

通过 Case 2 我们发现,可以把整个串用 + 号分割,每一小段单独考虑。

故统计 2 的答案,只需要看 345*456*567*12 这一部分,请读者自行枚举。

发现乘法对 2 的贡献就是345*456*567 的后缀贡献和,这是很容易 dp 计算的。具体说,就是每个数计算和,乘上后面的数,滚雪球。

\(\big[(3\times 100+4\times20+5\times3)\times 456+(4\times100+5\times20+6\times3)\big]\times 567 + \dots\)

加法的贡献和 Case 2 相同,不多赘述。

注意:乘法中非最后一个数的,向右只考虑乘号前、加号后的部分(反之亦然)!

例如 3 只考虑 345999,乘法部分不算。

小结

  • 分成 \(3\) 个子问题考虑。
  • 从简单开始枚举。
  • 考虑每个位置的贡献。
  • 分治(左右 & 符号分段)。
  • 相同的部分合并计算。
  • 乘法只算一次。

代码不难写,注意下标 & 取模的细节。

标签:Case,1234,题解,贡献,ABC338G,加号,考虑,times
From: https://www.cnblogs.com/Cindy-Li/p/18048099

相关文章

  • [ABC217F] Make Pair 题解
    [ABC217F]MakePair题解思路解析通过\(n\le200\)和“选出的两个学生离开队列,空出来的位置左右合拢”这两个细节可以想到能用区间dp做,\(f_{i,j}\)表示将\(i\toj\)这个区间全部选完的方案数,然后常规区间dp,加一个判断如果当前区间\([l,r]\)中\(l,r\)是朋友,就可......
  • P4690 [Ynoi2016] 镜中的昆虫 题解
    题目链接:镜中的昆虫经典题了,我们首先回顾下颜色数的常见做法统计:对每个位置维护一个\(pre_i\),表示与当前位置相同的颜色上一次出现位置。那么我们分讨一下。查询\([l,r]\)得到颜色数,对于\(pre_i<l\)的\(i\)点,显然它就是这个区间内\(a_i\)对应颜色出现的第一个位置,我们......
  • window.open 循环下载多个文件会打开新页签问题解决
     批量下载文件,循环使用window.open(url)的方式会打开新页签,参考了一位大侠的文章,使用iframe可以的:https://blog.csdn.net/nanke_yh/article/details/125145717如下:fileList.forEach(file=>{//同时下载多个文件,使用iframe下载,因为window.open或者a......
  • $\text{20240301}$ 字符串练习题解
    \(\text{20240301}\)字符串练习题解一定要写冬令营的题吗?遗憾的。P9717给了一个\(n\)个数的首尾相接的字符串,求若干个操作后能形成的不同的字符串大小。一次操作定义为:将字符串内所有的\(\text{01}\)同时改成\(\text{10}\),如图。通过这张图我们似乎发现了一个规律,这......
  • CF1937D Pinball 题解
    题目链接:https://codeforces.com/contest/1937/problem/D题意简述一个长为n的格子,用'<'或'>'组成的字符串表示,在位置i放一个小球,当前所在位置是'<'则下一秒左移一步,否则下一秒右移一步。小球移动后,之前位置的符号反转,'<'变成'>','>'变成'<',直到小球离开整个......
  • [CF1804F] Approximate Diameter 题解
    题目链接题目分析显然图结构不太好维护,容易想到维护树结构。维护生成树看起来就不太靠谱,容易想到维护最短路树。keyobservation:我们固定一个端点(不妨为\(1\)),求出这个点到每个点的最短路长度的最大值\(x\)。则一定有\(\lceil{d\over2}\rceil\lex\led\)。证明:显然\(x\l......
  • CF1827C Palindrome Partition 题解
    CF1827CPalindromePartition题解题面题目传送门。称一个字符串是好的,当且仅当它是一个长度为偶数的回文串或由若干长度为偶数的回文串拼接而成。给定一个长度为\(n\)的字符串\(s\),求有多少\(s\)的子串是好的。$1\len\le5\cdot10^5$,\(s\)仅包含小写字母。......
  • P6185 序列 题解
    如果发现自己莫名其妙错了,可能是代码UB,还开O2!!!!!!!!!!!传送门首先,对于每个操作2,将\(u_i,v_i\)连边。连边之后每个连通块内部可以在总和不变的情况下任意改变。用并查集将每个连通块缩点,然后对于每个操作1,将\(u_i,v_i\)连边。得到的图又会分成若干个连通块。判断整个图是否可行,只......
  • [ABC238F] Two Exams 题解
    [ABC238F]TwoExams题解思路解析这题很麻烦,因为有两个维度。所以可以想到先按照第一维排序,这样就不需要考虑第二维的问题。其次再发现数据范围小,可以想到能用dp做,接下来就考虑如何dp。首先我们要知道我们遍历到了第几个公民,同时还要知道还剩下几个代表名额,同时我们还需要思......
  • P8085 [COCI2011-2012#4] KRIPTOGRAM 题解
    P8085[COCI2011-2012#4]KRIPTOGRAM题解本文原发布于2024-02-07洛谷题库P8085[COCI2011-2012#4]KRIPTOGRAM题解区,现于2024-2-29转载至博客园思路解析这道题目的主要难点在于如何判断明文中形如\(\texttt{abcb}\)的子串可以和密文\(\texttt{bcac}\)匹配,因为如果......