自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

不来也不去的一只失忆蝴蝶

曾迷途才怕追不上满街赶路人

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

原创 归并排序

题目大意给一个长度为2的次幂的排列做归并排序,在区间长度为2时比较器会变成随机返回值。 多次操作,每次要么交换两个位置,要么询问归并排序后第x个位置等于排序前第y个位置的概率。做法容易发现,如果x#include<cstdio>#include<algorithm>#define fo(i,a,b) for(i=a;i<=b;i++)#define fd(i,a,b) for(i=a;i>=

2017-06-28 20:57:30 448

原创 摧毁图状树

题目大意Q次询问,每次给一个k。 将树用尽量少的长度不超过k的祖先后代链覆盖,使得每个点至少覆盖一次。贪心对偶成选择尽量多的点,使得任意长度不超过k的祖先后代链上至多一个点被选择。 这样转化则贪心很显然。尽量选深度大的点。 如果有t个叶子,选取的点至多为t+(n-t)/k。 因为叶子一定会被选择,同样删去所有被选择的点后,每个联通块大小不会小于k(否则一定在原来的树中存在长度不超过k的祖先后

2017-06-28 19:24:21 716

原创 [bzoj4849]Mole Tunnels

题目描述鼹鼠们在底下开凿了n个洞,由n-1条隧道连接,对于任意的i>1,第i个洞都会和第i/2(取下整)个洞间有一条隧 道,第i个洞内还有ci个食物能供最多ci只鼹鼠吃。一共有m只鼹鼠,第i只鼹鼠住在第pi个洞内,一天早晨,前k只 鼹鼠醒来了,而后n-k只鼹鼠均在睡觉,前k只鼹鼠就开始觅食,最终他们都会到达某一个洞,使得所有洞的ci均大 于等于该洞内醒着的鼹鼠个数,而且要求鼹鼠行动路径总长度最

2017-06-26 16:47:09 741

原创 [JZOJ100020]B

题目大意有多少n*n的01矩阵每行每列恰有2个1。推式子设a(n)表示答案。 每次新加一行一列,你找到一行,把最后一行和它换,并在最后一列这行的位置写上1。 然后再找一行,在最后一列这写1,并找到之前一个位置的1把它翻到只有一个1的那行。 这样是n*(n-1)*a(n-1)。 你发现有种情况翻不上去,于是你枚举哪里翻不上,然后去掉那两列,这样是n*(n-1)^2*a(n-2)。#includ

2017-06-26 16:43:33 409

原创 [JZOJ100019]A

题目大意求一颗树有多少条不同的路径,使得路径长度>1且不存在j!=k满足j是k倍数。瞎做有n log n个限制某两个点不能出现在一条路径中。 可以转化成某个区间的起点不能以某个区间为终点。 然后扫描线用线段树维护。 这个是既包含插入又包含删除的覆盖问题。 因为操作具体对称性所以可以标记可持久化。#include<cstdio>#include<algorithm>#include<cma

2017-06-26 16:08:40 435

原创 [hihocoder1527]快速乘法

题目描述在写代码时,我们经常要用到类似 x × a 这样的语句( a 是常数)。众所周知,计算机进行乘法运算是非常慢的,所以我们需要用一些加法、减法和左移的组合来实现乘一个常数这个操作。具体来讲, 我们要把 x × a 替换成:(x<<a0)op1(x<<a1)op2(x<<a2)...opn(x<<an)(x<<a0) op1 (x<<a1) op2 (x<<a2) ... opn (x<<an)

2017-06-26 15:58:32 812

原创 [hihocoder1526]序列的值

题目描述给定一个长度为 n 的序列 a[1..n],定义函数 f(b[1..m]) 的值为在 [0,m-1] 内满足如下条件的 i 的数目:b 中前 i 个数异或起来的值小于 b 中前 i +1个数异或起来的值。对于 a[1..n] 的每个子序列 b[1..m],求f(b[1..m])之和。做法显然只需要对每个位置i求出前面多少子序列异或和比再异或它之后小即可,后面部分乘一个2的次幂。 假如a<b

2017-06-26 15:48:20 594

原创 [51nod1355]斐波那契的最小公倍数

题目大意求n个斐波那契数的最小公倍数。做法首先斐波那契数列有性质(fn,fm)=f(n,m)(f_n,f_m)=f_{(n,m)} 具体证明不证了,烂大街的性质了。 构造数列g满足 fn=Πd|ngdf_n=\Pi_{d|n}g_d 可以用莫比乌斯反演求出g gn=Πd|nfμ(nd)dg_n=\Pi_{d|n}f_d^{\mu(\frac{n}{d})} 接下来我们知道求lcm可以转化

2017-06-25 22:33:29 1051

原创 回转寿司

题目描述分块你考虑有一堆人,价格为x的进去了出来会变成啥样。 那么肯定是找到这堆人所持价格的最大值y,如果x>y,出来的还是y,否则x会变成某个人手里的,然后出来的是y。 我们考虑分块,每个块维护一个数堆。 如果x要经过一个块,可以丢进数堆,再取出一个最大值。然后还要给这个块打上一个标记。 但是对于零散的不是很好做,即重构块,我们如何快速得到每个位置经过一系列标记后的值? 注意这个问题具有

2017-06-25 20:44:18 638

原创 三明治

题目描述做法对于每个格子(i,j)设L(i,j)表示先吃靠左边界的格子至少要吃多少格子,R意义类似。 然后你发现L(i,j)>=L(i,j-1)。 于是一行一行做,每行才清空一次标记数组。#include <cstdio>#include <algorithm>#define fo(i,a,b) for(i=a;i<=b;i++)#define fd(i,a,b) for(i=a;i>=b

2017-06-25 20:35:18 532

原创 电报

题目大意n个点,每个点出度均为1的有向图。 你可以将j->k改成j->l,代价为c[j]。 求最小代价,使得有向图变成一个环。贪心我们把问题描述成删去若干条边,删除每条边都有代价,最小代价使得每个联通块都是一条链(这样才能连成环)。 假如一个点有k个入度,至少k-1个要被删掉。 对于树的情况贪心保留最大代价的入边。 环上至少一条边要删去,再讨论一下即可。 注意特判初始所有点连成一个环的情

2017-06-23 17:05:25 754

原创 没有上司的舞会

题目大意动态加子节点的树,每次询问最大独立集大小。DP给平衡树每个点x维护一个f[x,0/1,0/1]表示以x为根的这个平衡树区间在原树上对应的部分(包括连出去的虚子树)的最大独立集是多少,且这个平衡树区间的左端和右端选或不选。 然后就很好做了。#include<cstdio>#include<algorithm>#define fo(i,a,b) for(i=a;i<=b;i++)usin

2017-06-22 20:43:26 464

原创 最小生成树

题目描述结论下面的m均指非树边有m条。 非树边的权值肯定赋值为路径上的最大值(根据环切原理这是下界)。 考虑按权值从小到大加入,每加入一条边就会连接两棵树。 那么一条非树边如果左端在其中一颗树中,右端在另一颗树中,则其权值和该树边一致。 由于是按照权值从小到大加入的,我们希望每次有尽量多的非树边权值确定。 那么容易发现,第i次一定会连接一个大小为i的树和一个单个的节点,也就是产生i-1条非

2017-06-22 20:39:40 468

原创 字符串游戏

题目大意题解瞎猜想和画图得到一个不好说的结论。 用诡异的单调栈做。#include<cstdio>#include<algorithm>#define fo(i,a,b) for(i=a;i<=b;i++)#define fd(i,a,b) for(i=a;i>=b;i--)using namespace std;const int maxn=1000000+10;char a[max

2017-06-22 20:16:12 617

原创 [LOJ6087]毒瘤题

题目大意找到k个出现次数为奇数的数,保证只有k个数出现奇数次。做法k=1全部异或起来。 k=2保存一个c[i]表示第i位上是1的数的异或和。 得到a^b,找到最高位k,那么c[k]是其中一个,然后能得到另一个。#include<cstdio>#include<algorithm>#define fo(i,a,b) for(i=a;i<=b;i++)using namespace std;

2017-06-22 20:13:01 594

原创 [LibreOJ β Round]ZQC的手办

题目大意区间对一个数取max。 区间求最小的x个比k小的数。线段树第一个操作很好搞。 第二个操作有个很显然的常数大做法。 实际上可以用堆把这个区间的笛卡尔树按优先级广搜。#include<cstdio>#include<algorithm>#include<queue>#define fo(i,a,b) for(i=a;i<=b;i++)using namespace std;con

2017-06-19 21:08:11 721

原创 [LibreOJ β Round]ZQC的课堂

题目描述https://www.loj.ac/problem/503题解x和y是可以分开考虑的。 设si表示某维坐标的前缀和。 要求统计多少i满足si*si-1<=0(此时会有正负交替)。 我们发现这个条件等价于max(si,si-1)>=0且min(si,si-1)<=0。 这样两个限制依然不好统计。 改成用n减去不满足条件的。 1、max(si,si-1)<=0 2、min(si,

2017-06-19 16:36:53 726

原创 [51nos1971]驴蛋蛋与老孙与微分式

题目描述http://www.51nod.com/contest/problem.html#!problemId=1971oeis这是一道oeis题,把答案打表,差分丢oeis,可以得到一个东西。 接下来用FFT预处理伯努利数,用公式做。#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#in

2017-06-18 22:37:59 654

原创 [51nod1786]数据流中的算法 - 众数

题目描述数据流统计功能上线后,为51nod提升用户体验做出了很大的贡献。但是新问题随之而来,夹克老爷还想知道在一个窗口内,访问次数最多用户(即窗口内的众数)。如果有多个众数,取用户ID最小的一个。(窗口的意思是一个固定长度的区间!)(因为数据流是实时的、在线的,所以不允许使用离线算法^_^)做法一个map+一个set#include<cstdio>#include<algorithm>#incl

2017-06-18 22:26:39 712

原创 [CodeM初赛A轮]E

题解大小点分治。 出现次数大于阈值的,处理前缀和,然后暴力枚举一个询问判断。 出现次数小于阈值的,跑莫队,维护每个数出现次数,以及每种出现次数的数的个数,然后询问可以暴力枚举出现次数。#include<cstdio>#include<algorithm>#define fo(i,a,b) for(i=a;i<=b;i++)using namespace std;const int max

2017-06-18 22:20:41 692 2

原创 [CodeM初赛A轮]D

题解用sqrt(a)/log a的时间分解质因数。 枚举一个质因数x,所有x的倍数节点打标记。 对于每一个被标记的联通块求直径。#include<cstdio>#include<algorithm>#include<map>#define fo(i,a,b) for(i=a;i<=b;i++)using namespace std;typedef long long ll;const

2017-06-18 22:18:59 626 3

原创 [CodeM初赛A轮]C

题解T在max和min之间无解。 考虑二分答案,然后判定很简单。 要注意一些坑点,比如解出来的体积小于0,以及没有进行任何二分判定等。 我的方法没过样例,但是过了这题……#include<cstdio>#include<algorithm>#include<cmath>#define fo(i,a,b) for(i=a;i<=b;i++)using namespace std;typ

2017-06-18 22:17:02 618 2

原创 [CodeM初赛A轮]B

题解设dp f[i1,i2,j1,j2]表示选出A串的[i1,i2]以及B串的[j1,j2]能否组成回文串。 dp转移显然。 但是边界比较麻烦。 考虑先做dp fa[i,j]和fb[i,j]分表表示A串的[i,j]和B串的[i,j]是不是回文串,然后瞎枚举弄出一些f的初值。 回文串完全在一个串中也要判断。 有点坑QAQ 详见代码#include<cstdio>#include<cstr

2017-06-18 22:15:17 788 1

原创 [CodeM初赛A轮]A

题解看懂题意题。#include<cstdio>#include<algorithm>#include<cmath>#define fo(i,a,b) for(i=a;i<=b;i++)#define fd(i,a,b) for(i=a;i>=b;i--)using namespace std;typedef double db;const int maxn=1000+10;db c

2017-06-18 22:12:38 655

原创 [LibreOJ β Round]ZQC的游戏

题目描述见LOJ。网络流建图裸跑。判断是否满流。 简单题。#include<cstdio>#include<algorithm>#include<cmath>#define fo(i,a,b) for(i=a;i<=b;i++)using namespace std;typedef double db;const int maxn=1000+10,maxm=500000+10,inf=

2017-06-17 15:34:01 711

原创 [LibreOJ β Round]ZQC的树列

题目描述见LOJ。做法显然对于每一段数字,要么可选要么必选。 假如有t个,若必选,则方案为2^t-1,否则为2^t。 因此只有1、2、3就可以构造所有情况。 尝试把n拆分成2^t-1以及2^t的乘积。 这个用dfs即可。#include<cstdio>#include<algorithm>#include<cmath>#define fo(i,a,b) for(i=a;i<=b;i++

2017-06-17 15:31:55 945

原创 [LibreOJ β Round]ZQC的拼图

题目描述ZQC 和他的妹子在玩拼图。她们有 n (1≤n≤100) n \ (1 \leq n \leq 100) n (1≤n≤100) 块神奇的拼图,还有一块拼图板。拼图板是一个 m×m (1≤m≤100) m \times m \ (1 \leq m \leq 100) m×m (1≤m≤100) 的正方形网格,每格边长为 1,如图所示。每块拼图都是直角三角形,正面为白色,反面为黑色,拼图放在

2017-06-17 15:29:29 1233

原创 [bzoj4815][CQOI2017]小Q的表格

题目描述小Q是个程序员。 作为一个年轻的程序员,小Q总是被老C欺负,老C经常把一些麻烦的任务交给小Q来处理。每当小Q不知道如何解决 时,就只好向你求助。为了完成任务,小Q需要列一个表格,表格有无穷多行,无穷多列,行和列都从1开始标号。 为了完成任务,表格里面每个格子都填了一个整数,为了方便描述,小Q把第a行第b列的整数记为f(a,b),为了完成 任务,这个表格要满足一些条件:(1)对任意的正

2017-06-16 17:12:32 653

原创 超级绵羊异或

题目大意求 (a) xor (a + b) xor (a + b * 2) xor … xor (a + b * (n - 1))。题解考虑计算答案第k位是否为1。 对于一个a+bi,判断它第k位是否为1。 那么就是看⌊a+bi2k⌋\lfloor\frac{a+bi}{2^k}\rfloor是否是奇数。 然后发现我们可以写出这样一个式子,判断它的奇偶性。 ∑n−1i=0⌊a+bi2k⌋\s

2017-06-16 16:02:20 618

原创 [JZOJ5714]矩阵

题目大意求01网格图多少面积>=k的矩阵全0。做法预处理每个点往上延伸的长度up[i,j]。 对于每一行,我们顺序扫并维护单调栈。 弹出元素时考虑贡献。 假如弹出第k列,做到第l列,栈中上一个位置在第j列。 则得到一个高为up[i,k],长为l-j-1的矩形。 在这个矩形里求面积>=k的全0子矩阵个数(下边界必须是i)。 为了不计重,这个子矩阵的高要>max(up[i,j],up[i,l

2017-06-16 15:59:42 492

原创 [CF600E]Lomsat gelral

题目大意统计每个子树里出现次数最多的颜色编号和。dsu on tree裸题吧。#include<cstdio>#include<algorithm>#define fo(i,a,b) for(i=a;i<=b;i++)using namespace std;typedef long long ll;const int maxn=100000+10;int h[maxn],go[maxn*

2017-06-15 16:07:44 670

原创 港湾

题目描述放假啦! 小林和康娜来到了港口,看到有货船正在卸货。 港口十分狭窄,只有两个卸货区可以使用。每个卸货区上面可以堆积任意多个箱子。 每卸下来一个箱子,工作人员都会把这个箱子放在某个卸货区的顶端。之后,当车辆来运走这个箱子的时候,也必须保证这个箱子在某个卸货区的顶端。 港口今天一共运来了N个箱子,第i个箱子在时刻Ai被卸货,在时刻Bi被取走。康娜发现,每个箱子被取走时,都恰好位于所在卸货

2017-06-15 15:05:17 529

原创 长长的屋子

题目描述小林要搬家啦! 小林把家搬到了一个长长的屋子里,屋子里一共有N个房间连成一排,从左到右依次标号为1…N。每两个相邻的房间之间都有一扇门,门上有一把锁,第i个房间和第i+1个房间之间的锁类型为Ci。为了防止康娜胡闹,小林把钥匙都藏在了房间里,第i个房间里放了Bi把钥匙,钥匙的种类分别为Ai[1],Ai[2],…,Ai[Bi]。注意,每把钥匙只能打开对应类型的锁,同一种类型可能存在多把钥匙和多

2017-06-15 15:01:22 533

原创 [CF538F]A Heap of Heaps

题目大意懒得写做法从0开始标号。 注意i是父亲是(i-1)/k 因此可以分块 对一段产生的影响可以在数组上打tag#include<cstdio>#include<algorithm>#define fo(i,a,b) for(i=a;i<=b;i++)#define fd(i,a,b) for(i=a;i>=b;i--)using namespace std;const int m

2017-06-15 14:53:56 1315

原创 [CF538E]Demiurges Play Again

题目大意懒得写题解同51nod树上的博弈#include<cstdio>#include<algorithm>#define fo(i,a,b) for(i=a;i<=b;i++)using namespace std;const int maxn=200000+10;int f[maxn],d[maxn],h[maxn],go[maxn],next[maxn];int i,j,k,l,

2017-06-15 14:52:39 784

原创 [CF538D]Weird Chess

题目大意懒得写做法暴力判断哪些走法要封死。 剩余走法都可以当做有效,判断每个应该攻击的位置是否被攻击了。#include<cstdio>#include<algorithm>#define fo(i,a,b) for(i=a;i<=b;i++)using namespace std;const int maxn=100+10,mx=50;bool pd[maxn][maxn],bz[ma

2017-06-15 14:51:56 593

原创 [CF538C]Tourist's Notes

题目大意懒得写做法每一段内求个最高,列不等式。#include<cstdio>#include<algorithm>#define fo(i,a,b) for(i=a;i<=b;i++)using namespace std;const int maxn=100000+10;int d[maxn],h[maxn];int i,j,k,l,t,n,m,x,y,ans;bool czy;

2017-06-15 14:50:04 485

原创 [CF538B]Quasi Binary

题目大意懒得写做法这样的数只有2^6个。 因此暴力DP#include<cstdio>#include<algorithm>#include<cstring>#define fo(i,a,b) for(i=a;i<=b;i++)#define fd(i,a,b) for(i=a;i>=b;i--)using namespace std;const int maxn=1000000+10

2017-06-15 14:48:55 451

原创 [CF538A]Cutting Banner

题目大意懒得写做法枚举分割位置暴力判#include<cstdio>#include<algorithm>#include<cstring>#define fo(i,a,b) for(i=a;i<=b;i++)#define fd(i,a,b) for(i=a;i>=b;i--)using namespace std;const int maxn=100+10;char s[maxn]

2017-06-15 14:47:42 460

原创 [hdu5181]numbers

题目大意把1~n顺序入栈,你可以决定出栈序列。 有m组关系,每组关系限制j要在k之前出栈。DP首先有个坑点请先判掉,就是存在限制j=k就输出0。。 我们考虑入栈出栈序列。 1入栈,写一个1。 2入栈,写一个2。 3入栈,写一个3。 3出栈,写一个3。 类似这样可以写出一个进出栈序列。 如果我们在最前和最后都加1个0,还可以看做是一个括号序列,也就是一颗以0为根节点的树。 这颗树有以

2017-06-13 17:42:06 617

空空如也

空空如也

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

TA关注的人

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