使用说明:题意和数据范围都只是回忆内容,仅供参考。题解陆续补上。

Day 1

第一题

题意:给定n个数字,要求划分成k的连续段使得每个连续段内的数字之和相同,求最大的k。n,Σai<=10^6。
算法:模拟
题解一:记sum=Σai,从大到小枚举sum的因子暴力O(n)判断,10^6范围内的因子个数至多200~300个,且数据无法构造卡到上限(中途退出),可以轻松通过。
题解二:统计所有前缀和记录到同数组b[]中(即b[i]表示存在大小为i的前缀和),从大到小枚举sum的因子x后,计算每一个k*sum/x(1<=k<=x)在b[]中是否出现即可。复杂度O(\(\sigma_1(sum)\)),其中\(\sigma_1(sum)\)表示sum的约数和。

第二题

题意:给定n个0~m-1的数字,每次操作可以在模m意义区间+1或区间-1,求最少几次操作可以使所有数字变成0。n,m<=10^5。
算法:差分+贪心
题解:如果不考虑模m意义就是一道经典题目。差分后区间操作变成一次+1和-1。差分后实际上有n+1个数字,而第n+1个数字可以任意改变。那么差分后正数之和为A,负数之和为B,那么ans=max{A,B}。
现在考虑模m意义,把所有数字转化为非负数,要选择一些数字变成0,另一些数字变成m。为了使答案尽可能小,变成0一定优先选小,变成m一定优先选大,所以排序后贪心从两边取维护A和B的平衡即可(也可以枚举分界点。
复杂度O(n)。

第三题

题意:给定n个点的带点权树,每天早上根的数字变成0,每天下午每个点的数字往根移动,每天晚上会有一些单点加值的操作。给定m个操作,每个操作在第ai天晚上在点bi加上数字ci。给定k个询问,每次询问第ai天凌晨的【以bi为根的子树】的数字和。n,m,k<=10^5。
算法:CDQ分治 或 树套树
题解:先不考虑修改操作,对每个点x记深度d[x],dfs序入栈序in[x]和出栈序out[x]。一个点x会在询问(ai,bi)中被统计当且仅当满足\(d_x \leq a_i\)且\(in_{b_i} \leq in_x \leq out_{b_i}\)。关键在于把子树看成dfs序后,这就是个二维偏序问题了。
对于修改操作(ai,bi,ci),将深度维改为深度+时间维,所有初始节点时间默认为0,修改就在bi下面接一个时间为ai权值为ci的点即可。
但是这样还有一个问题,就是由于离线操作,时间靠前的询问可能统计到时间靠后的询问(因为深度和时间加起来计算了),所以需要再加一个时间维。
这样就是三维偏序问题,用CDQ分治解决,复杂度\(O(n log^2n)\)。

第四题

题意:给定n个点的竞赛图,m条已知的点不相交简单路径,其余边方向随机,求形成强连通分量个数的期望。
算法:

Day 2

第一题

题意:给定n个点m条边的无向图,第i个点有权值ai,边(x,y)的权值定义为:
\[w(x,y)=\sum_{i=1}^{a_x}\sum_{i=1}^{b_x}[(i,j)=1]i+j\]
可以选择一个数字p,使得所有边的权值都减少p(至多减到0),给出限定值T,求最小的p满足1~n的最短路<=T。
n,m<=20000,ai<=10^5,T<=10^18。
算法:莫比乌斯反演+二分最短路
题解:对于两点权值为a,b的边权w:
\[w=\sum_{i=1}^{a}\sum_{i=1}^{b}[(i,j)=1]i+j\]
莫比乌斯反演易得:
\[w=\sum_{d=1}^{min\{a,b\}}\mu(d)*d\sum_{i=1}^{\frac{a}{d}}\sum_{i=1}^{\frac{b}{d}}i+j\]
后面部分直接计算:
\[sum(a,b)=a*\frac{b(b+1)}{2}+b*\frac{a(a+1)}{2}\]
复杂度\(O(m \sqrt{a_i})\)。
预处理所有边权,二分p计算最短路判断即可。最短路数组记得初始化为比1e18大的数字。

第二题

题意:给定n个点的树,定义f(S)为点集S的导出子图的边数,求\(\sum_{S}f(S)^k\)。n<=10^5,k<=10。

第三题

题意:给定n个二元组(xi,yi),两个二元组i和j的价值定义为\(|x_i-x_j|*max\{y_i,y_j\}\),一个区间[L,R]的价值是其中任选两个二元组的最大价值。
给定m个操作,修改一个二元组的x或y,询问一个区间的价值。
n,m<=10^5。
数据保证初始的y和修改的y随机生成。

第四题

题意:给定n个点的无向图邻接正边权矩阵。每个点可能正在维修(不可经过)。k次操作,询问点x出发回到x的最短路径,或改变一个点的维修状态。n,k<=400。
算法:dijkstra
题解:T4也出走路题,想不到吧!
从点x出发回到x的最短路径就是最短简单环。
每次询问将点x删除后将与点x有直接连边的点标记为关键点,那么就是求解关键点两点间最短路的最小值。(与x的连边边权只要在最短路初始值设置的时候修改即可)
解决这个问题,将关键点作为起点集进行dijkstra,访问到一个点的最短路(第一次访问)和次短路(第二次访问)加起来就是这个点对答案的贡献,取最小值就是答案。
修改操作是假的。

Day 3

第一题

题意:给定n个人的三元组(ai,bi,ci),一个人能打败另一个人当且仅当至少有两个属性大于另一个人,数据保证没有两个人的同一个属性相同。
共进行n-1轮游戏,每轮任选两个人淘汰败者,求哪些人可能成为最后留下的人。n<=10^5。
算法:主席树+Tarjan缩点。
题解:朴素做法是暴力求出两两有向边的方向,然后对竞赛图缩点后有一条哈密顿路径,唯一那个入度为0的强连通分量包含的点数就是答案。
证明比较显然,①有入度的强连通分量一定不可能淘汰掉入度到它的强连通分量,②入度为0的强连通分量一定有哈密顿回路(竞赛图的性质),故让其中某个点x留到最后只需要从它上一个点开始往前一直两两淘汰,最终就会剩下x的下一个点。
现在的问题是边数太多了,但有很多冗余边。假设只有a,b,那么所有店按a排序后以b为下标建主席树(可持久化权值线段树),每次父亲向儿子连边以及新链叶子向依赖链叶子连边,然后每次的点向直接引用依赖链的左子树连边,这样建图后连通关系就完全等价于上面的建图了。建三棵主席树ab,ac,bc连边即可。
复杂度O(n log n)。

第二题

题意:给定n个点构成的完全二叉树,即点n的父亲是点\(\frac{n}{2}\),边权为\(an^2+bn+c\),其中a,b,c为给定的常数。有m次删除以某个点x为根的子树(可能重复删除),每次删除后要求找一个点x,满足所有点到它的距离和最短,求点x和距离和。n,m<=10^5,a,b,c<=10^9。

第三题

题意:给定V个点E条边的无向图,有一个长度为n的小写字母串,有m只猴子各自携带一个子串要从1到V,两只猴子的路径如果有边相交那么会发生强度为两个子串的LCP的叫嚣。要求安排所有猴子的路径使得所有叫嚣的最小值最大。V,E<=10000,n,m<=10^5,保证80%的边直接从1到V。
算法:最大流+二分哈希
题解:首先如果知道有k条边不相交的路径可以从1到V,那么二分叫嚣值L,如果两个子串的LCP>=L那么它们可以在同一条路径上,而且LCP>=L的性质有传递性,所以直接用桶记录每个子串长度为L的前缀就可以知道至少需要多少条路径,判断是否>k即可。
如何知道从1到V有多少条边不相交的路径?将所有边转化为流量为1的边,跑最大流就是答案。

第四题

题意:对一个黑白格图进行大模拟得到一棵带点权树,求树的直径(点权和)长度为x,然后要求将x划分成若干个整数的方案数之和。n<=10^5。

复杂度\(O(n \sqrt n)\)。

【GDOI2018】所有题目和解题报告的更多相关文章

  1. [JZOJ 4307] [NOIP2015模拟11.3晚] 喝喝喝 解题报告

    题目链接: http://172.16.0.132/senior/#main/show/4307 题目: 解题报告: 题目询问我们没出现坏对的连续区间个数 我们考虑从左到有枚举右端点$r$,判断$a[ ...

  2. 【九度OJ】题目1026:又一版 A+B 解题报告

    [九度OJ]题目1026:又一版 A+B 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1026 题目描述: 输入两个不超过 ...

  3. 【九度OJ】题目1124:Digital Roots 解题报告

    [九度OJ]题目1124:Digital Roots 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1124 题目描述: T ...

  4. 【九度OJ】题目1074:对称平方数 解题报告

    [九度OJ]题目1074:对称平方数 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1074 题目描述: 打印所有不超过n( ...

  5. 【九度OJ】题目1064:反序数 解题报告

    [九度OJ]题目1064:反序数 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1064 题目描述: 设N是一个四位数,它的 ...

  6. 【九度OJ】题目1083:特殊乘法 解题报告

    [九度OJ]题目1083:特殊乘法 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1083 题目描述: 写个算法,对2个小于 ...

  7. 【九度OJ】题目1183:守形数 解题报告

    [九度OJ]题目1183:守形数 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1183 题目描述: 守形数是这样一种整数, ...

  8. 【九度OJ】题目1015:还是A+B 解题报告

    [九度OJ]题目1015:还是A+B 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1015 题目描述: 读入两个小于10000的正整 ...

  9. 【九度OJ】题目1201:二叉排序树 解题报告

    [九度OJ]题目1201:二叉排序树 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1201 题目描述: 输入一系列整数,建立二叉排序 ...

随机推荐

  1. 微软职位内部推荐-Software Engineer

    微软近期Open的职位: Job Title: Software Engineer Work Location: Suzhou, China This is a once in a lifetime ...

  2. C++ 实验 使用重载运算符实现一个复数类

    实验目的: 1.掌握用成员函数重载运算符的方法 2.掌握用友元函数重载运算符的方法 实验要求: 1.定义一个复数类,描述一些必须的成员函数,如:构造函数,析构函数,赋值函数,返回数据成员值的函数等. ...

  3. 实验 六:分析linux内核创建一个新进程的过程

    实验六:分析Linux内核创建一个新进程的过程 作者:王朝宪  <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029 ...

  4. 《Linux内核设计与实现》第一、二章学习笔记

    <Linux内核设计与实现>第一.二章学习笔记 姓名:王玮怡  学号:20135116 第一章 Linux内核简介 一.关于Unix ——一个支持抢占式多任务.多线程.虚拟内存.换页.动态 ...

  5. ELK 性能(3) — 在 Docker 上运行高性能容错的 Elasticsearch 集群

    ELK 性能(3) - 在 Docker 上运行高性能容错的 Elasticsearch 集群 介绍 在 Docker 上运行高性能容错的 Elasticsearch 集群 内容 通常熟悉的开发流程是 ...

  6. Beta冲刺——day1

    Beta冲刺--day1 作业链接 Beta冲刺随笔集 github地址 团队成员 031602636 许舒玲(队长) 031602237 吴杰婷 031602220 雷博浩 031602134 王龙 ...

  7. Postgresql 简单安装过程. Study From https://www.cnblogs.com/stulzq/p/7766409.html

    CentOS 下面安装 Postgresql. 的简要学习记录 1. 卸载CentOS上面自带的postgresql版本 rpm -e $(rpm -qa|grep postgre) 2. postg ...

  8. Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 0. 准备工作

    一.关于 Python Python 是全球使用人数增长最快的编程语言!它易于入门.功能强大,从 Web 后端 到 数据分析.人工智能,到处都能看到 Python 的身影. Python 有两个主要的 ...

  9. .NET获取文件的MIME类型(Content Type)

    第一种:这种获取MIME类型(Content Type)的方法需要在.NET 4.5之后才能够支持,但是非常简单. 优点:方便快捷 缺点:只能在.NET 4.5之后使用 public FileResu ...

  10. Java学习之StringBuffer

              1.类介绍 ①线程安全的可变字符串序列,一个类似于String的字符串缓冲区,但是不能修改(就是不能通过加号+连接,String就可以) ②StringBuffer和String类 ...