ZJOI2018游记Round1


广告

ZJOI2018Round2游记


All Falls Down

非常感谢学弟学妹们捧场游记虽然这是一篇假游记

ZJOI Round1今天正式落下帷幕。在这过去的三天里遇到了很多朋友,见识了很多有趣的人和事。或许这只是我整个OI生涯中的卷首一场,但是允许我谨此游记献给所有的一切、所有的你们。


ZJOIday1游记

8:30:然而报告厅里选手们陆陆续续地并没有到齐……

第一场主讲人是绍一的任轩笛,讲课pdf的标题一如既往地是「杂题选讲」听主讲人说都是一些套路题

Binary Cards

不上升序列

Sum of Powers

Perpetual Subtraction

题意

一开始有一个数x,每次把x变成[0, x]内随机一个整数。
给出一开始数字为0 ∼ n的概率以及轮数m,求m轮后剩下数字
是i的概率。
对998244353取模。

范围

n ≤ 10^5
, m ≤ 10^18。

看上去似乎可做的概率题(但是我不会小数取模)

小L的计算题

(又是数学题)

星空

Chef attic window

(数学题)

Query on a tree VII

题意

给出一棵n个点的无根树,每个点有点权。
点的颜色有黑白两种,初始所有点都为黑色。
需要支持:单点反色,单点修改点权,询问一个点所在的同色连
通块中的最大点权。
范围
n, m ≤ 10^5。

据说是一道数据结构题

Jabby's shadows

题意

一棵树,树有边权,每个点有黑白两种颜色,要求支持:
1 u:询问点u所在同色连通块中,最远两点的距离,即直径。
2 u, v, c:将u ∼ v链上颜色都修改为c。

范围

n, q ≤ 100000。

上一题的加强版。
但是听课之后仍然不懂如何修改一条链的颜色……

Making Change

题意

有n种硬币,第i种面值是Di,每种都有无限个。求拼出C的方案
数。两种方案不同仅当某种硬币使用的数量不一样。

范围

n ≤ 50, Di ≤ 500, C ≤ 10^100

第一眼看上去好眼熟,以为终于来了一道可做题……好吧数据范围有些可怕

正解依然是数学方法。我能说基本听不懂吗……

不过发现了一个很有趣的东西:洛必达法则。找了一个例子推了推——好生神奇!以前也有遇到过求∞/∞这样式子的极限,不过都是瞎推来推去然而并没有推出来。


13:03:三楼机房的初中生都去打游戏了;迟到三分钟进场

下午第一场讲课人是陈嘉乐。好像又是杂题选讲的样子

Test 1

Test 2

一个网格图n,m<1e5被染为黑白两色。对于所有的黑点(x,y),(y,z),将(x,z)染为黑色。询问最后一共有几个黑点。

是的看上去非常可做。然而我只会用vector暴力枚举。

标算讲了弱连通块及染色如此的图论方法。但是,???

Test 3

一颗有根树有黑白两色;初始位置在root上,每次随机等概率走向一个儿子,当位于叶子节点时停止。对于每次走到的节点,如果当前是白点则仅在第一次走上该点时cnt++否则每次cnt++。询问最终cnt的期望值。

据说是一道概率的入门题。看上去dp可以?不过标算我没有仔细听,似乎要解方程?

Test 4

给定一个字符串S,字符集大小小于等于8。当且仅当Si=Sj或|i-j|=1时存在i->j的有向边。询问最后图的直径 和 距离为直径的所有点对。

Test 5

给定一个n≤15个点,m≤n(n-1)/2条边的无重边的有向图G,保证任意一条边(xi,yi)中xi

小H,小R在G'上玩游戏,小H先手,两人轮流操作一次。起初在点1,点2有两颗石子。每次操作可以将一个石子移动到一个与它相连的点上,最后无法移动者失败。

我的想法:枚2^m的图,每次计算1,2的SG值。 显然是会TLE的

标算:状压DP:dp出有哪些图1、2点的SG不同。将图分层操作,状压储存。并没有搞清楚实现细节

Test 6

对于一个初始值为0的序列{an},共染k次颜色,每次可以在[l,r]上覆盖上第i种颜色。询问最终可能序列的方案数。

法一:基础的dp
法二:数学方法求解辅助多项式F(x)

Test 7

定义一个森林的价值为森林中每棵树的点数的平方和。现在给定一颗n≤1e5的树,求随机删去i=1...n条边后的森林的价值的期望。

「简单」的计数/数据结构题。

然而我依然不会


15:07:下午第二场开讲,吴瑾昭的网格图算法选讲

听主讲人说这是今年冬令营的某营员交流课件

完全连通

bzoj1001

求网格图最大流/最小割

ZJOI2016旅行者

正权网格图多次询问最短路

网格图的SSSP

首先这个网格图是有可能有负边但是一定没有负环的,那么因为:

  • dijkstra无法跑负权图
  • SPFA在网格图上跑多半是会爆炸的

所以要考虑新的SSSP

这个网格图的SSSP是个分治操作。

令sp(G, s)为求图G中点s到其他各点的距离

  1. 若G的节点数小于等于2,则返回
  2. 沿着G的长边的中线把G分为G0,G1
  3. 取中线上一点r
  4. Di = sp(Gi, r)
  5. 算出Gi中任意两个中线上的点的距离δi[u][v]
  6. 对每个中线上的点v算出B[v] = dist(r, v)
  7. 对每个点v算出d'[v] = dist(r, v)
  8. 对每个点v算出d[v] = dist(s, v)
  9. d即为所求

然后还讲了step6,7,8的具体实现细节。但是台下有人在听吗???

Decremental 2-Edge-Connectivity

网格图之桥


今天讲课用到好多高级的数据结构、玄学的数学方法和那个神奇的FFT……
嗯……还有非常非常多东西要学。有些怀疑一年之后能否达到这样的水平……


ZJOI day2 游记

8:31:绍一季雨田开始讲课

然而课件名称叫做“CF水题选讲”

CF578E Walking!

CF788D Recover a functional graph

题目大意

交互题:平面上有一些平行于x轴和平行于y轴的直线。每次询问可以询问平面上的一个点,交互库会给出与这个点距离最近的直线的距离。你需要确定所有的直线。

数据范围

平行于x轴或y轴的直线条数个不超过1e4,坐标范围绝对值不超过1e8.询问次数不能超过3e5

看上去可做的交互题……但是如果有很多平行于y轴的直线岂不是很难判断

标算

询问形如(x,x)的点,当得到的答案为0时,则询问点(x,t)和(t,x)和(t,x)确定答案是否为0,其中保证(t,t)答案不为0。

因此倍增做下去就可以了。

然而这题是会被卡常数的。分析一下发现在初始几步浪费比较大,所以可以在(x0, x0)的答案为0时判断(x0+1e3,x0+1e3)的答案是否为1e+3,是则直接跳到(x0+1e3,x0+1e3).

CF713E Sonya Partymaker

题目大意

有n个人,m个凳子,其中凳子是环形排布的。

CF744D Hongcow Draws a Circle

题目大意

平面上有n个红点,m个蓝点。需要画一个最大的圆,满足圆内至少有一个红点,且没有蓝点。边界上的点可以视为在圆内,也可以不在。输出最大的圆的半径。无限大则输出-1。

mine

我的想法是给蓝点求个凸包先?

标算

  1. 如果有红点不在蓝点形成的凸包内,显然输出-1
  2. 如果答案有限,

CF618G Combining Slimes

题目大意

有一个1xm的面板,两个值为x的数字块碰到一起会形成一个x+1的数字块。一开始面板上没有数字块。接下去会一直执行以下操作,直到无法操作:在面板最右端会生成一个数字块,有p的概率这个数字块的值是1,有1-p的概率这个数字块的值为2.询问最终面板上数字和的期望值。

数据范围

1 ≤ n ≤ 10^9, 1 ≤ p < 10^9

标算

……dp做法

技巧

输出实数题一般两种套路

  • 二分
  • 爆精度

CF794G Replace All

CF744E Hongcow Masters the Cyclic Shift

标算

建模为图论

CF704E Iron Man

题目大意

有一颗n个节点的树,有m个人,每个人有四个参数(t,c,v,u)表示这个人t时刻在点v出现,并以每秒c条边的速度向点u移动,在到达u点后消失。询问最早的相遇时刻。若u=v则表示这个人仅在t时刻出现。

数据范围

n,m≤1e5,t,c≤1e4

标算

首先考虑退化成链的做法。那么每个人都可以表示成为在t-x坐标系上的一条线段。

那么再用树剖dfs序代替x轴,再用set玄学维护就可以了(?)

CF645G Armistice Area Apportionment

题目大意

给定两点P(a,0),Q(-a,0),现在在平面上有n个点,

标算

以n个点为圆心作n个过P的圆。求所有圆交点中与点Q最近的交点,输出该交点到点Q的距离。接下去二分答案,转化为求圆上弧是否相交的问题。

(然而最后一步仍然不会)

CF750H New Year and Snowy Grid

题目大意

有一张有障碍的(永久障碍)\(h×w\)的网格图,问是否存在一条路径,从左上角出发到右下角再回到左上角,其间不重复经过同一个点(除起点外)。有\(q\)组询问,每组询问给出\(k\)个非障碍点,问是否存在不经过这\(k\)个点的合法路径。

数据范围

h,w≤1e3,q≤1e4,k≤10

标算

首先如果只有一组询问,那么这就是一个经典的网络流。我们可以将每个点拆点,如果这个点是障碍点,那么i向i'连流量为0的边,否则i向i'连流量为1的边,表示每个点只能经过一次。然后每个点向周围的四个点连流量为1的边,然后从S到T跑最大流。如果流量小于2,那么答案就是NO,否则答案就是YES.

然后试图最大流转最小割。不过因为建的不是平面图,没有方法直接最短路。

……接下去图论算法,试图构造 最短路模型。

……接下去转为连通性问题。

CF772E Verifying Kingdom

题目大意

交互题:交互库有一颗二叉树,其中有n个叶子节点,所有节点除叶子节点外都有两个儿子。每次可以询问(a,b,c)三个不同的叶子节点,交互库会回答lca(a,b),lca(b,c),lca(a,c)中深度最深的一个。输出与交互库同构的任意一棵树。

数据范围

n≤1e3,询问不能超过10n

标算

考虑挨个将点加入树中,问题转换为如何快速判断一个点在树中的位置。

然后点分治。


中午休场时分:播放《帕丁顿的熊》

下午12:59:下午第一场主讲人镇海梁晏成

课件名称:JOIsc(Japanese OI Spring Camp)好题选讲

Port Facility

Sparklers

题目描述

M个人分别在Ai的位置上站立,同时每个人都有烟花且他们每秒可以跑s米。初始只有第k个人的烟花正在燃烧,并且烟花只能够燃烧T秒;现在要将烟花传递下去。烟花能够从A传递到B当且仅当:

  • A和B的位置相同
  • A的烟花恰好燃烧到T秒
  • B的烟花尚未燃烧

mine

那么二分答案是显然的,问题是如何check()。

Cultivationhh

题目描述

有一个W×H的格子,其中有n个格子长草。接下去可以选择上下左右四种操作。“上”操作代表所有长有草的上边一个格子长上草。

标算

先考虑一维的情况,那么只有左右的操作。

例如X---X-需要3次,而---X---X-需要4次。

设左操作有L次,右操作有R次;左边起有A个空,右边起有B个空,两块草之间有最大C个空。那么必须满足:

  • L≥A
  • R≥B
  • L+R≥C

然后在二维中考虑上下操作的次数。继而dp处理,最终得到答案。

Broken Device

题目描述

通信题:你需要传递一个数X。

你可以发送一份长度为150位的01串。由于发送装置是损坏的,在这150位中,有指定的K位是损坏的,这些位置上只能发送0.你加密时知道这些信息。

同时需要根据你发送的01串还原出X。注意,你解码时只知道发送装置是损坏的,而不知道K的值,也不知道哪些位置只能发送0

数据范围

X≤1e18,K≤40.

mine

标算

random_shuffle? / 某种神奇的压缩方式?三位分一个段。

Railway Trip

Arranging Tickets

题目描述

有N个车站顺时针围成一圈,编号为1...N。有N种车票,其中第i种车票可以从第i个车站前往第i+1个车站;也可以从第i+1个车站前往第i种车站。

只能以套票的形式购买车票,一组套票包含每一种车票恰好一张。

现在有M类人,第i类人共有Ci个,他们都要从Ai前往Bi个车站,询问要满足所有人至少需要多少组套票。

标算

(有些抽象……加上我想睡觉了……自从没有听懂讲课的“翻转”操作之后就再也没听懂了……)

Long Mansion

标算

似乎是DP?

Natural Park

题目描述

交互题:有一个N个点,M条边的无向图,每个点的度数≤7.每次你可以询问(x, y, p[]),交互库会返回只经过p[]中的点能否从x走到y

最多询问45000次,求这张图

数据范围

N,M≤1500

标算

先考虑树退化为链的过程;然后再……

Long Distance Coach

题目大意

有一辆客车从0前往W,车速为每秒一个单位长度。途中有N个补给站位于S1,...,Sn。在起点或补给站可以给客车的饮水机加水,其中饮水机容量不限且每一单位的水价格均为W。

起初车上有M个乘客,第i个乘客会在时刻Di+T×k喝一单位的水;如果此时饮水机没有水了,这位乘客就会下车并且索要Ci的赔偿费。不会有人在补给站的时候需要喝水。

司机会在所有T×k的时候喝一单位的水,此时饮水机内必须要有水

询问如何分配在起点和补给站加水的量,使得总花费最小。

mine

显然的,既然饮水机容量不限且水的单价相同,那么可分为两种情况:

  1. 让所有人都有水喝:在起点就买下所需的水。
  2. 把那些要求赔偿费的乘客赶下去:起点所买的水小于所需的

但是如何继续贪心呢?……

标算

同上分为两类,然后dp做法。

转移方程显而易见之后考虑复杂度。然后据大佬所说,可以斜率优化+单调栈优化dp;或者cdp分治维护一下;或者一种用gcd的方法优化(?)

Abduction 2

题目描述

有?+?个街道,其中?条平行?轴,?条平行?轴,它们相交形成?×?个十字路口。每条街道有一个重要度,重要度两两不相同。给定一个起点,开始时你可以选择任意一个方向并顺着街道走下去,如果在十字路口拐弯可以走到重要度更大的街道就拐弯,方向随意。如果走到尽头那么就停止行走。?次询问一个起点,求走到尽头的最长路的长度

数据范围

W,H≤500000,Q≤100

标算

先考虑一次询问直接搜索,然后仔细分析一下可以加上一些剪枝条件。

后来梁晏成成功证明了记忆化之后复杂度不仅小于O(NQ)并且还只是O(N√Q)的(因为记忆化之后常数比较大)

Dragon 2

有?条龙,第i条龙坐标为(?_?,?_?),属于第?_?个部落。有两个人类的村庄(?1,?1 ),(?2,?2)。接下来有?次询问,每次询问给出?,?,表示所有属于?的龙向属于?的龙作射线,问与线段(?1,?1 )−(?2,?2)的交点个数。不存在三点共线

标算

理解为向量的二维偏序判断问题。然后再分块技巧,离线预处理玄学可过(据说每次暴力也直接可过)

City

题目描述

通信题


The End

省选一试结束啦(不过我反正就是去打酱油的节奏)

话说题目的部分分给的还是很良心的。然而我并没有拿到

A题暴力处理线树,看上去开O2跑得还挺快。

B题看上去就是数据结构大题,果断放弃连暴力都没写。

C题猜结论,每次操作应该是O(1)或者O(log n)的?瞎猜瞎猜捣鼓出了跟gcd有关的东西。但是貌似我的结论在M≤1e3的时候跑的基本正确然而M≥1e5时候就要靠rp了???

顺带捎上题面和题解

诶诶诶,好像在两个学校同时报省选那么会有两张准考证
所以这就是我最终考试编号和狗牌编号不一样的理由吗……

转载于:https://www.cnblogs.com/antiquality/p/8603057.html

你可能感兴趣的:(数据结构与算法,java)