CF1499
氵
如果 11 后出现了 00 就不行。
枚举走几段。
横竖可以分开算。
一定是:除了费用最小的都是走长度 \(1\),费用最小的包揽剩下的。
\(c\cdot lcm(a,b)-d\cdot gcd(a,b)=x\)
\(c\cdot \dfrac{a}{gcd(a,b)}\cdot \dfrac{b}{gcd(a,b)}=\dfrac{x}{gcd(a,b)}+d\)
\(gcd(a,b)\) 一定为 \(x\) 的因数,枚举 \(x\) 的因数。
把 \(\dfrac{\dfrac{x}{gcd(a,b)}+d}{c}\) 分解成两个互质的数的方案数累加进答案里去。
而分解成两个互质的数,就是对每一个质因子都选择去两边中的一边,有 \(2^{cnt}\) 中,\(cnt\) 是质因子个数。
而这个 \(2^{cnt}\) 可以用筛法的方式预处理。
给出俩字符串 \(a,b\),\(x\) 是 \(a\) 的子串,\(y\) 是 \(b\) 的子串;
\(x,y\) 可以用类似归并排序的方法把 \(x,y\) 的字符排到一个字符串里,使得 \(x,y\) 各自的字符相对顺序不变。
求和:对于所有 \((x,y)\) 的所有归并方法排得的字符串,有多少个相邻字符不同的字符串?(不同 \((x,y)\) 得相同结果只算一次)
定义 \(dp[i][j]\) 为对 \(a[1\sim i],b[1\sim j]\) 的后缀组合的求和。
意思就是 \(a[1\sim i]\) 的所有后缀和 \(b[1\sim j]\) 的所有后缀组合起来的答案的和。
最终输出 \(\sum\sum dp[i][j]\).
发现还不够,升一维:\(dp[i][j][0]\) 是在归并中以 \(a[i]\) 结尾的,\(dp[i][j][1]\) 是以 \(b[j]\) 结尾的。
若 \(a[i]\ne a[i - 1],dp[i][j][0]+=dp[i-1][j][0]\),但这种情况要注意:可能我们 \(a\) 的后缀选的是 \(a[i\sim i]\),所以我们要加上这种只选了 \(a[i]\) 的情况。
这种情况又分两种:① 如果 \(a[i]=b[j]\),这种情况不存在,因为 \(a[i]\) 接不了;② 否则就是查询 \(b[1\sim j]\) 中有多少个后缀相邻的不相等,这个也可以预处理。
若 \(a[i]\ne a[i - 1],dp[i][j][0]+=dp[i-1][j][1]\).
\(dp[][][1]\) 的计算同理:
若 \(b[j] \ne a[i],dp[i][j][1]+=dp[i][j-1][0],dp[i][j][1]+=a[1\sim i]\) 有多少个后缀相邻不相等。
若 \(b[j]\ne b[j - 1],dp[i][j][1]+=dp[i][j-1][1]\)
有多少种方式删掉一些边,使得树分成的连通分支的直径都 \(\le k\)?
随机推荐
- Contest3376 - 2024寒假集训-排位赛竞赛(一)
A: 幂位和 高精度. 用高精度加法或乘法算出\(2^{1000}\),再将各位累加即为答案. #include <bits/stdc++.h> using namespace std; ...
- bitcask论文翻译/笔记
翻译 论文来源:bitcask-intro.pdf (riak.com) 背景介绍 Bitcask的起源与Riak分布式数据库的历史紧密相连.在Riak的K/V集群中,每个节点都使用了可插拔的本地存储 ...
- Shell 脚本编程学习
本文为博主原创,转载请注明出处: 目录: 1. shell 变量 2. 运算符 3. if 语句 4.for 循环 5.while 语句 6. case 语法 7.跳出循环:continue 与 br ...
- SV 接口
概述 接口 main bus有很多信号线 verilog会先将模块的输出信号拉出来,然后再将其连接到其他模块,进行不同模块之间的连接比较麻烦且容易出错 interface - 将端口封装到接口中 接口 ...
- 探讨Java死锁的现象和解决方法
死锁是多线程编程中常见的问题,它会导致线程相互等待,无法继续执行.在Java中,死锁是一个需要注意和解决的重要问题.让我们通过一系列详细的例子来深入了解Java死锁的现象和解决方法. 1. 什么是死锁 ...
- [转帖]两种Nginx日志切分方案,狼厂主要在用第1种
两种Nginx日志切分方案,狼厂主要在用第1种 nginx的日志切分问题一直是运维nginx时需要重点关注的.本文将简单说明下nginx支持的两种日志切分方式. 一.定时任务切分 所谓的定时任务切分, ...
- [转帖]Django10——从db.sqlite3迁移到MySQL
https://blog.csdn.net/weixin_47197906/article/details/124889477 文章目录 1.查看Django支持的数据库 2.修改数据库配置 1.查看 ...
- [转帖]《Linux性能优化实战》笔记(六)—— Linux 软中断与对应故障分析方法
中断是系统用来响应硬件设备请求的一种机制,它会打断进程的正常调度和执行,然后调用内核中的中断处理程序来响应设备的请求. 一. 为什么要有中断 举个生活中的例子,让你感受一下中断的魅力.比如说你订了一份 ...
- 【转帖】bpftrace 指南
文章目录 0. bpftrace 0.1 bpftrace组件 0.2 bpftrace 帮助信息 0.3 bpftrace 工具速览表 0.4 bpftrace 探针 0.4.1 tracepoin ...
- JS中every的简单使用
every 方法 every()方法用于检测数组中的所有元素是否都满足指定条件. every()方法会遍历数组的每一项,如果有一项不满足条件,则返回false,剩余的项将不会再执行检测. 如果遍历完数 ...