poi2009 切题记

本文详细解析了16th Polish Olympiad in Informatics的竞赛题目,包括贪心算法的应用、动态规划解题思路、字符串处理、最短路问题及线段树的运用。介绍了Fire Extinguishers、Pebbles、Elephants等题目的解题策略,涉及多种算法和数据结构的综合运用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

16th Polish Olympiad in Informatics

Tasks

Fire Extinguishers(Stage I)(100/100)
Pebbles(Stage I)(100/100)
Algorithm Speedup(Stage I)(100/100)
Elephants(Stage I)(100/100)
Fire Brigade(Stage I)(0/100)
Isles in a Triangular Grid(Stage II - day 0)(100/100)
The Walk of Bytie-boy(Stage II - day 1)(100/100)
Ticket Inspector(Stage II - day 1)(100/100)
Architects(Stage II - day 2)(100/100)
Ice Skates(Stage II - day 2)(100/100)
Hexer(Stage III - day 0)(100/100)
Words 2(Stage III - day 1)(0/100)
Words(Stage III - day 1)(100/100)
Arrays(Stage III - day 1)(100/100)
Island(Stage III - day 1)(100/100)
The Code(Stage III - day 2)(100/100)
The Search(Stage III - day 2)(100/100)
            再次弃坑。。剩下两道疯狂讨论题。

Fire Extinguishers 贪心。令f[x][y]表示x所在子树中距离x为y还没有被覆盖的点有多少;g[x][y]表示x所在子树距离x为y的灭火器还能覆盖多少。贪心转移即可。

Pebbles 相邻的两两为一组,每组的差为一堆石子就变成经典问题了。

Algorithm Speedup 暴力记搜判断。用hash记录即可。

Elephants 置换找循环节,然后两种方法贪心,一是用循环节中最小的一个个去交换;或者先将循环节中最小的和所有的交换再一个个交换。

Isles in a Triangular Grid 码农题。可以由面积为i个外面加入一个小三角形得到面积为i+1的。注意中间有洞的情况。

The Walk of Bytie-boy 从中间往两边两端宽搜即可。

Ticket Inspector 傻逼dp。

Architects 用单调队列记录一个递减序列,当长度>K的时候把队尾弹掉。

Ice Skates 注意到不合法当且仅当存在[i,j]使得[i,j]中的人数>(j-i+1+d)*k,线段树维护a[i]-k的最大子序列和和d*k比较即可。

Hexer 大力dijkstra+堆优化跑最短路。

Words 神题。。。定义一种逆变换将10变成1,1变成0。然后对于每个a[i]每一轮变成a[i]-1,如果a[1]=0显然可以变成2,如果a[n]=3显然可以变成2,;如果a[n]=1显然可以直接删掉。然后对于a[i]=0的情况,如果a[i-1]=1就把a[i-1]变成2然后删掉a[i];如果a[i-1]=3就把a[i-1]和a[i]都变成3,显然序列不变,a[i-1]!=1或3时无解。暴力是Σai的。如果把这个过程用堆来优化就可以变成NlogN可以过掉这题的加强版。。然而实在太蛋疼。

Arrays 可以发现合法的冲要条件是对于a,b,不存在某一行(列)ai和bj,使得x∈ai而x∉bj,按某种方法对应行和列然后判断即可。

Island 把有用的边跑一个半平面交得到的凸壳就是路径。

The Code 如果存在三个编码A,B,C,令S为A后面接上B得到的字符串,如果C是S的子串且不是S的前(后)缀则C不合法。打标记暴搜即可。感觉可以用AC自动机做到O(N)。

The Search 题意:猜数游戏。可以询问那个数是否比x大或者小。回答Yes的代价为a,回答No的代价为b,你要给出一个策略在最坏情况下代价最少。

 令dp[i]表示代价为i时最多可以猜数范围为多少的数。然后用和二分一样的方法即可。

 代码戳->点击打开链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值