随笔分类 -  刷题记录 - BZOJ

摘要:这道题所需要的区间反转操作是Splay的主要功能之一——维护区间信息的一个应用。如何维护呢?我们考虑区间$[l, r]$,我们如何在Splay中将它变成一个可操作的东西呢?考虑把整个区间搞到一棵子树上去,然后用类似于线段树打懒标记的方法维护信息。 ​ 具体来说,我们把区间节点$l 1$旋到整棵树的... 阅读全文
posted @ 2016-01-19 20:56 Armeria 阅读(295) 评论(2) 推荐(0)
摘要:最小生成树的裸题咯… 但是在边的编号上还是出了点问题… 以后直接上$n×n$,不虚。。 阅读全文
posted @ 2016-01-19 19:19 Armeria 阅读(134) 评论(0) 推荐(0)
摘要:武神给窝看了这题,然后窝三秒钟之内没有反应出来做法。 然后码代码。TM然后窝WA了4次!! 为何窝如此沙茶… 果然窝还是NOIP选手… 阅读全文
posted @ 2016-01-18 22:05 Armeria 阅读(195) 评论(0) 推荐(0)
摘要:之前一直把矩阵的元素以为是给定的$m$以内… 然后才发现… ​ 哔了狗了… ​ 二分图匹配咯… 如果第$i$行第$j$列是黑色,那么在代表这一行和这一列的两个节点之间连边。然后匈牙利算法跑一遍,判断最大匹配是否是$n$即可。有若干种想法可以证明(伪)它的正确性。如果某一组输入对应的二分图的最大匹... 阅读全文
posted @ 2016-01-18 21:38 Armeria 阅读(229) 评论(0) 推荐(0)
摘要:NOI 2015 Day1 T1啊… 学(nao'bu)了一下离散化,跟哈希的写法差不多咯… 大概的想法就是搞一个struct,两个域,分别储存原值和排序后的编号(也就是离散化之后的值)。然后利用这个二分查找一下即可。举个例子,原序列排序后为$ 1, 2, 5, 1000, 25000 $,然后我们... 阅读全文
posted @ 2016-01-18 19:25 Armeria 阅读(669) 评论(0) 推荐(0)
摘要:这道题可以用set水过,也可以练习写一下treap... 显然任何时候,领养人和宠物都不会同时存在…… 所以就相当于每次查询序列的前驱/后继了… 贴上两份代码吧… 代码一(set): 代码二(treap): BZOJ的测试结果显示窝手写的treap比set还慢了4ms... 身败名裂..... 阅读全文
posted @ 2016-01-16 00:56 Armeria 阅读(257) 评论(1) 推荐(0)
摘要:我也不知道BZOJ里为什么会出现这种非BZOJ画风的题。。 裸上前缀和即可。。 阅读全文
posted @ 2016-01-15 00:18 Armeria 阅读(172) 评论(0) 推荐(0)
摘要:逻辑推理题。根据扫雷经验可以知道,边界上的格子一定是本题的突破口。先看第一列前两个格子,它们对应的是第二列的第一个格子,我们设之为$a_1$。如果$a_1=0$或$a_1=2$,则第一列前两个格子的方案唯一确定,所以我们只需判断输入是否合法即可。如果$a_1=1$,我们就枚举哪一个格子是有雷的,判断... 阅读全文
posted @ 2016-01-15 00:17 Armeria 阅读(140) 评论(0) 推荐(0)
摘要:题目大意:有$n$个储钱罐,每个储钱罐的钥匙都在另一个储钱罐中。求打开每一个储钱罐所需要砸开的最小数量。 $Solution$:如果储钱罐$x$的钥匙在$y$中,那么就连边$x$ $y$。于是每个点的出度都是1。然后就变成了和NOIP 2015 Day1 T2几乎一样的题——Tarjan缩点或者D... 阅读全文
posted @ 2016-01-14 21:49 Armeria 阅读(253) 评论(0) 推荐(0)
摘要:码了一发名次树,然后在remove和rank上GG了…… remove的话换了一种更保险的写法;而rank直接抄了Rujia Liu的代码…… 给Rj L跪了… 阅读全文
posted @ 2016-01-14 20:11 Armeria 阅读(175) 评论(0) 推荐(0)
摘要:就是$2^i$划分,直接算就行了。 阅读全文
posted @ 2016-01-14 18:45 Armeria 阅读(129) 评论(0) 推荐(0)
摘要:BZOJ 2423 DP 第一问是经典DP,直接做就可以了(设$f[i][j]$为$X$串考虑到$i$,$Y$串考虑到$j$,且不强制选$i$和$j$的方案数)。然后第二问。分几种情况讨论一下(可能看起来有点不优美……): 设$g[i][j]$为方案数,则 I. $A[i]=B[j]$ $... 阅读全文
posted @ 2016-01-12 19:44 Armeria 阅读(127) 评论(0) 推荐(0)
摘要:把思路理顺了就行了… 下面把整个乱搞思路讲一下。 三条项链首先考虑最里面的那个珠子。如果不是完全相同的话,就需要把所有项链的所有珠子全都拆下来——这也就是全部过程,如果再装的话也是浪费。然后如果完全相同的话,就考虑倒数第二个珠子,一样的思维方式。因此,我们要找到的就是从里到外第一个不完全相同的珠子,... 阅读全文
posted @ 2016-01-11 19:23 Armeria 阅读(222) 评论(0) 推荐(0)
摘要:本题是Treap/Splay的模板题了… 也可以用set或者双向链表实现。 (其实这题是在NOIP2012 Day1 T3的一部分啊。。 由于我懒,所以只码了Treap。还有很多模板题,先把这几种数据结构刷熟再说。 平衡树上找一个元素的前缀/后缀只要脑补一下,左左右右地走一走就行了。 第一次码,出现... 阅读全文
posted @ 2016-01-10 00:37 Armeria 阅读(170) 评论(0) 推荐(0)
摘要:枚举1..n的每个数x,加上它对答案的贡献n/x即可。// BZOJ 1968#includeusing namespace std; int n, ans; int main(){ scanf("%d", &n); for(int i=1; i<=n; i++) ans+=n/i; ... 阅读全文
posted @ 2016-01-07 23:32 Armeria 阅读(132) 评论(0) 推荐(0)
摘要:比较裸的DP+斜率优化啦…… 让窝又想到了BZOJ上A的第一道有意义的题1597…… 作为第27个A的题也让我颇有感触……设前$i$个玩具放置到$j$个盒子里所需的最小费用为$f[i][j]$。由于连续的玩具必须放到一个容器里,所以我们有:$$f[i][j]=f[k][j-1]+cost[k+1][... 阅读全文
posted @ 2016-01-07 23:14 Armeria 阅读(166) 评论(0) 推荐(0)
摘要:题意:给出一张无向图,每次删去其中一个点,每删一次就输出当前连通块的数量。 首先要明确一点:删去一个点,同时也删去了和这个点有关联的边集。但无论如何,删点并不好搞,所以我们可以考虑倒着来,加点,用并查集维护。具体来说,每次加上一个点x,如果一个点是被第一次删去的(一个点可能被删去多次)(然而数据中并... 阅读全文
posted @ 2016-01-07 18:45 Armeria 阅读(220) 评论(0) 推荐(0)
摘要:本题的DP思路很好想:设f[i]为第i个怪兽被消灭所需要的最小代价,那么,f[i]=min{spl[i],ori[i]+∑j∈App[i]f[j]}然而,由于f[j]有可能也要依赖f[i],所以这个DP会带环。啊,那该怎么办呢?遇到这类问题,我们常常用SPFA来处理。怎么处理呢?我们需要更新过f[j... 阅读全文
posted @ 2016-01-06 22:20 Armeria 阅读(197) 评论(0) 推荐(0)
摘要:题意:求∑ni=1gcd(i,n) 首先,gcd(i,n)肯定是n的约数。所以我们可以考虑枚举每个n的约数d,然后看有多少个gcd(i,n)=d。这个式子又可以化成gcd(i/d,n/d)=1。而它,就相当于ϕ(n/d)。所以,答案就是∑d|nϕ(n/d),其中ϕ(x)可以在O(x√)的时间内求出。... 阅读全文
posted @ 2016-01-06 00:12 Armeria 阅读(153) 评论(0) 推荐(0)
摘要:1009那题仍然记忆犹新…… 首先说一下1009的拓展:如果有多个串,则需要建立AC自动机,状态也需要改成:设f[i][j]为考虑到长度为i的字符串,匹配到AC自动机的j号节点的方案数,同样地道理构造出矩阵即可,只不过这里f[i][j]为0的条件变为j号节点是单词节点。 然后看这道题,它的要求是相反... 阅读全文
posted @ 2016-01-05 19:41 Armeria 阅读(303) 评论(0) 推荐(0)