自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

TA

A Lannister always pays his debts

  • 博客(188)
  • 收藏
  • 关注

原创 [bzoj3489] A simple rmq problem 解题报告

说几种比较傻逼的做法: 考虑一个点i,设它前面第一个和它相等的点的位置是lastilast_i(若没有就是0),设它后面第一个和它相等的点的位置是nextinext_i(如果没有就是n+1),则它会产生贡献的区间[l,r]要求lasti+1≤l≤i,i≤r≤nexti−1last_i+1\le l \le i,i\le r \le next_i-1。所以如果把询问的区间看作平面上的点,这就相当于是

2016-04-26 07:11:39 1408

原创 [bzoj3065]带插入区间K小值 解题报告

喜闻乐见的用的很麻烦很傻逼得搞法。。 先用一个块链维护序列,做到O(n√)O(\sqrt n)插入,O(1)O(1)比较两个点在序列中位置的大小。时间复杂度是O(nn√)O(n\sqrt n)。 再用一个块链维护权值,每个块维护按位置排序的序列。查询的时候从小到大枚举每个块,先在块里二分统计块内在查询区间中的个数,然后如果发现答案在这个块里,就直接暴力找到第k小的是哪个。取块大小等于O(nlog

2016-04-23 14:20:51 1545

原创 [bzoj3720]Gty的妹子树 解题报告

大概看了一眼网上的题解,跟块爷一样都写的会被卡的分块。(反正块爷出的题也不会卡自己。。) 这里说一种比较科学的做法。就是用块链维护dfs序。 维护每个节点按dfs序是在哪个块的哪个位置,对每个块维护块中节点的最浅深度、它的下一个块是哪个块,块中节点按dfs序排序的序列,按权值排序的序列。 一开始的时候每B个分一块,最后一块节点数≤B\le B。查询的时候在两边的块暴力,在中间的块里二分,时间复

2016-04-22 21:55:14 1471

原创 [bzoj4066]简单题 解题报告

也是很久以前奇葩做法搞的题,补个解题报告。大爷的做法:听说是把k-d树写成替罪的或是每n√\sqrt n重建。 傻逼的做法: 我们是理论计算机科学家(当时我弱不会k-d树。。),所以我们需要思考科学的做法。 分块! 考虑将横坐标分成n√\sqrt n份,纵坐标分成n√\sqrt n份,这样会有n个块。内存首先比较科学了。我们显然需要每插入n√\sqrt n个元素重建。我们对每一行维护前缀和,

2016-04-22 17:45:36 1626

原创 [Ahoi2013]作业 解题报告

很久以前用奇葩做法搞的题。。现在补个解题报告。传统做法: 考虑莫队,就需要我们设计一个O(1)O(1)插入,O(n√)O(\sqrt n)查询的数据结构,显然就需要对权值分块,记每个数出现次数和每个块两问的答案(或者第一问另写个主席树也可以,我比较懒)。莫队的块就分成nm√n\over \sqrt m块。时间复杂度O(mn√+nm−−√)O(m\sqrt n+n\sqrt m)。非常好写,跑的飞快

2016-04-22 17:00:09 1162

原创 [Ahoi2008]Rectangle 解题报告

又是喜闻乐见的只会傻逼做法的题。。跟我跑得差不多快的人都写了1K,我写了快4K。。 并不知道他们怎么搞的,说下我的做法: 考虑按x从大到小的扫描线,每次在矩形的左下角(x1,y1)(x_1,y_1)插入一个数y2y_2,判断一个矩形(x1,y1)−(x2,y2)(x_1,y_1)-(x_2,y_2)是否被包含就相当于询问矩形(0,0)−(x1,y1)(0,0)-(x_1,y_1)的最大值是否大于

2016-04-21 21:54:48 652

原创 [poj1741]tree 解题报告

经典的点分做法就不说了(然而我写点分t了。。)线段树/平衡树启发式合并的话,就是维护子树每个节点到子树跟的距离,打一个整棵子树的标记,然后按dfs/bfs序启发式合并,合并之前先查询一下答案即可。 如果用线段树启发式合并的话,时间复杂度是O(TNlog2N)O(TN\log^2N)的,与点分一样;但是如果用splay启发式合并的话,时间复杂度存是O(TNlogN)O(TN\log N),实际跑起来

2016-04-21 17:31:11 1006

原创 [bzoj4527]K-D-Sequence 解题报告

这题一开始傻逼了想了好久笛卡尔树之类的东西,然后一写发现错了。。然后思考了一下又想了个笛卡尔树上的,一写发现又错了。。 考虑扫右端点,设当前扫到了i,那么对于每个j < i,设xj=max{ak}(j≤k≤i),yj=min{ak}(j≤k≤i)x_j=\max \{a_k \} (j\le k\le i),y_j=\min \{ a_k \} (j \le k \le i),就是要求min{j}

2016-04-21 06:58:04 974

原创 [ontak2013]Kapitał 解题报告

令n!=2a5bc,2/|c,5/|cn!=2^a5^bc,2\not| c,5\not |c,这样就CmnC_n^m就便于计算了。a,b很好统计,至于c我们可以先求在mod2k\mod 2^k和mod5k\mod 5^k意义下的,然后扩展欧几里得合并即可。如何求cmod2kc \mod 2^k? 先处理出[0,2k−1)[0,2^k-1)中与2互质的数的阶乘,然后对于n!,与2互质的数就可以直接

2016-04-19 20:49:38 809

原创 [bzoj4544]椭圆上的整点 解题报告

用了很奇怪的暴力。。跑了7s。。出题人跑了2s还有人跑了0.1s不知道他们怎么搞的。。稍微化下式子。 x2+3y2=n23y2=(n+x)(n−x)x^2+3y^2=n^2\\ 3y^2=(n+x)(n-x) 令g=(n+x,n−x)g=(n+x,n-x),则有n+x=ga2,n−x=g3b2n+x=ga^2,n-x=g3b^2或n+x=g3b2,n−x=ga2(a,b∈Z)n+x=g3b^2,

2016-04-19 17:39:19 1901 1

原创 [bzoj3956]Count 解题报告

先来说一下我的傻逼做法: 注意到合法点对只会有2N个,因为一个点作为较小的端点+左/右端点只会有一次,就是和左/右边第一个大于等于它的配对。所以直接上主席树就行。 时间复杂度O(nlogn)O(n\log n)再来膜拜一下morestep大爷的做法(我最近好像每道题都是各种傻逼做法。。): 注意到实际上这道题的点对关系只有相离和包含两种,不会出现abab这种情况。 而且实际上区间最大值会把这

2016-04-19 10:54:20 1004

原创 [pa2015]Fibonacci 解题报告

考虑斐波那契数列模n的循环节,设其长度为L(n)。(这个东西有个学名叫the Pisano period) 显然,若n=pq((p,q)=1),则L(n)=lcm(L(p),L(q))。所以我们就可以将n分解成若干pkp^k的乘积考虑。 对于L(pk)L(p^k)(p是质数,k>1),有一个猜想:L(pk)=L(p)pk−1L(p^k)=L(p)p^{k-1}。(参考资料,据说是一个叫D·D·W

2016-04-19 09:17:34 999

原创 [cqoi2016]伪光滑数 解题报告

这题有点意思。。 考虑对于i个质因子,最大的质因子至多为j能生成的数。我们需要每次在其中取最大值,显然它可以用可持久化左偏树来维护。有leftist(i,j)=leftist(i−1,j)∗j[ji≤n]+leftist(i,j−1)leftist(i,j)=leftist(i-1,j)*j[j^i\le n]+leftist(i,j-1) 然后我们再用一个堆来维护所有可持久化左偏树的根的最小值

2016-04-18 16:10:21 1257

原创 [spoj11482]Count on a trie 解题报告

一开始以为是AC自动机的题,发现一直不会求T的AC自动机。后来想到可以求S的sa,就发现简单多了! 我们可以dfs S,然后对于S中的一个节点处理它的询问。(二分+hash比较大小) 那么问题就在于怎么维护T的hash。本来想用可持久化块链,发现mle了。就只好学了下treap。 treap的话,如果把rank看成下标,把随机的值看成权值的话,其实就是一颗随机数列上的笛卡尔树。树高等于比前面的

2016-04-18 09:49:06 1139

原创 [bzoj4373]算术天才⑨与等差数列 解题报告

先来说一下傻逼的做法。 考虑如何约束等差数列这个条件,如果k=0,就是[最大值=最小值];否则就是区间中[相邻两数差的绝对值的gcd=k][(最大值-最小值)/(r-l)=k][区间中没有相同元素]。 gcd可以在O(log2n)O(\log^2n)的时间复杂度很容易搞出来,所以问题就在于怎么确定区间中没有相同元素。 显然,如果记每个位置下一个和它权值相同的位置在哪,那就转化成了求区间最小值的

2016-04-18 08:36:36 1300

原创 [scoi2005]王室联邦 解题报告

拿来学了一下树分块。 树分块的要求是把树分成⌈NB⌉\lceil {N\over B} \rceil 块,每一块的每个节点到这个块的lca的之间的节点数不超过3B3B. (好像在很久以前听谁讲过。。)做法是按dfs序出栈或bfs倒序考虑,把当前这个子树的剩余块加到它的父亲上,如果它的父亲上的块已经≥b\ge b就把这个块取出来。这样的话出来的就是若干大小在[b,2b)的块加上一个在[0,b)的块

2016-04-15 10:21:14 707

原创 [bzoj2555]substring 解题报告

考虑用splay维护sa,每次比较的时候二分+hash。注意要在两端加-∞和+∞的点。 时间复杂度O((n+q)log2n+m)O((n+q)\log^2n+m)(n是数据总长度,m是询问总长度) 但是普通的hash的话需要用long long+除法运算,一个点需要跑6s。所以改成自然溢出,瞬间只需要2s了。。。(要是被卡了怎么办。。) 听说如果用重量平衡树维护的话可以做到O((n+q)log

2016-04-13 17:36:15 904

原创 SDOI2016Round1

Day1T1做了三个半小时,然后T2写的很急判素数写跪了一句话,T3只剩一个20分暴力的时间了。。于是就这么愉快的滚粗了。发现原来我还不会数位DP。。 Day1T3竟然有log3nlog^3n,不过我卡了很久发现似乎确实卡不掉。。最多卡到1.5s左右。。因为线段下传的log与区间长度有关,如果链剖的log大了的话它就会很小;而如果让在每个重链上的长度比较大就会导致链剖的log变得很小。所以很难卡。

2016-04-12 08:49:56 946

原创 [spoj10707]Count on a tree II 解题报告

一开始不知道这是主席出的神题,不小心点开了。。结果做了1天(想了半天+写了半天)。 我是学莫队的时候在某大神的莫队课件里看到这道题的,他说可以用莫队做。(但这真的算莫队么?) 这道题非常奇怪,就是把 HH的项链 搬到了树上,但是这样就变得好难。。我一开始的想法跟po姐姐的做法差不多,就是把dfs序分成大小为S的块,然后就是O(N3S2+MS)O({N^3\over S^2}+MS),这样显然块越

2016-04-06 16:13:16 2511

原创 [JSOI2009]面试的考验 解题报告

考虑将询问区间按右端点排序。考虑x会与它前面产生贡献的点对,显然,如果i<j<x,ai>aj>axi<j<x,a_i>a_j>a_x,那么(i,x)就是无用的。也就是说我们要求位置 < x且权值大于axa_x的点和小于axa_x的点的两个类似笛卡尔树的序列的东西,而这个在随机数据中显然是O(logn)O(\log n)的。 但是问题是怎么求这个东西呢?一个比较脑残的想法是线段树!就是我们存一棵权值

2016-04-05 14:41:55 1152

原创 [Apio2009]CONVENTION会议中心 解题报告

这题并不会做。。 这道题的主要问题是如何求一个区间的最大不相交线段覆盖,思路是可以用倍增来加速贪心。就是说我们本来是求一个区间里最多有多少条线段,我们把它转换成二分/倍增线段数,求其最短的区间是多少。 代码:#include<cstdio>#include<iostream>using namespace std;#include<algorithm>#include<cstring>

2016-04-05 09:56:29 2335

原创 [beijing2013]禁忌 解题报告

这题非常奇怪。。先说做法。 首先我们考虑一个字符串受到的伤害的最大值,实际上我们把这个字符串中能匹配上的子串看作线段,那就成了经典的线段覆盖问题:选若干个不相交的子串,最多能选多少个? 这样就可以贪心了,表现在ac自动机上的话就是如果到了一个节点,它或它在fail树上的祖先有一个节点是一个子串的末尾,那么到它就等价于直接回根。 然后根据期望的线性性质,期望就是每一步到这种节点的概率和。奇怪的精

2016-04-05 08:15:06 701

原创 群论学习笔记

一、群的定义 群定义在二元组(S,⊕\oplus)上,S是一个集合,⊕\oplus是一个运算。要求二元组满足群公理: 1、封闭性:∀x,y∈S,x⊕y∈S\forall x,y \in S,x \oplus y \in S(x,y可以相等) 2、结合律:∀a,b,c∈S,a⊕b⊕c=a⊕(b⊕c)\forall a,b,c \in S,a\oplus b \oplus c=a \oplus (

2016-04-03 16:32:27 4086

原创 [spoj244]Transposing is Even More Fun 解题报告

拿这题学了一下Burnside’s引理。 模型转换:考虑坐标二进制,转置其实就是将其旋转b位,那么求圈数就转换为了求轨道数。 然后就直接裸上Burnside’s引理即可。 但是。。一个巨大的hack是——注意到数据范围:0≤a+b≤1060\le a+b \le 10^6,a+b为0时除(a,b)可能就re了。所以要特判a==0||b==0时的情况,这时答案为0.#include<cstdio

2016-04-01 09:13:54 1015

原创 LCT学习笔记

一、什么是势能分析? 势能分析首先要有一个势能函数F(S),S是一个数据结构集合,是你要分析的所有数据结构的集合,比如说你要分析一坨splay/lct森林的时间复杂度,那么f就是splay/lct森林的势能函数,而不仅仅是一棵splay/lct,虽然它也可以是。 对于每一次操作,我们进行这样的放缩:实际运行代价+势能改变量 ≤G(n)(n=|S|)。G(n)是一个比较良性的函数。那么我们把所有操

2016-03-31 21:44:04 2515

原创 [JLOI2015]装备购买 解题报告

我们考虑对这些向量高斯消元出的上三角矩阵中不全为0的向量。(它们其实就是线性基) 首先,对于那些还存在一个向量中此位不为0的位,我们称它为有效位。则无论我们以何种顺序何种方式消元,它所有线性基的有效位集合必然是相同的。因为我们知道,加减消元并不会改变能生成的集合。所以它线性基的生成集合必然等于原集合的生成集合。而如果两个线性基的有效位集合不同的话,就意味着存在一个向量它能被一个线性基生成而不能被另

2016-03-31 18:18:42 1065 1

原创 [bzoj3202]项链 解题报告

这题wa了无数遍。。先说做法,显然最终答案只与n和不同珠子数量有关系。 所以我们先求不同珠子数量。 如果两个珠子排完序后相同,那么这两个珠子就相同。 考虑珠子里最大的数是i,第二数与i的gcd是d,那么第三个数就必须与d互质。所以答案就是∑i=1a∑d|iϕ(id)ϕ(d)id\sum_{i=1}^a\sum_{d|i}\phi ({i \over d})\phi (d){i \over

2016-03-30 10:42:39 1054

原创 [bzoj3282]tree 解题报告

这题是个lct裸体,但是我down的时候down到了root。。导致跪了,调了两天。。#include<cstdio>#include<iostream>using namespace std;#include<algorithm>#include<cstring>const int N=3e5+5,M=3e5+5;struct LS{ int ch[2],fa; int

2016-03-29 09:47:19 606

原创 [ZJOI2012]网络 解题报告

这题还是非常奇怪的,在考试的时候做了这题的弱化版,去了求最值。 这道题要求维护一坨链,显然是可以直接上splay的,所以我考试的时候直接写了splay,结果因为两个bug调了5个小时。 求最值的话,当然也可以直接上splay。。但是那样的话很麻烦,因为没法在端点加点,所以要很复杂的讨论。直接用lct的话就好很多,但是用lct维护一坨链实在是很奇怪。。 而且这题的数据很难生成,tm拍都没法拍。。

2016-03-27 15:44:39 872

原创 [bzoj4454]C Language Practice 解题报告

这题标算据说是O(n)-O(1)的gcd,然后一篇来自东欧的论文里说n必有拆分n=x1x2x3n=x_1x_2x_3,xix_i要么是质数要么小于等于n√\sqrt n,这个我就完全没懂为什么。。然后打表出(i,j)∀i,j∈[0,⌊n√⌋](i,j) \forall i,j \in [0,\lfloor \sqrt n \rfloor ]若求(n,m),就x1,x2,x3x_1,x_2,x_3依次

2016-03-25 21:37:20 944

原创 [bzoj4025]二分图 解题报告

最近在学lct,拿这道题学了动态图。 法一: 很神的分块(用vector常数太大t了。。) 按时间分块,先将覆盖整个块的边缩起来,然后枚举每一个时间对于块内的边暴力;缩点和暴力都是O(边数目)的。这样的话每个边都会被扫O(T−−√)O(\sqrt T)遍,时间复杂度O(mT−−√)≈6.5∗107O(m\sqrt T)≈6.5*10^7,然后加上我用了vector,常数巨大。。 法二: 很

2016-03-25 17:42:07 1097

原创 [SDOI2014]数表 解题报告

这题并没有做出来。。 设f(i)=∑d|idf(i)=\sum_{d|i}d,考虑按f(i)排序,则对于询问(n,m),(n≤m)(n,m),(n\le m),f(i)会贡献∑⌊nd⌋d=1μ(d)⌊nid⌋⌊mid⌋\sum_{d=1}^{\lfloor {n \over d} \rfloor}\mu (d)\lfloor {n \over id} \rfloor \lfloor {m \ove

2016-03-24 12:16:21 801

原创 关于无向图中环的研究

1、非生成树边必定是返祖边。 证明:设边(u,v),depth(u)≤depth(v)(u,v),depth(u)\le depth(v)假如u不是v的祖先,那么v必然会dfs到u使得u是v的儿子,便与depth(u)≤depth(v)depth(u)\le depth(v)矛盾。 2、对于链\子树\单点询问,动态边双联通分量可以直接等价成生成树中的lca x,把其他点清零。(bzoj2959长

2016-03-23 17:51:04 1158

原创 [cqoi2015]选数 解题报告

本题的性质在于,如果选了两个数,那么这两个数的最大公约数至大为H-L。(所以需要特判只选了一个数的情况) 先来看一下傻逼的做法: 考虑莫比乌斯反演,i*K对答案的贡献是μ(i)∗N⌊HiK⌋−⌊L−1iK⌋\mu (i)*N^{\lfloor {H \over iK}\rfloor - \lfloor {L-1 \over iK} \rfloor},对于所有数相同的情况,我们记一下每个数被多算了

2016-03-23 15:39:26 1230

原创 [bzoj2154]crash的数字表格 解题报告

借这题理解了tangjz的例题。。这题做法与那道题基本相同。 先来看一下最普通的做法:(以下均设n≤mn\le m)∑i=1n∑j=1mlcm(i,j)\sum_{i=1}^n\sum_{j=1}^mlcm(i,j)=∑i=1n∑j=1mij(i,j)=\sum_{i=1}^n\sum_{j=1}^m{ij\over (i,j)}=∑g=1n1g∑i=1⌊ng⌋∑i=1⌊mg⌋ij∑dμ(d)[d

2016-03-23 10:36:19 1065

原创 [Coci2015]Stanovi解题报告

结论:一个合法的分割方案必然导致矩形(a,b)可以被一条直线分成两半,且不存在一个内部小矩形的边界是跨过这条直线的。 这是为什么呢?因为每个小矩形的边界必然是从大矩形的边界中出来的,而如果我们阻止它横穿矩形,就必须要启用一条新的小边。而且这些小边是不能互相阻止的,因为假如互相阻止,那么就形成了一个环,这显然是非法的。所以必然有一条边会横穿大矩形。 ——来自鸟哥的讲解所以我们就可以考虑dp了,设f

2016-03-22 10:39:33 1332

原创 [HNOI2012]与非 解题报告

这题其实主要考察的就是反演律。 not(a and a)=not a not(not a and not b)=a or b not(not a or not b)=a and b 所以实际上,用nand就可以构造出所有位运算。实际上,对于二元位运算真值表的242^4种情况都是可以按统一的方法构造出来的(很多题解说什么手玩。。其实当然并不是),比如说 输入

2016-03-16 08:27:33 1425

原创 [bzoj3481]dzy loves math III 解题报告

显然,(Q mod P,P)=(P,Q),那么我们考虑x,(x,P)=d,d|(P,Q),显然它的加法运算循环节是PdP \over d,所以对于y它有PPd=d{P \over {P \over d}}=d种选择使得xy≡Q(mod P)xy \equiv Q(mod \ P),而这样的x有φ(Pd)φ({P \over d})个。而如果(x,P)不能整除(P,Q),那么显然不存在y使得xy≡Q

2016-03-15 20:12:33 1941 1

原创 [bzoj3462]dzy loves math II 解题报告

这道题的题意是设S=∏ki=1piS=\prod_{i=1}^kp_i,且n=∑ki=1xipi,x≥1n=\sum_{i=1}^kx_ip_i,x \ge 1,求(x1,x2,...,xk)(x_1,x_2,...,x_k)的个数。 对于任一(x1,x2,...,xk)(x_1,x_2,...,x_k),显然其可射于(x1 modSp1,x2 modSp2,...,xk modSp3)(x_1

2016-03-10 20:09:45 1566

原创 [bzoj1406]密码箱 解题报告

大爷的做法:因为x2≡1(modn)x^2≡1(mod n),不妨设n=pq,则p|(x+1)p|(x+1),q|(x−1)q|(x-1),所以枚举大的那个,就是T(d(n)∗n√)≈T(n/10)T(d(n)*\sqrt n)≈T(n/10) 傻逼的做法: 考虑crt,设n=pk,k≥1n=p^k,k≥1,p为质数。 若p>2,  \ 因为(x+1,x-1)≤(x+1)-(x-1)=

2015-09-13 20:49:38 1068

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除