
POI
文章平均质量分 92
make_it_for_good
这个作者很懒,什么都没留下…
展开
-
POI 2014
bzoj 3522&&4543这题好神。。。 一开始我还在想启发式合并,然后写了一个发现gg了,然后看题解发现这题正解竟然TM是O(n)O(n) 的!是O(n)O(n) 的!!是O(n)O(n) 的!!!树形dp。设f[i][j]f[i][j] 表示在点i,向下长度为j的路径条数。 设g[i][j]g[i][j] 表示i的子树中和与i距离为j的点可以拼成一个三元组的点对数。就是这样: 其中z与原创 2016-09-23 20:51:35 · 386 阅读 · 0 评论 -
POI 2015
bzoj 4386 Wycieczki把一个点拆成三个点跑矩乘快速幂,因为要求一个前缀和所以新建一个点,连一个自环,把所有点的第三个点连过去。 因为可能暴long long,所以我用的long double,然后很慢。。。#include <bits/stdc++.h>using namespace std;#define ll long long #define ld long doubl原创 2016-09-21 14:16:37 · 972 阅读 · 0 评论 -
POI2013
bzoj 3144先二分答案,然后就是求一些条件是否都可行。 首先一个人一定在第一次记录到最后一次记录的这段区间内出现。 然后每段区间可以两边扩展,如果一个人没有记录过那么他的区间是任意的。 那么可以把当前工作的人分成三类:在区间内的人,区间未开始的人,区间已经结束的人。 没记录过的人属于第二种。 首先如果一个时间有两个人记录的不一样,那么一定无解。 如果某个时刻必选的人数大于要求的人数原创 2016-09-28 17:23:13 · 527 阅读 · 0 评论 -
bzoj 2789 [Poi2012]Letters 树状数组
第i次将A中大于等于i的第一个等于bi的位置换到第i个。 维护一下A中每个点往后第一个和他相等的字符。用树状数组维护每个点当前的排名。#include <bits/stdc++.h>using namespace std;#define N 1100000#define ll long longint n;char s1[N],s2[N];int tr[N],nex[N],pos[26原创 2016-11-14 12:21:39 · 362 阅读 · 0 评论 -
bzoj 2793 [Poi2012]Vouchers 调和级数求和
就是维护一下每个值现在取到几。复杂度调和级数求和nlogn#include <bits/stdc++.h>using namespace std;#define N 1100000#define ll long longint n,m,mx,top;int a[N],pos[N];ll now,bel[N],st[N];int main(){ //freopen("tt.in原创 2016-11-14 20:25:32 · 383 阅读 · 0 评论