卡牌游戏

考虑到将 \(a\) 和 \(b\) 放在一起排序,最后朝上的数字必然在左端点为最小值,右端点为最大值的区间中。这个区间中至少有 \(n-m\) 个是原来的 \(a\),且对于每张卡牌必然要有 \(a\) 或 \(b\) 在区间中。使用双指针即可实现。

矩阵游戏

vp时做 \(m=2\) 的部分分时想到:

\(b_i-b_{i-1}=a_{i+1,1}+a_{i+1,2}-a_{i-1,1}-a_{i-1,2}\)

\(b_i+b_{i-2}-b_{i-1}=a_{i+1,1}+a_{i+1,2}+a_{i-2,1}+a_{i-2,2}\)

又因为还有 \(0\le a_{i,j}\le 10^6\) 的限制条件,想到差分约束,但没有什么实际的做法。

又想到放下限制,产生了一种构造方法,将第一列和第一行设为 \(0\),剩下的就可以直接计算。但这种构造会产生大于 \(10^6\) 或小于 \(0\) 的解,但没有优化方法。

考虑正解,因为上述方法的解是未满足约束的。有一个性质:使某一行或某一列的奇数位 \(+x\),偶数位 \(-x\) 最后生成的 \(b\) 数组不变。

所以最后会产生一个矩阵(\(a_{i,j}\) 表示根据上述方法构造出的解,\(r_i\) 表示第 \(i\) 行的变化量,\(c_j\) 表示第 \(j\) 列的变化量)

\(\begin{bmatrix}a_{1,1}+r_1+c_1,a_{1,2}-r_1+c_2,a_{1,3}+r_3+c_3,\dots\\
a_{2,1}+r_2-c_1,a_{2,2}-r_2-c_2,a_{2,3}+r_2-c_3\dots\\
a_{3,1}+r_3+c_1,a_{3,2}-r_3+c_2,a_{3,3}+r_3+c_3\dots\\
\dots
\end{bmatrix}\)

但这个矩阵看起来不是很可做考虑将奇数列的变化量取反,偶数行的变化量取反,得到新矩阵

\(\begin{bmatrix}a_{1,1}+r_1-c_1,a_{1,2}-r_1+c_2,a_{1,3}+r_3-c_3,\dots\\
a_{2,1}-r_2+c_1,a_{2,2}+r_2-c_2,a_{2,3}-r_2+c_3\dots\\
a_{3,1}+r_3-c_1,a_{3,2}-r_3+c_2,a_{3,3}+r_3-c_3\dots\\
\dots
\end{bmatrix}\)

得到的矩阵中 \(r_i\) 和 \(c_j\) 的关系都是满足 \(-a_{i,j}\le r_i-c_j\le 10^6-a_{i,j}(i+j\equiv 0 \pmod 2)\) 或 \(-a_{i,j}\le c_j-r_i\le 10^6-a_{i,j}(i+j\equiv 0 \pmod 2)\),为只与减法有关的不等式,可以使用差分约束算出解。

图函数

vp时把结论推错了,非常可惜。

一个很重要的结论:若点对 \((u,v)\) 对图 \(G\) 有贡献,当且仅当 \(u<v\) 且在图 \(G\) 上存在由 \(u\) 到 \(v\) 和由 \(v\) 到 \(u\) 都只经过编号在 \([u+1,n]\) 的点的路径,考虑如何通过这个计算。显然去计算每个 \(f(u,v)\) 的值是非常不现实的,直接考虑点对 \((u,v)\) 对 \(h\) 函数的贡献。一个点对的贡献是一段前缀,因此可以倒序加边求差分数组。

现在问题就到了如何求差分数组上了。令 \(f_{u,v}\) 表示由 \(u\) 到 \(v\) 且只经过编号属于 \([u+1,n]\) 的路径中边的编号的最小值最大为多少,可以写出转移式 :

\[f_{u,v}=\max\limits_{w=u+1}^n(f_{u,v},min(f_{u,w},f_{w,v}))
\]

初始若 \((u,v)\) 间有边 \(f_{u,v}=i\),\(i\) 为边 \((u,v)\) 的编号,\(f_{u,u}=m+1\)。

这个式子很像 Floyd 的式子,但如果直接写 Floyd,\(O(n^3)\) 的复杂度会T。优化一些无用转移,因为 \((u,v)(u<v)\) 产生贡献时只会经过编号 \(>u\) 的点,所以当 \(u>w&&v>w\) 没必要进行转移。因为CCF数据太水放过去了。

宝石

非常典的树上倍增。

先将所有颜色重新标号。若 \((s,t)\) 答案为 \(x\),从 \(s\) 到 \(t\) 的路径上必然会按顺序出现标号为 \(1\sim x\) 的颜色。将路径拆成 \((s,lca)\) 和 \((lca,t)\),\((s,lca)\) 上会按顺序出现编号为 \(1\sim y\) 的颜色,\((lca,t)\) 上会按顺序出现编号为 \(y+1\sim x\) 的点。\(x\) 可以通过二分得到,那么需要计算的就只有 \(y\) 的值了。令 \(f1_{u,i}\) 表示在 \((u,1)\) 上,深度最深的颜色为 \(col[u]+2^i\) 点为哪个点,\(f2_{u,i}\) 表示在 \((u,1)\) 上,深度最深的颜色为 \(col[u]-2^i\) 点为哪个点,通过倍增可以找到在 \((s,lca)\) 上可以找到的最大的 \(y\) 和 \((lca,t)\) 上可以找到的最小的 \(y\),记为 \(y'\)。若 \(y'<=y\),则该 \(x\) 满足条件。

那么现在就只剩下一个问题了,如何求得在 \((u,1)\) 上的颜色为 \(x\) 且深度最深的点。建一棵下标为颜色的主席树,点 \(i\) 的线段树表示在 \((i,1)\) 上每个颜色的最深点的位置,每次在父亲的线段树上修改 \(col_u\) 的最深点的位置为 \(u\)。

总复杂度 \(O(n^3)\)。

支配

根据一些简单的结论:

  1. 若 \(x\) 支配 \(y\),\(y\) 支配 \(z\),则 \(x\) 一定支配 \(z\),因为删除 \(x\) 后 \(y\) 被割开,而 \(y\) 一旦不可达 \(z\) 也就随之不可达了。
  2. 若 \(x\) 支配 \(a\),\(y\) 支配 \(a\),则 \(x,y\) 之间一定有支配关系,如不然则必定有一种情况,使得删除其中一个点后,\(1\) 可从另一个点到达 \(a\)。
  3. 加入一条边后每个点的受支配集要么变小要么不变,因为图会变得更联通。
  4. 在点 \(D_x(x\not=1)\) 中必然存在一个点 \(y\),使得 \(D_x=D_y\cup {x}\),因此该点为 \(D_x\) 中支配集最大的点,令 \(fa_x=y\)。
  5. 若 \(D_x\) 大小变化,当且仅当 \(D_{fa_x}\) 大小变化或 \(fa_x\) 不在支配 \(x\)。

根据前四条结论我们可以建出一颗树状结构,每个点 \(x\) 和 \(fa_x\) 连边,这颗树叫做支配树。令 \(delp_{u,v}\) 表示删除 \(v\) 后 \(1\) 能否到 \(u\),可以得知若 \(delp_{u,v}=0\),则 \(v\) 支配 \(u\),这样就用 \(O(n^2)\) 的时限求出所有 \(D_x\),建出支配树。

那么现在剩下的任务就只剩下判断 \(fa_x\) 是否仍然支配 \(x\) 了。令 \(f_{u,v}\) 表示删去 \(fa_v\) 后 \(u\) 能否到达 \(v\),这个在反图上dfs一边可以求出。对于加的一条边 \((u,v)\),若删去 \(fa_x\) 后 \(1\) 能到 \(u\) 且删去 \(fa_x\) 后 \(v\) 能到 \(x\),则 \(D_x\) 大小会发生变化。再根据第五条结论,在支配树上bfs一遍就能求出所有受支配集变化的点。

滚榜

因为题目要求的是排名的总方案数,所以考虑贪心地分配 \(b_i\)。若 \(a_i>a_{i-1}\),令 $b_i=b_{i-1}},否则令 \(b_i=b_{i-1}+a_{i-1}-a_i\),最后如果剩下多的可以全部留个 \(b_n\)。对贡献变形可得:\(\sum b_i=\sum \max(a_i-a_{i-1},0)\times(n-i+1)\)

令 \(f(S,i,j)\) 表示前 \(|S|\) 位为 \(S\) 内元素,第 \(|S|\) 位为 \(i\),已选总贡献为 \(j\) 的方案数。

for(int i=1;i<=mx;i++){
Count[i]=Count[i>>1]+(i&1);
}
for(int i=0;i<n;i++){
int s=n*(a[t]-a[i]+(t<i));
if(s<=m){
f[1<<i][i][s]=1;
}
}
for(int i=1;i<mx;i++){
for(int j=i;j;j-=lowbit(j)){
for(int sum=0;sum<=m;sum++){
int p=num[lowbit(j)];
for(int k=0;k<n;k++){
if(!(i&(1<<k))){
int s=sum+(n-Count[i])*max(0,(p<k)+a[p]-a[k]);
if(s<=m){
f[i|(1<<k)][k][s]+=f[i][p][sum];
}
}
}
}
}
}
for(int i=0;i<=m;i++){
for(int j=0;j<n;j++){
ans+=f[mx][j][i];
}
}

省选联考2021vp记的更多相关文章

  1. 题解 P6622 [省选联考 2020 A/B 卷] 信号传递

    洛谷 P6622 [省选联考 2020 A/B 卷] 信号传递 题解 某次模拟赛的T2,考场上懒得想正解 (其实是不会QAQ), 打了个暴力就骗了\(30pts\) 就火速溜了,参考了一下某位强者的题 ...

  2. [省选联考 2020 A 卷] 组合数问题

    题意 [省选联考 2020 A 卷] 组合数问题 想法 自己在多项式和数论方面还是太差了,最近写这些题都没多少思路,看完题解才会 首先有这两个柿子 \(k*\dbinom{n}{k} = n*\dbi ...

  3. [省选联考 2021 A 卷] 矩阵游戏

    很巧妙的一个构造. 我是没有想到的. 自己的思维能力可能还是不足. 考虑先满足\(b\)对\(a\)的限制,把\(a\)的第一行和第一列设\(0\),推出这个\(a\). 接下来考虑对这个\(a\), ...

  4. [省选联考 2021 A/B 卷] 卡牌游戏

    垃圾福建垫底选手来看看这题. 大家怎么都写带 \(log\) 的. 我来说一个线性做法好了. 那么我们考虑枚举 \(k\) 作为翻转完的最小值. 那么构造出一个满足条件的操作,我们在 \(a_i\) ...

  5. jloi2017(shoi2017?)六省联考酱油记

    Day -n 听说了4.22.4.23的省选,而且还是六省联考. 压力山大. 尽管我只是一名高一的simple OIer,在省选到来之前,心里还是很紧张的. 毕竟自己也知道南方dalao们都是神犇,像 ...

  6. P7518 & 省选联考2021 宝石

    这是一篇极其简单连像我这样省三参加不了省选的蒟蒻都能看懂的题解 前置知识: 倍增LCA  二分 栈 题意 PS:这是一篇完全面向初学者的题解,会非常细,大佬请无视 题目传送门 没有思路的时候, 我们往 ...

  7. HEOI 十二省联考退役记

    Day -1 简要的说了些注意事项 一整天都在刷树套树的水题 退役的感觉近了 Day 0 早上收拾好东西去了火车站之后 火车站居然还没有开门 等了半天 我们是从衡水到德州再到秦皇岛 到了德州之后 去车 ...

  8. [省选联考 2020 A/B 卷] 冰火战士

    一.题目 点此看题 二.解法 其实这道题也不是特别难吧 \(......\) 但树状数组上二分是我第一次见. 我们把冰人和火人都按温度排序,那么考虑一个分界线 \(x\) ,问题就是求冰数组 \(x\ ...

  9. 洛谷 P6624 - [省选联考 2020 A 卷] 作业题(矩阵树定理+简单数论)

    题面传送门 u1s1 这种题目还是相当套路的罢 首先看到 \(\gcd\) 可以套路地往数论方向想,我们记 \(f_i\) 为满足边权的 \(\gcd\) 为 \(i\) 的倍数的所有生成树的权值之和 ...

  10. 洛谷 P7516 - [省选联考 2021 A/B 卷] 图函数(Floyd)

    洛谷题面传送门 一道需要发现一些简单的性质的中档题(不过可能这道题放在省选 D1T3 中偏简单了?) u1s1 现在已经是 \(1\text{s}\)​ \(10^9\)​ 的时代了吗?落伍了落伍了/ ...

随机推荐

  1. Laravel自定义JSON错误消息 The given data was invalid.

    Laravel自定义错误消息 在Laravel验证请求时出现错误,默认会返回如下的错误: 可以看到JSO结构中的message为The given data was invalid.而并非是我们具体自 ...

  2. commons-lang3

    字符串的处理类(StringUtils) //判断是否为空(注:isBlank与isEmpty 区别) StringUtils.isBlank(null);StringUtils.isBlank(&q ...

  3. PTA·电信计费系列问题总结

    一.题目涉及的知识点 1.容器的使用 2.抛出异常 3.抽象类 4.继承与多态 5.正则表达式 二.题目分析总结 1.题目集08:7-1 电信计费系列1-座机计费 实现一个简单的电信计费程序:假设南昌 ...

  4. windows安装WinDump

    1.下载软件,放在C盘: WinDump.exehttps://www.winpcap.org/windump/install/default.htmWinPcap_4_1_3.exe(windows ...

  5. Navicat 连接MySQL数据库 报错2059

    Navicat 连接MySQL数据库 报错2059 - authentication plugin 'caching_sha2_password'的解决办法 2059 - Authentication ...

  6. 接口测试之object []如何类型传参

    接口测试时参数类型为object[],时如单选,多选提.传参值如下

  7. WordPress标题分隔符”-“被转义为“&#8211”怎么办?

    按照百度搜索资源平台<百度搜索网页标题规范:让标题回归标题本身>百度官方文档参考,如果WordPress标题里出现不规范"– 2.停止wptexturize转义任何字符 add_ ...

  8. 【Flutter】环境搭建(Windows+Android Studio 3.6.1)

    最近参加的项目需要用到Flutter框架进行iOS/Android双端开发,然而第一步环境搭建的过程就忙活了一整个晚上,直到现在终于有时间静下心来整理一下搭建过程中遇到的困难. 0x00 Flutte ...

  9. [rk3568][buildroot] 移除RK3568 iodomain check

    1. 问题背景 RK3568 基线代码默认会起一个服务监控RK3568 iodomain,该服务间隔性输出log信息: 由于该功能非必要,故选择移除该部分逻辑 2.解决方案 查看源码编译脚本,如下图所 ...

  10. ElasticSearch 实现分词全文检索 - term、terms查询

    数据准备 ElasticSearch 实现分词全文检索 - 测试数据准备 ElasticSearch的各种查询 不会对查询关键字进行分词 term 查询 term的查询是代表完全匹配,搜索之前不会对你 ...