Contest Page

A

唯一会做的题/kk

题目相当于要求相邻三个的异或和为\(0\)。

当我们放入了三个数\(a,b,c\)时,接下来的放入顺序显然一定是\(a,b,c,a,b,c,...\)。所以当数可以分成三份,每份大小\(\frac{n}{3}\)且其中的数全部相等,从三份中各取一个数的异或和为\(0\)时有解,否则无解。

B

当边数为奇数的时候显然无解

否则选出一棵生成树,其他的边乱选方向,树上自底向上确定边的方向,一条树边应当使得其儿子的出度变为偶数。因为边数是偶数所以根也一定满足条件。

C

当\(n=2^k\)时显然无解

否则考虑增量构造。注意到已经给出了\(n=3\)时的答案,我们从\(4\)开始,每一次两两在树上用下图的方式将点挂在树上:

上面是一个\(n=5\)的情况,挂上的\(4,5,9,10\)点显然是满足条件的。与此同时权值为\(6,7\)、\(8,9\)、\(10,11\)...的点也可以这样做。

对于最后剩下的一个权值也不难在树上找到一条经过\(1\)和其他两个节点的路径的异或和为这个权值。

D

考虑时间倒流,也就是每一次两个位置吐出一个新的位置出来。

记录每一个位置的值自然不可取,我们可以考虑记录每一个位置对答案的贡献。最初两个位置对答案的贡献均是\(1\),接下来每一次吐出的一个位置的贡献则是其旁边两个位置的贡献之和。

接下来考虑DP:设\(f_{l,r,fl,fr}\)表示要确定区间\([l+1,r-1]\)的所有位置的贡献,\(l\)的贡献是\(fl\),\(r\)的贡献是\(fr\)时的最小贡献,转移枚举由\(l,r\)吐出来的位置的编号然后递归进入两边的DP过程。

因为每递归一层\((fl,fr)\)数量至多翻倍,所以总状态数是\(O(2^nn^2)\)的,复杂度\(O(2^nn^3)\)。

E

考虑某个集合是否合法。如果集合中同时存在\(x\)和\(x-2\)则连边\((x,x-2)\);同时存在\(x\)和\(x+K\)则连边\((x,x+K)\),那么有环显然不合法,无环时选择一个拓扑序进行删除显然合法。那么我们需要求的就是无环的集合数量。当\(2 \mid K\)时奇偶独立,对于奇数和偶数都是不能选择连续的\(\frac{K}{2}+1\)个数,这个可以简单地解决。

\(2 \not\mid K\)时则不能存在\(a>b , a \not\equiv b (\ \bmod2)\)满足\(a,a-2,...,b-K,b,b-2,...,a-K\)同时在集合内。两者都是一段连续的区间,那么可以考虑从小到大将数加入到集合中。

设\(f_{i,p,q,fp,fq}\)表示已经填入了\(1 \sim i\),当前填入的奇数段长度为\(p\)、偶数段长度为\(q\),奇数从现在开始一直填到\(fp\)就不合法,偶数从现在开始一直填到\(fq\)就不合法,满足这些条件的集合数量。

不失一般性地考虑\(2 \not\mid i+1\)的转移。首先可以选择不填\(i+1\),因为限制需要一直填到\(fp\)才不合法,此时不填则限制全部消失,即
\[f_{i,p,q,fp,fq} \rightarrow f_{i+1,0,q,N+1,fq}\]
如果填则必须要满足\(fp > i+1\)。此时如果存在一个在偶数段内的数能够通过\(K\)跳到\(i+1\),即\(i+2-2q+K \leq i+1\),则此时这个奇数段必须不能通过\(K\)跳到与当前偶数段相连的偶数位,即\(fq \leq i+1-2p+K\)。有转移:
\[f_{i,p,q,fp,fq} \rightarrow f_{i+1,p+1,q,fp,min(fq,i+1-2p+K)}\]
如果不存在这样的位置,那么就不会有限制,即
\[f_{i,p,q,fp,fq} \rightarrow f_{i+1,p+1,q,fp,fq}\]

注意到\(fp,fq\)只有\(p,q\)中较大的那一个可能不是\(N+1\),否则一定已经存在环,所以\((fp,fq)\)的数量是\(O(N)\)级别的。复杂度\(O(N^4)\),状态常数很小可以map实现。

F

当\(k_i = j-1,l_j=i\)时,可以让\(k_i\)加\(1\),\(l_j\)减\(1\),得到一个等价的状态。我们设无法进行这样操作的状态是标准状态,考虑证明标准状态与网格一一对应。一个标准状态肯定对应一个网格,只需证明一个网格对应一个标准状态。

假设有两个不同标准状态\((l,k)\)、\((l',k')\)对应相同的网格,则\(l\)与\(l'\)、\(k\)与\(k'\)必定不同。找到第一个位置\(x\)满足\(l_x \neq l'_x\),不失一般性假设\(l_x < l'_x\),则:

如果\(x=1\),则显然在两个矩阵中\(A_{l'_x,1}=1\),所以\(k_{l'_x,1}=0\),则第二个状态不是标准状态;

如果\(x \neq 1\),则两个矩阵中\(A_{l'_x , x} = 1\),必定有\(k_{l'_x} \geq x , k'_{l'_x} < x\),而因为\((k',l')\)是标准的,所以\(k'_{l'_x} \neq x-1\),所以两个矩阵中的\(A_{l'_x , x-1}\)必定不同,与假设矛盾。

所以我们只需要算标准状态的数量,考虑以下两种做法:

1、DP:设\(f_{i,j}\)表示考虑了前\(i\)列、有\(j\)行满足\(k_x \leq i\),转移枚举有多少行等于\(i-1\),则有

\[f_{i,j} = \sum\limits_{k \leq j} f_{i-1,k} \binom{j}{k} (N+1-(j-k))\]

不难发现这是一个卷积的形式,可以多项式快速幂优化,但是因为出题人没想到这种做法所以如果exp稍微慢一点就会被卡;

2、容斥:容斥有多少对\((x,y)\)满足\(k_x=y-1,l_y=x\),其余随意指定,则答案为
\[\sum\limits_{i=0}^{min(N,M)} (-1)^i \binom{N}{i} \binom{M}{i} i! (N+1)^{M-i} (M+1)^{N-i}\]

AGC035的更多相关文章

  1. AGC035 B - Even Degrees【思维·树形结构的妙用】

    题目传送门 一句话题意: 首先,每一条边会产生1个入度,1个出度,因此,如果边的数量是奇数的话,图的所有节点的总出度就是奇数,不可能每个节点的出度都是偶数,因此无解. 有解时,我们先找出原图中的一棵生 ...

  2. AGC035 A - XOR Circle【分析】

    题目传送门 题意简述: (就是连环的意思) 唔,这道题考场上写了个什么神仙做法,数据太水了居然过了: // #include<cstdio> #include<algorithm&g ...

随机推荐

  1. MyCat教程三:安装及配置介绍

    一.安装MyCat 1.安装准备环境 1.1 安装JDK   因为MyCat是java开发的,所以需要java虚拟机环境,在Linux节点中安装JDK是必须的. 1.2 放开相关端口   在主从节点上 ...

  2. windows设置多个JDK环境

    1.查看jdk版本 java -version 2.查看JAVA_HOME和PATH的变量值 echo %JAVA_HOME% set path 3.临时修改环境变量JAVA_HOME和PATH的变量 ...

  3. <h1>~<h6> 标题标签

    <h1>~</h6>标题系列标签 解释:h1到h6 中h1标签最大,h6标签最小,逐一递增. 例如: <h1>标签</h1> <h2>标签& ...

  4. mysql系列1

    1. mysql数据库的安装步骤如下: [root@mysqltest01 local]# pwd/usr/local [root@mysqltest01 local]# tar -xvf mysql ...

  5. Nginx 核心配置-location的匹配案例实战篇

    Nginx 核心配置-location的匹配案例实战篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.location语法规则介绍 在没有使用正则表达式的时候,nginx会先在 ...

  6. linux常见性能分析工具

     vmstat    sar  (来源于sysstat工具包,需要yum  sysstat)iostat  (来源于sysstat工具包,需要yum  sysstat)free  -muptimene ...

  7. 复数基础及其2D空间的旋转

    本文我们讨论复数及其旋转的含义.复数很有意思,本文介绍了复数的基本定义和性质,以及它关于旋转的几何意义. 复数对于旋转的两个方面极为重要: 1. 它引入了旋转算子(rotational operato ...

  8. 移动端好用的下拉加载上拉刷新插件 dropload插件

    入了很多下拉加载上拉刷新的插件,但是感觉都不好用,知道最近遇到这款dropload的插件,瞬间打开新世界的大门啊,无卡顿简单易用可配置 <!doctype html> <html&g ...

  9. django url注册器组件, 响应器组件, 分页器组件

    一.url注册器的使用 1.1导入模块 from django.urls import re_path, include from .serializer import views from rest ...

  10. js 驼峰命名和下划线互换

    代码走你 // 下划线转换驼峰 function toHump(name) { return name.replace(/\_(\w)/g, function(all, letter){ return ...