Skip to content

Latest commit

 

History

History
152 lines (84 loc) · 7.44 KB

File metadata and controls

152 lines (84 loc) · 7.44 KB

POI 1995/1996 III

Stage I

题意:给出一个弓形,弦长是$l$,弧长是$l+d$,求弦中点和弧中点的距离。

$1 \le d \le \min{100, \frac{l}{2}}, 1 \le l \le 100000$

题解:二分半径

题意:$10^4 \times 10^4$里有一个$n$个点的多边形区域,保证边都和坐标轴平行。给出两个多边形内的起点和终点,求最短路。

$4 \le n \le 5000$

题解:坐标离散化,假设离散化后权值都是$1$,找到从起点到终点的一条最短路,显然,这条路径和,权值非$1$的路径是一样的。

问题变成如何判断一条线段是否在多边形内,这个就直接用射线法搞搞即可,优化优化可以$O(1)$判,总复杂度$O(n^2)$。

题意:给出一个$n$个点$d$条边的边双联通图,要求找到一个排列$x_1,x_2,\dots,x_n$满足:

  1. $x_1=1$
  2. 从$1$出发,$x_i$可以
  3. 只用$x_2,\dots,x_{i-1}$的点到达
  4. $x_1,x_n,x_{n-1},\dots,x_2$也要满足上面两个条件

$3 \le n \le 500, 1 \le d \le \frac{n(n-1)}{2}$

题解:观察下可以得知这个排列$x_1,x_2,\dots,x_n$只要满足:

  1. $x_1$和$x_n$有边相连
  2. 对于任意$i$ ($2 \le i \le n - 1$),存在$j,k$ ($j < i < k$)使得$x_j$和$x_i$有边相连,$x_i$和$x_k$有边相连

考虑如下构造:

  1. 选出${1,u}$作为初始选中的点,其中$u$是和$1$相邻的一个点
  2. 从$s=1$开始,如果$s$存在一个邻居没有选中,那么找一条路径$s \to v_1 \to v_2 \to \dots \to v_k \to v_{k+1}$使得$v_1,v_2,\dots,v_k$是未被选中的点,$v_{k+1} \ne s$且$v_{k+1}$是一个被选中的点。然后$v_1 \to v_2 \to \dots \to v_{k}$插到$s$后面去
  3. 如果不存在这样的邻居,则把$s$后移,指向下一个选中的点

显然这样构造出来的排列是满足条件的。

题意:有$n$个杯子,容量为$o_i$,一开始都装满了水,你可以:1. 从一个杯子把水全部倒到另一个杯子,前提是第二个杯子有足够的容量;2. 用另一个杯子的水把一个杯子装满;3. 把杯子里的水倒掉

给出一个最终状态,求最少操作步数

$1 \le n \le 4, 1 \le o_i \le 49$

题解:bfs

Stage II

Day 0

题意:给出$5$个数,用最小次数排序

题解:假设$5$个数分别编号$a,b,c,d,e$.

  • $a$ vs $b$, $c$ vs $d$,$2$次,假设$a>b$,$c>d$
  • $a$ vs $c$,$1$次,假设$a>c$,则$a>c>d$

把$e$插入$a,c,d$中,需要$2$次,结果有4种:

  • $e>a>c>d$,则把$b$插入$c,d$中,需$2$次
  • $a>e>c>d$,则把$b$插入$e,c,d$中,需$2$次
  • $a>c>e>d$,则把$b$插入$c,e,d$中,需$2$次
  • $a>c>d>e$,则把$b$插入$c,d,e$中,需$2$次

只要$7$次就够了

Day 1

题意:给出$n \times n$的棋盘,你要在上面放$n$个车,已知第$i$个车一定要放在矩形$(a_i,b_i)-(c_i, d_i)$里面,并且同一行或者同一列不能有多余一个车。求一个方案。

$1 \le n \le 3000, 1 \le a_i \le c_i \le n, 1 \le b_i \le d_i \le n$

题解:显然$x$坐标和$y$坐标可以分开考虑,那么显然就变成了一个convex bipartite graph的最大匹配问题。考虑$i$从$1$枚举到$n$,考虑那些可以放在$i$的车,取一个右端点最小的即可。

Day 2

题意:令$fib_1=b, fib_2=a, fib_{k+2}=fib_{k+1}+fib_{k}$,给出一个字符串$s$,求$fib_n$中出现的次数。

$1 \le n \le 200, 1 \le |s| \le 30$

题解:$n \le 11$的时候,直接暴力计算即可。之后考虑$s$出现次数一定来自于$f_{n-1}$,$f_{n-2}$以及中间新加部分。稍加讨论下即可。

题意:有$n$个生成器$G_1,G_2,\dots,G_n$,$G_i$可以生成$S_i \subseteq {1,2,\dots,n}$或者$0$(代表游戏结束)。$G_i$每次生成的数必须和上一次的不一样,否则就生成$0$。

从$G_1$开始生成数,如果生成的数是$r$,那么下次由$G_r$开始生成数。如果$G_n$生成了$0$,并且其他生成器用尽了$S_i$,那么就输了。

求一个生成序列,使得最后生成了$0$,但是不输。

$1 \le n \le 1000, 0 \le |S_i| \le 12000$

题解:显然可以构造一个有向图出来,目的是构造一个从$1$出发的路径,标记经过的每一条边,假设终点是$s$,要求$s$的每条出边都被标记过了;如果$s=n$,还要求全图至少存在一条边没有被标记过。

如果存在从$1$到$n$的欧拉路径,那么显然我们只要在图中删掉一个圈就可以得到所求路径。如果不存在,直接乱走即可。

Final Stage

Day 0

题意:给出$n$,构造$n$的一个排列,使得没有长度为$3$的等差子序列。

题解:分奇偶,递归构造

Day 1

题意:有$n$个间谍,有$r$个监视关系$(a,b)$,如果$a$监视$b$,那么逮捕$a$后,$b$也能被逮捕。现在有$p$个间谍可以被收买,问最少的代价,逮捕所有间谍。

$1 \le n \le 3000, 1 \le p \le n, 1 \le r \le 8000, 1 \le a, b \le n$

题解:先求强连通分量,然后只要挑入度为$0$的点里某个间谍收买即可。

题意:有$n$个盒子围成一个环,第$i$个盒子里有$a_i$块石头,每次可以移动一块石头到相邻位置。求最小步数,使得每个盒子里最多只有一块石头。

$1 \le n \le 1000, 0 \le a_i \le n, \sum a_i \le n$

题解:费用流模型很明显,优化下建边,然后上原始对偶就过了。

Day 2

题意:给出$3 \times n$的格子,要在上面放“骑士”,其中每一列最多有一个位置不可放。求最多能放多少互不攻击的“骑士”,以及方案数。

$1 \le n \le 100$

题解:$dp(i,j,k)$表示前$i$列,上一列放置状态是$j$,当前列放置状态是$k$的最值以及方案数。

题意:有两个字符串$x$和$y$,然后另有一个字符串集合${s_1,s_2,\dots,s_k}$,现在可以任意往$x$和$y$后面append字符串,使得最后它们相等,求最小append次数。

$1 \le k \le 40, 1 \le |x|, |y|, |s_i| \le 2000, \sum |s_i| \le 5000$

题解:观察一下可以知道,显然之后长串和短串的长度差,以及长串最后append的是谁比较重要。令$dp(i,j)$表示长串最后append的是$i$,还有长度$j$的后缀没有匹配的最小操作次数。枚举一个串,往短串后面接即可。注意短串可能会转变成长串。