
poi
文章平均质量分 77
lych_cys
这是一只沙茶
展开
-
poi2012 切题记
19th Polish Olympiad in InformaticsTasksFestival(Stage I)(100/100)Letters(Stage I)(100/100)Distance(Stage I)(100/100)Rendezvous(Stage I)(100/100)Wel原创 2016-05-12 15:33:14 · 1236 阅读 · 0 评论 -
poi2011 切题记
18th Polish Olympiad in InformaticsTasksConspiracy(Stage I)(100/100)Lollipop(Stage I)(100/100)Lightning Conductor(Stage I)(100/100)Shift(Stage I)(100/100)原创 2016-07-06 16:16:57 · 1713 阅读 · 0 评论 -
poi2010 切题记
17th Polish Olympiad in InformaticsTasksGuilds(Stage I)(100/100)Railway(Stage I)(0/100)Beads(Stage I)(100/100)Divine Divisor(Stage I)(100/100)Intell原创 2016-06-03 20:53:37 · 986 阅读 · 0 评论 -
bzoj 1103: [POI2007]大都市meg 树状数组
一句话题意:将边权修改为0(初始为1)和查询某个点到1的距离。 一开始预处理没有问题吧,然后修改边权只对它管辖的子树有影响。相当于区间修改。然后查分一下用树状数组即可。AC代码如下:#include#include#include#define N 250005using namespace std;int n,m,tot,dfsclk,c[N],bg[N],e原创 2016-03-15 07:26:05 · 1372 阅读 · 0 评论 -
bzoj 4377: [POI2015]Kurs szybkiego czytania 数学
令f(i)=ai+b,由题意(a,n)==1,那么可以得到f(i)两两不同。同时可以发现对于一个f(i),如果f(i)已经确定,那么i~i+m-1的01串也就确定了,因此我们可以判断f(i)为开头时是否与给定串相同。 然后按照给定的串的每一位,得到f(i)不可能出现的位置;另外f(n-m+1)~f(n-1)也是不可能的。那么把所有不可能的求并,然后补集的大小就是答案。AC代码如原创 2016-03-28 20:02:07 · 1152 阅读 · 0 评论 -
bzoj 4380: [POI2015]Myjnie 动态规划
感谢Claris的题解。 令t[l][r][x]表示l~r家店,最小的价格为x时,对于所有l=x的最大收入,同时令pos[l][r][x]表示最小的价格的店。然后就是O(N^3M)了。AC代码如下:#include#include#include#include#define N 55#define M 4005using namespace std;int原创 2016-03-28 20:14:42 · 1658 阅读 · 0 评论 -
bzoj 4345: [POI2016]Korale 优先队列&dfs
首先构造出第k小的项链的权值。根据dfs求第k小的权值的流程类比,每一个项链可以用一个二元组(i,j)表示权值为i,最大的为j号(从小到大排序之后)。那么把这个二元组塞进优先队列,一个二元组(i,j)可以得到(i-a[j]+a[j+1],j+1)或者(i+a[j+1],j+1),然后一直拓展到k个为止。 接着是求第k小。我们可以直接按照dfs,得到第k小,那么只要保证只dfs 1~原创 2016-04-01 07:19:32 · 2075 阅读 · 0 评论 -
bzoj 4383: [POI2015]Pustynia 线段树优化建图
首先对于题目中的某一个条件,考虑朴素建图,如下: 新建一个点p,向所有的条件给定的x[i]连边p->x[i],边权为0;同时向所有l~r中不是x[i]的点t连边t->p,边权为1;那么一个点i的值f[i]就是max(a[i],f[j]+Wj->i)。拓扑排序或者记忆化搜索都可以。 但是这样建图为O(N^2),观察发现所有的边t->p中的t实际上是若干个区间。那么可以原创 2016-04-01 09:18:12 · 2930 阅读 · 0 评论 -
bzoj 4386: [POI2015]Wycieczki 矩阵乘法&倍增
由于边权 但是由于拆了点,因此不是每个点都是到达状态的,有两种解决办法,一种是新建一个汇点T,然后到达状态向T连一条边;或者根据出发状态然后乘上出去的路径条数转化为到达状态(见代码)。 求答案的时候,可以将k变成开的上界,然后答案+1即可。 如果考虑二分答案,那么可以,新建源点S,然后向所有点连一条边,就可以用矩阵乘法得到步数=x的路径的条数。如果要原创 2016-04-01 16:42:52 · 1617 阅读 · 0 评论 -
bzoj 4384: [POI2015]Trzy wieże 树状数组
显然全部相同的可以O(N)扫一遍得到,那么不妨考虑不存在某两种字母相同的最长长度。 令x[i]为1~i中‘B’的个数,y[i]为'C'的个数,z[i]为‘S’的个数。那么某一段i+1~j,不符合题设的条件为: x[i]-x[j]=y[i]-y[j]或x[i]-x[j]=z[i]-z[j]或y[i]-y[j]=z[i]-z[j]。 如果把与i相关的原创 2016-04-02 12:01:34 · 2043 阅读 · 6 评论 -
poi2009 切题记
16th Polish Olympiad in InformaticsTasksFire Extinguishers(Stage I)(100/100)Pebbles(Stage I)(100/100)Algorithm Speedup(Stage I)(100/100)Elephants(Stage I)原创 2016-07-19 10:30:43 · 1378 阅读 · 0 评论