首页 > 其他分享 >24.10.18

24.10.18

时间:2024-10-21 22:33:22浏览次数:1  
标签:rnk Down 18 sum 24.10 scnt fa mod

A

如果 \(i\) 可以继续往前走,那么必然存在 \(j \ge i > a_j\),对于每个 \(i\) ,将 \((a_i, i]\) 加一,从 \(x\) 能走到的最小点就是 \(x\) 左侧第一个 \(0\)。线段树区间加,线段树二分。

B

要求一条边强制经过,就确定了所有棋子的路径,两条边能同时选当且仅当它们确定的路径一致。用随机异或哈希判断两条边确定的路径集合是否一致。线段树维护区间异或。

C

#include <bits/stdc++.h>
#define rep(i, a, b) for (long long i = (a), i##end = (b); i <= i##end; ++i)
#define per(i, a, b) for (long long i = (a), i##end = (b); i >= i##end; --i)
using namespace std;
using LL = long long;
const int N = 8010;
const LL mod = 1e9 + 7;

/**
 * 钦定子序列在最左的出现位置统计
 * 
 * 设 f[i] 表示考虑到 i 且钦定 i 在 T 内的答案, 枚举上一个钦定点 j,
 * 考虑将 (j, i) 中的数填入 S 的方案数, 限制
 * - ∀p∈(j, i) a[p] = a[i], a[p] 不能选  (不然不是 T 中最左)
 * - 令 l 为最大的 p∈(j, i) 使得 a[p] = a[i],  必须 ∃q∈(l, i) a[q] 选入 S  (不然该方案应在 l 处被统计)
 * - 对 S 中每相邻两个数 p, q, 要求 ∀k∈(p, q), a[k] != a[q]  (不然不是 S 中最左) // 同单子序列 dp 限制
 */

int n, a[N];
LL f[N], g[N];

int main() {
	cin >> n;
	rep(i, 1, n) cin >> a[i];
	f[0] = 1;
	rep(i, 1, n + 1) {
		f[i] = f[i - 1];
		// 从后往前跑本质不同子序列个数放到 S, 要满足上述条件
		LL sum = 0, flag = 1;
		memset(g, 0, sizeof g);
		per(j, i - 1, 1) {
			if (a[j] == a[i]) flag = 0;
			else {
				LL tmp = sum;
				sum = (sum - g[a[j]] + mod) % mod;
				g[a[j]] = tmp + flag;
				sum = (sum + g[a[j]]) % mod;
			}
			f[i] = (f[i] + f[j - 1] * (sum + flag) % mod) % mod;
		}
	}
	LL sum = 0;
	memset(g, 0, sizeof g);
	rep(i, 1, n) {
		LL tmp = sum;
		sum = (sum - g[a[i]] + mod) % mod;
		g[a[i]] = tmp + 1;
		sum = (sum + g[a[i]]) % mod;
	}
	// 把没选 T 的方案减去
	cout << (f[n + 1] - sum - 1 + mod) % mod << endl;
	return 0;
}

AT_arc184_b

是我没见过的轮廓线。

把没有因数 \(2, 3\) 的数 \(u\) 拿出来,生成一个这样的矩阵:

\[\begin{matrix} 2^03^0u & 2^03^1u &\cdots & 2^03^qu & \cdots \\ 2^13^0u & 2^13^1u &\cdots & 2^13^qu & \cdots \\ \vdots & \vdots & \ddots & \vdots & \ddots \\ 2^p3^0u & 2^p3^1u &\cdots & 2^p3^1u & \cdots \\ \vdots & \vdots & \ddots & \vdots & \ddots \end{matrix} \]

只保留其中 \(\le n\) 的元素。易得每个 \(u\) 生成的所有元素集合不交。

对于一个矩阵,一次操作可以把选择的数以及它右边,它下边的数覆盖,要求用最少操作数覆盖所有 \(\le n\) 的元素。

轮廓线 dp,设 \(f_{i, j, sta}\) 表示考虑到 \((i, j)\),轮廓线被覆盖情况是 \(sta\) 的最少操作次数。按照普遍轮廓线写法,前两维滚掉。

偷一下尺子姐姐的图

这个轮廓线不一样的地方在哪里咧,常见至少我见过的轮廓线压的都是已处理部分,这里压的是待处理部分。确切点是被已处理部分更新过的待处理部分。

转移时如果当前位已被覆盖,那么可选可不选,注意如果不选那么下一行同列没有被覆盖,对应的下一状态第 \(j\) 位应是 \(0\);如果选的话更新第 \(j\) 位和第 \(j + 1\) 位都是 \(1\)。如果没被覆盖就必须选。

然后对于没有 \(2, 3\) 因数的数,如果矩阵形状相同,那么答案相同。然后至少 \(\left\lfloor\dfrac{n}{u}\right\rfloor\) 相同的 \(u\) 矩阵一定一样,可以数论分块求解。

P2081

(基环)树形 dp。

令 \(scnt_x\) 表示 \(x\) 子节点个数,\(fcnt_x (\in \{1, 2\})\) 表示 \(x\) 父节点个数。

\(Down_x\) 表示从 \(x\) 出发,第一步向子节点走的期望长度。\(Up_x\) 表示第一步向父节点走的期望。

\[Down_x = \frac{\sum_{y \in son_x}(Down_y + w(x, y))}{scnt_x} \]

如果 \(x\) 不在环上

\[Up_x = w(x, fa_x) + \frac{Up_{fa_x} \cdot fcnt_{fa_x} + Down_{fa_x}\cdot scnt_{fa_x} - Down_{x} - w(x, fa_x)}{fcnt_{fa_x} + scnt_{fa_x}-1} \]

第一步的贡献是 \(w(x, fa_x)\),然后可以向上走或是换个儿子向下走,需要排除 \(x\) 的贡献。

特别的,如果 \(fa_x\) 只与 \(x\) 连边(\(fcnt_{fa_x} + scnt_{fa_x} - 1 = 0\)),那么 \(Up_x = w(x, fa_x)\)。

如果 \(x\) 在环上

先得到 \(dfn_x\) 表示环上第几个点,\(dcnt\) 环上点个数,\(rnk_i\):\(dfn\) 反数组,\(disl_x, disr_x\):\(x\) 向左,右的边长。

\[Up_x = \sum_{i \operatorname{from} dfn_{x} + 1 \operatorname{to} dfn_{x} - 1}P_i \times\left(\frac{Down_{rnk_i}scnt_{rnk_i}}{scnt_{rnk_i} + 1} + disl_{rnk_i}\right) + \sum_{i \operatorname{from} dfn_{x} - 1 \operatorname{to} dfn_{x} + 1}P_i' \times\left(\frac{Down_{rnk_i}scnt_{rnk_i}}{scnt_{rnk_i} + 1} + disr_{rnk_i}\right) \]

标签:rnk,Down,18,sum,24.10,scnt,fa,mod
From: https://www.cnblogs.com/KinNa-Sky/p/18491543

相关文章

  • 24.10.21
    A哇,直接一个CF*3000。要求的即为图2,5,可以用总方案数(\(\binom{n}{3}\))减去图1,3,4。对于图1,只要求出一根线左边有多少不与它相交的线,右边有多少线,记为\(l_i\)和\(r_i\)。对答案的贡献为\(l_i\timesr_i\)。对于图3,4,两图的共同点为三条线中有两条满足另外的两条线......
  • 24.10.20
    P3601不互质的数个数就是\(n-\varphi(n)\)。\(\displaystyle\varphi(n)=n\prod\frac{p_i-1}{p_i}\)。直接用小于\(\sqrt{r}\)的素数求欧拉函数。所有数一起求。rep(i,l,r)phi[i-l]=val[i-l]=i;rep(i,1,pcnt) for(LLj=(l+prm[i]-1)/prm[i]......
  • 24.10.19
    A数学题,不会。随便取一数\(v\),询问得到\(t\equiv\log_gv\pmodp\)。我们希望找到\(x\)使得\(v^x\equivg\pmodp\),即\(g^{tx}\equivg\pmodp\Leftrightarrowtx\equiv1\pmod{p-1}\)。那么只要\(t\)与\(p-1\)互质即可求得逆元。有原根相关知识可以知......
  • 24.10.21
    嘛,我是个非常没有动力的人啊现在大概只想躺平哦有时候也可能会有一点点干劲吧,不过属于是过一两个小时就会消失的那种大概是因为没有目标吧,也可以说是没有我特别感兴趣的事其实硬要说感兴趣的事嘛,也有,不过基本都不切实际罢了我倒是想去学钢琴,画画,日语啊啥的,但是家庭条件和生活......
  • 2024.10.21训练记录
    上午NOIP模拟赛A猜了结论。一个一个数做。当前这个数插进去的时候,设前驱为pre[i],后继为nxt[i]。设\(x=max(a[pre[i]],a[nxt[i]]),y=min(a[pre[i]],a[nxt[i]])\)。则:当\(a[i]>x\)时,\(ans+=a[i]-x\);当\(a[i]<y\)时,\(ans+=y-a[i]\);否则\(ans\)不......
  • P9890 [ICPC2018 Qingdao R] Tournament 题解
    P9890[ICPC2018QingdaoR]Tournament题目传送门更好的阅读体验一道找规律的思维题。前置知识\(lowbit\)\(lowbit\)是指获取一个二进制数中最右边的\(1\)所对应的数值。具体地,\(lowbit\)可以通过对一个数取反然后加\(1\),再与原数进行按位与的方式来实现。intlow......
  • 信息学奥赛复赛复习18-CSP-J2023-01小苹果-向上取整、向下取整、模拟算法
    PDF文档公众号回复关键字:202410211P9748[CSP-J2023]小苹果[题目描述]小Y的桌子上放着n个苹果从左到右排成一列,编号为从1到n。小苞是小Y的好朋友,每天她都会从中拿走一些苹果。每天在拿的时候,小苞都是从左侧第1个苹果开始、每隔2个苹果拿走1个苹果。随......
  • 国标GB28181视频平台EasyCVR私有化部署视频平台偏远地区如何解决视频监控的需求
    一、背景需求在一些偏远地区,也具有视频监控的需求。但是这类场景中,一般无法就近获取市电,如果要长距离拉取市电,建设的成本非常高且长距离传输有安全隐患,因此风光互补远程视频监控方案的需求也较多。利用风光电转化原理为偏远或无电区域的视频监控设备提供电力供应,从而满足偏远地区......
  • 【2024-10-18】安排二宝
    20:00前途很远,也很暗,然而不要怕。不怕的人的面前才有路。                                                 ——XX如果我哪天写日记特别困难,需要埋头去寻找这一天内有......
  • P6189 [NOI Online #1 入门组] 跑步(分拆数)
    简要题意给你一个整数\(n\),你需要求\(\sum_{i=1}^nx_i=n\)且\(x_i\lex_{i+1}\)的非负整数解数量对给定模数\(p\)取模后的结果。\(n\le10^5\)分析考虑一个显然的DP:设\(f_{i,j}\)表示考虑\(1\simi\)这些数,总和为\(j\)的方案数。转移是完全背包型转移:\(f_{i,j}......