自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

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

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

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

原创 三明治

题目描述做法对于每个格子(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 488

原创 电报

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

2017-06-23 17:05:25 713

原创 没有上司的舞会

题目大意动态加子节点的树,每次询问最大独立集大小。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 450

原创 最小生成树

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

2017-06-22 20:39:40 426

原创 字符串游戏

题目大意题解瞎猜想和画图得到一个不好说的结论。 用诡异的单调栈做。#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 599

原创 [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 554

原创 [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 666

原创 [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 671

原创 [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 595

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

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

2017-06-18 22:26:39 665

原创 [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 652 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 611 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 606 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 752 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 642

原创 [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 700

原创 [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 879

原创 [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 1181

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

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

2017-06-16 17:12:32 635

原创 超级绵羊异或

题目大意求 (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 598

原创 [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 455

原创 [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 634

原创 港湾

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

2017-06-15 15:05:17 498

原创 长长的屋子

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

2017-06-15 15:01:22 517

原创 [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 1266

原创 [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 732

原创 [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 534

原创 [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 465

原创 [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 414

原创 [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 442

原创 [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 579

原创 无心行挽

题目描述“What’s left to do when we’ve lost all hope?” “若内心万念俱灰,是否注定无心行挽?” ——来自网易云音乐 不必做好输掉一切的准备。 所以,无畏结局。 在尽头,已经不能再做什么,来挽回。 在尽头,所有的一切都走向简化,没有了重复,没有了错杂,只剩下一片废墟。 就是说,世界曾是一副错杂的无向图,而在尽头,它已成为一个没有环的无向连通图,

2017-06-13 15:23:25 14948

原创 看无可看

题目大意一个序列a[i]。 选择任意k个位置,记和为S。 为答案贡献f(S)。 f是类斐波那契数列,对于i>1它满足f(i)=2*f(i-1)+3*f(i-2)。做法这是个常系数线性齐次递推。 对于本题M(x)=x^2-2x-3。 定义(a,b)=ax+b,那么可以重载乘法(乘法在模M(x)意义下): (a,b)*(c,d)=(bc+ad+2ac,bd+3ac) 对于每个a[i]初始可

2017-06-13 15:13:32 607

原创 说无可说

题目描述“What’s left to say when every word’s been spoken?” “若沉默再无休止,是否已经说无可说?” ——来自网易云音乐 沉默之中,我已不懂言语。 幻觉中,有人在轻声低吟。 那是谁? 我听见,那个人说了N句话,然而好多话都是重复或者类似,比沉默更加让人不堪。 打破不堪,我想。 每句话是由若干个小写字母组成的字符串。 字符串A和B的相

2017-06-13 15:00:10 804

原创 [bzoj4926]皮皮妖的递推,又是一个牛逼题

题目描述YOUSIKI学习了递推,于是他请皮皮妖给他出道题,皮皮妖说: f(1)=1,f(i)=i-f(i-1),求f(n) YOUSIKI看了一眼把它秒切了,于是他要求皮皮妖加大难度,皮皮妖想了想,说: f(1)=1,f(i)=i-f(f(i-1)),求f(n) YOUSIKI看了两眼把它秒切了,于是他要求皮皮妖加大难度,皮皮妖想了想,说: f(1)=1,f(i)=i-f(f(f(i-1

2017-06-11 22:32:14 1845 2

原创 [CF480E]Parking Lot

题目描述http://codeforces.com/contest/480/problem/E做法首先加入所有询问坐标,求出答案。 初始答案很好求,你可以设f[i,j]表示以(i,j)为左下角的最大正方形边长。 那么f[i,j]=min(f[i−1,j],f[i,j+1])(+1)f[i,j]=min(f[i-1,j],f[i,j+1])(+1)后面是否+1要判断右上角。 当然左下角是障碍f[

2017-06-11 16:17:31 833

原创 [CF480D]Parcels

题目描述http://codeforces.com/contest/480/problem/DDP区间DP是可行的,但是是4*n^2*S,亲测过不了。 然后n^2*S的看这个 http://blog.csdn.net/keshuai19940722/article/details/40720965 区间DP:#include<cstdio>#include<algorithm>#defin

2017-06-11 16:11:06 451

原创 [CF480C]Riding in a Lift

题目描述懒得写DP设f[i,j]表示第j次在i。 转移到的是个区间,用前缀和优化即可。#include<cstdio>#include<algorithm>#include<cmath>#define fo(i,a,b) for(i=a;i<=b;i++)using namespace std;const int maxn=5000+10,mo=1000000007;int f[max

2017-06-11 16:08:50 300

原创 [CF480B]Long Jumps

题目描述懒得写模拟答案肯定小于等于2。 用个map,然后xjb讨论。#include<cstdio>#include<algorithm>#include<map>#define fo(i,a,b) for(i=a;i<=b;i++)using namespace std;const int maxn=100000+10;map<int,int> ha,yl;int a[maxn];

2017-06-11 16:07:44 351

原创 [CF480A]Exams

题目描述懒得写贪心排序,a第一关键字b第二关键字。 然后优先选b,不行选a。#include<cstdio>#include<algorithm>#define fo(i,a,b) for(i=a;i<=b;i++)using namespace std;const int maxn=5000+10;struct dong{ int a,b;} a[maxn];int i,j

2017-06-11 16:06:28 267

空空如也

空空如也

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

TA关注的人

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