IOI2020只因训队作业胡做
w a r n i n g ! 意 识 流 警 告 !!1
不想一个个发了,干脆直接发个合集得了qwq
感觉这辈子都做不完了\(Q\omega Q\)
CF516D
CF505E
CF555E
首先对于一个边双,一定存在一种定向方案满足任意两点可达.那把边双缩点,原图就变成了一棵树,询问的两点路径可以拆成一段往上走的链和一段往下走的,那么就要使得若干链上的边都往上或都往下,搞两种差分数组统计一下,不合法当且仅当一条边在两种差分数组里都有值
CF704B
JOISC邮戳拉力赛
题解先咕着
CF704C
将每个\((x_i|x_j)\)看成是一条边\((i,j)\),那么就可以得到一堆链或者是环(有可能是自环),每个连通块显然是独立的,可以先求出每个连通块的状态,然后并到一个全局背包里去.那么对于每个链就链上dp出每个子树内异或和为\(0/1\)的方案,转移只要枚举自己这个点的取值,然后类似背包合并上一个点的dp值就行了;至于环上dp,因为是个环,那就断环为链,dp出链的异或和为\(0/1\)的方案,然后dp完链后考虑被断掉的那条边的贡献.具体实现可能需要\(y\grave{i}\)点细节
CF521D
显然三种操作之间应该先赋值,然后加,最后乘.然后对于一个数,赋值只需要取赋的值最大的一次操作,发现这样可以把赋值改为加操作.题目要求\(\prod x_i\)最大,取个对数后可以变成要\(\sum log\ x_i\)最大,乘法对于\(log\ x_i\)的贡献量是不会变的,而加法操作显然要先用大的再用小的,排序后可以用\(log(x_i\sum_{j=1}^{i}b_j)-log(x_i\sum_{j=1}^{i-1}b_j)\)算第\(i\)个加法操作的贡献量.最后选出贡献最大的\(k\)个操作就是答案,输出注意三种操作之间的顺序
CF512D
这题本质上还是个背包.注意到这个遍历过程相当于每次选一个度数为1的点删掉.如果一个连通块是树,那么遍历若干个点后一定会剩下一个子连通块,那就可以换根dp出在树上挖掉若干个点的方案数;如果连通块上有若干个环,因为环上的点是一定不能删的,那么只有挂在环上点外面的子树,并且满足子树内有度数为1的点的部分可以删去(参考样例3解释的那个大连通块,除了环上4个点都可以挖掉),那么就对这些部分分开树型背包(这里不需要换根,因为根就是对应在环上的点).然后把一个dp过程中,以及合并答案过程中要乘上组合数(因为两个没有子树关系的部分是相互独立的,他们的选点顺序可以交错开来)
CF575A
显然要矩乘.这里的话大概预处理一个倍增的矩阵,表示在第\(i\mod n\)项,往后转移\(2^k\)步的转移矩阵,每次就倍增转移到下一个断点,然后断点处特殊转移.复杂度为\(O(8nlogk+8mlogk)\),其中\(8\)为矩乘复杂度
CF547D
CF704D弱化版
我们对每个横纵坐标建点,然后一个点\((x,y)\)就给横坐标\(x\)和纵坐标\(y\)连一条无向边,然后给边定向,如果是\(x\to y\)就是红色,否则就是蓝色.因为某个坐标上红蓝点数之差的绝对值要\(\le 1\),所以定向后要使得所有点入度和出度的差的绝对值要\(\le 1\).如果是强制入度等于出度,这实际上是一个欧拉回路,所以我们把所有度数为奇数的点两两配对连边,那么就可以跑欧拉回路了,定向之后再把后面加进来的边删掉,这样所有点入度出度都会满足条件
CF536D
我们以\(s\)和\(t\)为起点,跑其他点到起点的最短路,然后就能得到对于这两个点,按照最短路长度排序后的序列,现在问题变成有两个序列,每次操作的一方要在之前选择前缀的基础上接着选择一段,还要满足这新的一段存在之前没有被两个人选到过的点,然后每个人用最优策略博弈.那就可以设\(f_{i,j}\)表示这次是先手操作,操作前两个序列被选了前缀\(i\)和\(j\)的最大权值,\(g_{i,j}\)表示的是后手,转移直接枚举这一次选到哪一个位置,然后用后面一段还没被选的权值总和减去对应的\(f/g\)更新.注意到转移的时候只有一维会变,所以可以对每一维记录后缀最小值,即可做到\(O(n^2)\)
CF576D
最短路?\(n\le 150\)?考虑矩乘.用行向量维护某个时刻是否可以到达某个点,然后本质不同的转移矩阵段只有\(O(m)\)个,所以在每一段先转移\(n\)步,看能不能到点\(n\),然后剩下部分可以快速幂转移.精细实现可以做到\(O(n^3mlog|V|)\).注意到矩阵是\(01\)矩阵,所以套个\(bitset\)可以得到\(\frac{1}{\omega}\)的常数优化
CF506E
考虑从两边往中间填,设\(f_{i,l,r}\)表示开头结尾已经填了\(i\)次,然后整个串还有\([l,r]\)没被填进去.每次填字符的时候,如果当前串左右两边能够填就尽量填.最后转移完如果最终长度为偶数答案就是\(\sum f_{\frac{n+m}{2},i+1,i}\),如果是奇数就还要加上\(f_{\lfloor\frac{n+m}{2}\rfloor,i,i}\)(第\(i\)个字符在整个串最中间).这样在套上一个矩乘,就可以做到6方\(log\)
考虑优化,首先可以发现转移只有三种
- 填的字符和\(s_l,s_r\)不同
- 填的字符和\(s_l,s_r\)之中一个相同
- 填的字符和\(s_l,s_r\)都相同
后面两种转移系数都是1.对于第一种转移,如果\(s_l=s_r\),那么还剩下\(25\)种字符可以填,否则还剩\(24\)种字符可以填.那么转移把第一种转移先用矩乘预处理出来,然后对于\(f_{i,l,r}\)只用后两种转移,这样贡献答案时\(f\)的转移系数就只和转移过程中\(s_l=s_r\)以及\(s_l\neq s_r\)的个数有关.所以\(f\)多开一维表示\(s_l=s_r\)的情况个数.贡献答案时假设是枚举\(x\)个\(s_l=s_r\),那\(s_l\neq s_r\)就假设有\(y\)个(并且\(y\)可以由\(x\)推出来).矩乘预处理第一种转移时,可以看成是一张\(DAG\),上面有\(x+y+1\)个点依次连接,转移系数为\(1\),其中前\(x\)个点都会有系数为\(24\)的自环,后\(y\)个点都会有系数为\(25\)的自环,最后一个点有\(26\)的自环,然后要的是走若干步从第一个点到最后一个点的方案,这样子就可以做到\(O(n^4log(n+m))\)
然而还是不能通过此题.我们考虑整\(n+\lceil\frac{n}{2}\rceil+\lceil\frac{n}{2}\rceil\)个点(实际上可能还要多几个点,不过规模约为这么大),分别称为\(A,B,C\)类点,其中每个\(A\)类点有一个\(24\)的自环,每个\(B\)类点有一个\(25\)的自环,每个\(C\)类点有一个\(26\)的自环.然后所有\(A\)类点顺次连接,后面接着连\(B\)类点,\(B\)类点同样依次连接,每个\(B\)类点下再挂一个\(C\)类点(其中每条连接两点的边,转移系数为1),大概得到这样的结构
一般我们矩乘都是行向量乘转移矩阵.现在我们把表示状态的行向量拓展,变成若干行向量,每一行表示从某个点\(A\)类点出发,到达其他点的方案,那么只要一次矩乘快速幂,然后求第\(x\)个\(A\)类点到第\(y\)个\(C\)类点(或者是\(B\)类点)的方案就是矩阵上\(A\)类点对应的那一行,\(C\)类点(或\(B\)类点)对应的那一列的值.复杂度优化到\(O(n^3+n^3log(n+m))\)
CF516E
下面假装有\(n\le m\).我们可以先做这个操作\(m\)次,这\(m\)次里只要做有值的部分即可.那么如果前\(m\)次操作中第\(i\)次操作使得上面的点\(x\)和下面的点\(y\)都被标记,那么可以发现第\(i+m\)次操作会使得上面的\((x+m)\mod n\)点被标记,以及发现第\(i+n\)次操作会使得下面的\((y+n)\mod m\)点被标记,并且可以发现所有的操作影响都可以规约到上面两种情况
进一步的,根据上面的操作,可以发现这两个序列分别可以分成\(\gcd(n,m)\)个环,每个环互相独立,就可以分开考虑了(注意环内每次操作相当于一般情况下\(\gcd(n,m)\)次操作,同时还要加上环内第一次操作为一般情况下第几次操作).如果一个环内没有一个初始被标记的点,那就无解,否则一定有解
后面记\(n1=\frac{n}{\gcd(n,m)},m1=\frac{m}{\gcd(n,m)}\),这其实就是一个环内上下两排的规模.然后在环内可以先进行\(m1\)次操作,这导致上面一排每个被标记的点\(x1\)每过\(m1\)次操作后标记\((x1+m1)\mod n1\)号点,和下面一排每个被标记的点\(y1\)每过\(n1\)次操作后标记\((y1+n1)\mod m1\)号点.统计时只需要记录前面的操作中每个被标记的点最早操作的时间,然后对于上面一排,\(x1\)向\((x1+m1)\mod n1\)连边,再把刚刚标记的点放在环上,那么每个点能标记的点都是这个点在环上往后到环上下一个点之前的一段,就对于每个这样的段算出段上的点全被标记的最早时间,下面一排同理,接着一起取个\(\max\)就是这个环的贡献.最后答案为所有环贡献的\(\max\)
高 级 口 胡 记 录
IOI2020只因训队作业胡做的更多相关文章
- IOI2020 国家集训队作业 泛做
题号 题目名称 rating 算法 完成情况 CF504E Misha and LCP on Tree CF505E Mr.Kitayuta vs. Bamboos CF506E Mr.Kitayut ...
- 一只猿:使用flask来做一个小应用
上周 @萍姐 问我如何抓取天猫上面店铺的评分,看了下挺简单的,于是花了点时间写了个Python脚本,加上web.py做成一个web服务,使用起来还不错,今天来看的时候发现当时为了方便直接用web.py ...
- 集美大学1414-团队作业2:需求分析&原型设计分数发布
1.评分标准 检查项 分数 编号 调研文档或截图 1 1 软件需求分析说明书 2 2 NABCD 2 3 描述每个成员具体分工 1 4 原型设计 2 5 编码规范 1 6 推广视频 1 7 ...
- SQL 基础学习(2) Joining 和function , 作业没有做,需要看百宝箱。NOsql的概念
SQL 基础学习(2) Joining 可以同时关联(joining)多张表进行复杂的查询. 相比于用Rails捞出数据再用Ruby进行过滤组合,使用SQL更加高效,节能. 以下是 users has ...
- 软工作业No.3--团队作业:甜美女孩出击!
队名:甜美女孩 队员包括: 姓名 学号 身份 曾祎祺 3216005211 队长 邓画月 3216005212 队员 何颖琪 3216005213 队员 梁沛诗 3216005214 队员 梁子君 3 ...
- Machine learning 吴恩达第二周coding作业(必做题)
1.warmUpExercise: function A = warmUpExercise() %WARMUPEXERCISE Example function in octave % A = WAR ...
- 《BUG创造队》第四次作业:基于原型的团队项目需求调研与分析
项目 内容 这个作业属于哪个课程 2016级软件工程 这个作业的要求在哪里 实验八 团队作业4:基于原型的团队项目需求调研与分析 团队名称 BUG创造队 作业学习目标 (1)体验以原型设计为基础的团队 ...
- 《BUG创造队》第六次作业:团队项目系统设计改进与详细设计
项目 内容 这个作业属于哪个课程 2016级软件工程 这个作业的要求在哪里 实验十 团队作业6:团队项目系统设计改进与详细设计 团队名称 BUG创造队 作业学习目标 1.编写完整<软件系统设计说 ...
- 《BUG创造队》第一次作业:团队亮相
项目 内容 这个作业属于哪个课程 2016级软件工程 这个作业的要求在哪里 第五次实验 团队名称 BUG创造队 作业学习目标 通过本次项目了解并熟悉团队开发的过程 关于我们 -我们的队名:BUG创造队 ...
随机推荐
- 多线程循环打印ABC
主要是利用线程的wait()和notify()来实现 public class MyThread implements Runnable { private String name; private ...
- Flume-数据流监控 Ganglia
Ganglia 由 gmond.gmetad 和 gweb 三部分组成. gmond(Ganglia Monitoring Daemon)是一种轻量级服务,安装在每台需要收集指标数据的节点主机上.使用 ...
- Java同步数据结构之SynchronousQueue
前言 严格来说SynchronousQueue并不是像它的名字那样是一种Queue,它更像是一个数据接力的交汇点,还记得在介绍Exchanger的时候提到过Exchanger可以看作是Synchron ...
- Swift 自动引用计数(ARC)
Swift 使用自动引用计数(ARC)这一机制来跟踪和管理应用程序的内存 通常情况下我们不需要去手动释放内存,因为 ARC 会在类的实例不再被使用时,自动释放其占用的内存. 但在有些时候我们还是需要在 ...
- C++ STL 逆转旋转 reverse reverse_copy rotate
#include <iostream>#include <algorithm>#include <vector>#include <iterator> ...
- Java NIO 学习笔记 缓冲区补充
1.缓冲区分配 方法 以 ByteBuffer 为例 (1)使用静态方法 ByteBuffer buffer = ByteBuffer.allocate( 500 ); allocate() 方法 ...
- SpringMVC接收集合页面参数
SpringMVC接收集合页面参数 Spring MVC在接收集合请求参数时,需要在Controller方法的集合参数里前添加@RequestBody,而@RequestBody默认接收的enctyp ...
- php文件断点上传
前段时间做视频上传业务,通过网页上传视频到服务器. 视频大小 小则几十M,大则 1G+,以一般的HTTP请求发送数据的方式的话,会遇到的问题:1,文件过大,超出服务端的请求大小限制:2,请求时间过长, ...
- 硬核讲解 Jetpack 之 LifeCycle 源码篇
前一篇 硬核讲解 Jetpack 之 LifeCycle 使用篇 主要介绍了 LifeCycle 存在的意义,基本和进阶的使用方法.今天话不多说,直接开始撸源码. 本文基于我手里的 android_9 ...
- 开发工具之GIT
GIT WORKFLOW this readme created on 2019.07.28 by Suarez7988 这是一遍介绍git版本控制流程的中文说明,必须通篇阅读一下 https://g ...