自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(120)
  • 资源 (2)
  • 收藏
  • 关注

原创 51nod算法马拉松29 图

传送门 因为给出的是一个非A即B的问题,我们可以考虑一下最小割(不知道是不是在乱说。。) 然后我们可以定义对于一个点u,如果在切割后u与源点S相连,那么表示u在A集合,否则u与T相连,在B集合。 然后我们对于给出的无向图中已有的边(u,v),S连向u和v,流量为|u-v|,表示如果u和v任意一个不在A集合,都将付出|u-v|的代价。 然后我们对于给出的无向图中没有的边(u,v),u和v连向T

2017-10-11 00:02:24 435

原创 HDU6200 mustedge mustedge mustedge (2017 ACM/ICPC Asia Regional Shenyang Online)

传送门题目大意给出一张连通图,现在有两种操作: ⋅1 u v\cdot 1\ u\ v:向图中加入一条连接uu和vv的边 ⋅2 u v\cdot 2\ u\ v:询问uu和vv之间的必经边的条数思路首先随便找到一个生成树,每条边的初始权值为1,对于所有非树边(u,v)(u,v),将生成树上uu到vv的路径上的所有边的权值都变为0,那么询问时只需要回答uu到vv的边权和即可,这就很容易了。 然后

2017-09-13 19:24:02 452

原创 2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛 [计蒜客] Our Journey of Dalian Ends

传送门题目大意在一个无向图上,求大连到西安经过上海的最短路,每个点只能走一次。思路考虑费用流,从源点连向大连和西安流量各为1,从上海连向汇点流量为2,通过拆点来限制流量。代码#include <bits/stdc++.h>using namespace std;const int MAXN = 1e5 + 5, INF = 0x3f3f3f3f;struct Edge { int v, w,

2017-09-13 18:43:00 460

原创 HDU6053 TrickGCD(容斥原理)

传送门 考虑枚举所有数的最大公约数g,那么答案大概张成这个样子 ∑g=2∞(−μ(g))∏i=1n⌊aig⌋\sum_{g=2}^{\infty}(- \mu(g))\prod_{i=1}^{n}\lfloor{\frac{a_i}{g}}\rfloor 其中的莫比乌斯函数是用来容斥的,不知道的可以先学习一下。 按照式子直接做是n2n^2的,肯定不能通过。考虑优化。想到⌊aig⌋\lfloo

2017-07-29 14:50:02 478

原创 HDU6046 hash 【2017多校联训第二场B】

传送门 题目大意:给出一个106∗10610^6 * 10^6的矩阵的每一位的计算方式,然后给出一个103∗10310^3*10^3的矩阵,求这个矩阵出现的位置。 题解:对于小矩阵的每一个位置求出这个位置以及之后6363位的值压在一个unsigned long longunsigned\ long\ long里面。因为这个大矩阵是完全随机的,而且2642^{64}远大于101210^{12}所以

2017-07-27 22:16:40 916

原创 BZOJ3545: [ONTAK2010]Peaks(线段树合并)

传送门 这题允许离线的话,就直接线段树合并就可以了。 这个线段树就是一棵值域线段树。枚举一维表示边权的大小,把边权小于枚举值的边的两端所在的线段树合并了,在线段树里查询第k大值就可以了。 如果是加强版的话,可以使用主席树合并来完成。#include <cstdio>#include <algorithm>using namespace std;#define MAXN 500005in

2016-07-28 16:30:18 1617 2

原创 BZOJ4556: [Tjoi2016&Heoi2016]字符串

这道题说难也不难,但是有一个很经典的维护主席树的思想。首先我们先建出一个后缀数组,然后我们按照sa的顺序建一棵以原串下表为权值的主席树,查询(a,b,c,d)(a, b, c, d)的时候,先二分一个长度,找出sa中串[c,c+len][c, c+len]的区间,然后查询区间中是否有下标属于[a,b−len+1][a, b-len+1]。 代码:#include <cstdio>#include

2016-07-06 23:31:21 1081

原创 组合数模任意数

本文内容是求组合数模合数的方法 本方法有局限性,假设求CKN mod PC_N^K \ mod \ P 其中P=Πmi=1Pqii,其中P = \Pi_{i=1}^{m}P_i^{q_i},对于任意i,j∈[1,m],(Pi,Pj)=1对于任意i,j\in[1,m],(P_i, P_j) = 1 若要使用本方法,则PqiiP_i^{q_i}不能太大 具体方法如下具体方法如下 我们知道,一般

2016-06-17 16:55:12 1724

原创 BZOJ3439 KPM的MC密码

传送门 题意:给出n个字符串,对于每一个字符串,输出以他为后缀的串中编号第k小串的编号. 不是很懂为什么网上这道题都是什么主席树,这题明明可以O(N)O(N)来实现啊.只需要Hash一下就好了. 对于每一个串的每一个后缀都存一下这个后缀的所在串的编号,因为所有的串的后缀的个数是字符串的总长的,所以,我们只要用Hash表,就能在现行时间内完成整个题目啦!#include <cstdio>#in

2016-05-18 21:42:12 708

原创 POJ2947 Widget Factory(高斯消元模板题)

传送门 大意:有n个变量,m个等式,求在 模7 意义下的解。 其实就是模板题,消完元之后如果有自由元就是有多个解,如果消完元之后有等式两边不等的情况,就是无解,否则有解。 代码:#include <cstdio>#include <cstring>#include <algorithm>#include <assert.h>using namespace std;#define MA

2016-05-17 19:51:24 561

原创 BZOJ1787: [Ahoi2008]Meet 紧急集合(LCA)

这一道题中,每一次询问的答案就是这三个点,两两的LCA的异或和。至于这样为什么是对的呢? 我们先考虑是否一定有重复的LCA呢? 如果三个点在根节点的不同子树中,那么LCA都是根节点,三个都重复。 如果有两个在一个子树中,那么这两个与另外一个的LCA都是根节点。 如果三个都在一个子树中,可以归纳到以上两种情况。然后考虑为什么是异或和。 如果三个LCA相同,那么一定是这个点无疑,等于异或和

2016-04-11 18:19:29 589

原创 BZOJ2705: [SDOI2012]Longge的问题

给定一个整数N,你需要求出∑gcd(i,N)(1<=i<=N)∑gcd(i, N)(1<=i <=N)。不难想到(连我这个SB都想到了),最后的答案一定和Σd|nd∗(d在n中出现的次数)\Sigma_{d|n}d *(d在n中出现的次数)有关系,所以考虑这个关系。显然我们希望一个数只被计算一次,那么就要考虑到底有几个数和n的gcd等于d。有一个很常用的转换就是同时将n和那些数除以d,问题转化成了有

2016-04-11 17:55:17 715

原创 CQOI2016爆炸记

CQOI2016

2016-04-11 16:02:11 1341 6

原创 Codeforces Zip-line 650D 345Div1D(LIS)

传送门 大意:给出一个序列,求修改一个数过后的最长上升子序列。 思路:可以用主席树在线搞,也可以用树状数组离线搞,明显后者好写得多。我们首先读取所有的询问,然后就把询问绑在给出的位置,然后我们正向做一遍LIS,反向做一遍LDS,然后就可以解决这个问题了。#include <cstdio>#include <algorithm>#include <vector>#define MAXN 40

2016-03-11 14:06:10 1005

原创 BZOJ2888 资源运输(LCT启发式合并)

这道题目太神啦! 我们考虑他的每一次合并操作,为了维护两棵树合并后树的重心,我们只好一个一个的把节点加进去。那么这样一来看上去似乎就是一次操作O(nlogn)O(nlogn),但是我们拥有数据结构的合并利器——启发式合并,那么我们就可以在均摊O(log2n)O(log^2n)的时间内合并一颗树,这题就可以完美的AC啦! 什么,你问怎么维护重心?我们可以记录一个值sb表示子树的大小。怎么维护sb呢

2016-03-10 00:26:17 1134 1

原创 BZOJ1188 [HNOI2007]分裂游戏(SG函数)

传送门 拿到这道题就知道是典型的博弈论,但是却不知道怎么设计它的SG函数。看了解析一类组合游戏这篇论文之后才知道这道题应该怎么做。 这道题需要奇特的模型转换。即把每一个石子当做一堆石子,且原来在第i堆的石子(从0开始标号)的石子个数为n-i-1,这样题目就转化成了每次取一堆石子,并放回两个比这一堆的石子个数少的石堆。这样,我们就可以有序的递推sg函数值了。 即:sg(i)=mex({sg[j]

2016-03-07 01:15:01 586

原创 BZOJ4170 极光(CDQ分治 或 树套树)

传送门 BZOJ上的题目没有题面…… 【样例输入】 3 5 2 4 3 Query 2 2 Modify 1 3 Query 2 2 Modify 1 2 Query 1 1 【样例输出】 2 3 3这道题稍微分析一下就知道是求一个一个点曼哈顿距离小于k的的范围内的点的个数(把下标看做x,把值看做y)。然后我们只需要旋转一下坐标轴就变成了和“Mokia”或“简单题”一样

2016-03-06 15:56:38 1248 1

原创 BZOJ2683 简单题(CDQ分治)

传送门 之前听别人说CDQ分治不难学,今天才知道果真如此。之前一直为自己想不到CDQ的方法二很不爽,今天终于是想出来了一道了,太弱…… cdq分治主要就是把整段区间分成两半,然后用左区间的值去更新右区间的答案,每次把区间折半。对于本题来说时间复杂度T(N)=T(N/2)+O(NlogN)T(N) = T(N/2)+O(NlogN) T(N)=O(Nlog2N)T(N) = O(Nlog^2N)

2016-03-06 01:13:02 1265

原创 51NOD算法马拉松11 B君的竞技场

传送门 这题我在比赛的时候竟然没有想出来,真是…… 这道题我们可以想一想怎么搞定获胜的概率p。 我们发现再怎么这个p都是搞不了的。所以我们可以积一下分,然后就可以不用去管p了。我们要做的就是求出一个关于p的多项式。 我们又发现,对于整体的期望,并不好直接表示出来(是可以表示出来的)。所以我们就想一想怎么去递推吧。 设f(i,j)f(i, j)表示赢了i场,输了j场的概率(一个关于p的多项式

2016-03-01 14:38:22 970 1

原创 UOJ#34 FFT模板题

写完上一道题才意识到自己没有在博客里丢过FFT的模板…… 这道题就是裸的多项式乘法,可以FFT,可以NTT,也可以用Karasuba(好像有人这么写没有T),也可以各种其他分治乘法乱搞…… 所以我就直接给板子了#include <cstdio>#include <cmath>#define MAXN 300005#define DB double#define pi 3.14159265

2016-02-29 00:20:40 755

原创 BNUOJ 51279[组队活动 Large](cdq分治+FFT)

传送门 大意:ACM校队一共有n名队员,从1到n标号,现在n名队员要组成若干支队伍,每支队伍至多有m名队员,求一共有多少种不同的组队方案。两个组队方案被视为不同的,当且仅当存在至少一名队员在两种方案中有不同的队友。 这年头真是……分治FFT都开始烂大街了…… 我们来推一推吧 这显然是一个1d1d的DP,用f[i]f[i]表示ii名队员的方案数 f[i]=∑j=0i−1f[i−j−1]∗Cj

2016-02-29 00:15:19 1213

原创 HDU5361 In Touch(线段树 + 最短路)

传送门 恰逢才做过VFK的A+B Problem,发现这道题也可以那样搞。区间连边的时候,我们就可以给那个区间在线段树对应的标号上连边。 线段树也可以不建出来,直接当做一个标号的合集,不占用内存,只用模拟在线段树上找区间的过程就可以了。 如果不清楚的话,可以看下A+B Problem的题解里面配有插图。 连好边之后就可以直接跑DijkstraDijkstra。 分析一下时间复杂度,线段树节

2016-02-24 12:56:26 1053

原创 BZOJ3218 UOJ#77 A+B Problem(最小割+主席树)

竟然在BZOJ上拿了Rank1太给力啦。传送门(BZOJ)传送门(UOJ)说说这道题目吧:首先是说说这个构图吧。因为有选择关系,我们很容易想到最小割。Ans = sigma(i为白色){w[i]} + sigma(i为黑色){b[i]} - sigma(奇怪的i){p[i]} 转化一下就变成了sigma(所有的i){w[i]+b[i]} - sigma(i为白色){b[i]

2016-02-24 00:34:47 3076

原创 BZOJ4293 [PA2015]Siano(线段树)

传送门 这Seg确实不好写,不过因为它与ai的相对顺序无关,所以,我们在对ai排序之后,就可做了。维护一个区间最大值,维护一个和,维护一个区间赋值的懒标记,再维护一个时间变化的标记就可以了。 因为不论怎样在排序过后的序列里面右边的一定不小于左边的,所以我们可以在线段树里面二分来找到每一次操作的开始位置,然后就可以区间修改了。#include<cstdio>#include<algorithm>

2016-02-20 11:11:19 1083 3

原创 BZOJ3329 Xorequ(数位DP)

题目大意:x xor 2x=3xx \ xor\ 2x=3x(与x xor 3x=2xx\ xor\ 3x=2x等价)求满足等式且小于nn的x的个数,与满足等式小于2n2^n的数的个数。 因为异或是不进位的二进制加法,那么因为结果正好和加法相同,那么说明x在二进制上没有相邻的1。那么简单的数位DP就可以求出满足这个的答案了。 再看subtask2,根据打表找规律可得,这就是斐波那契数列的第n

2016-02-18 00:58:35 1642

原创 BZOJ3175 Tjoi2013 攻击装置(二分图匹配)

传送门Description给定一个01矩阵,其中你可以在0的位置放置攻击装置。每一个攻击装置(x,y)都可以按照“日”字攻击其周围的 8个位置(x-1,y-2),(x-2,y-1),(x+1,y-2),(x+2,y-1),(x-1,y+2),(x-2,y+1), (x+1,y+2),(x+2,y+1) 求在装置互不攻击的情况下,最多可以放置多少个装置。Input第一行一个整数N,表示矩阵大小为N

2016-02-14 20:27:47 753

原创 BZOJ3174 Tjoi2013 拯救小矮人(贪心+DP)

传送门Description一群小矮人掉进了一个很深的陷阱里,由于太矮爬不上来,于是他们决定搭一个人梯。即:一个小矮人站在另一小矮人的 肩膀上,知道最顶端的小矮人伸直胳膊可以碰到陷阱口。对于每一个小矮人,我们知道他从脚到肩膀的高度Ai,并且他的胳膊长度为Bi。陷阱深度为H。如果我 们利用矮人1,矮人2,矮人3,。。。矮人k搭一个梯子,满足A1+A2+A3+….+Ak+Bk>=H,那么矮人k就可以离开

2016-02-14 20:24:40 785

原创 BZOJ3173 TJOI2013最长上升子序列(Treap+ZKW线段树)

传送门Description给定一个序列,初始为空。现在我们将1到N的数字插入到序列中,每次将一个数字插入到一个特定的位置。每插入一个数字,我们都想知道此时最长上升子序列长度是多少?Input第一行一个整数N,表示我们要将1到N插入序列中,接下是N个数字,第k个数字Xk,表示我们将k插入到位置Xk(0<=Xk<=k-1,1<=k<=N)OutputN行,第i行表示i插入Xi位置后序列的最长上升子序列

2016-02-14 20:13:35 695

原创 BZOJ3172 TJOI2013 单词

传送门Description某人读论文,一篇论文是由许多单词组成。但他发现一个单词会在论文中出现很多次,现在想知道每个单词分别在论文中出现多少次。Input第一个一个整数N,表示有多少个单词,接下来N行每行一个单词。每个单词由小写字母组成,N<=200,单词长度不超过10^6Output输出N个整数,第i行的数字表示第i个单词在文章中出现了多少次。Sample Input3 a aa aaaS

2016-02-14 20:08:25 741

原创 BZOJ3171 Tjoi2013 循环格

传送门Description一个循环格就是一个矩阵,其中所有元素为箭头,指向相邻四个格子。每个元素有一个坐标(行,列),其中左上角元素坐标为(0,0)。给定一个起始位置(r,c) ,你可以沿着箭头防线在格子间行走。即如果(r,c)是一个左箭头,那么走到(r,c-1);如果是右箭头那么走到(r,c+1);如果是上箭头那么走到(r-1,c);如果是下箭头那么走到(r+1,c);每一行和每一列都是循环的

2016-02-14 20:00:33 669

原创 BZOJ1008: [HNOI2008]越狱

传送门 监狱有连续编号为1…N的N个房间,每个房间关押一个犯人,有M种宗教,每个犯人可能信仰其中一种。如果相邻房间的犯人的宗教相同,就可能发生越狱,求有多少种状态可能发生越狱。思路:显然这是一道卡没学过高中数学的初中神犇的题目……因为只有第一个人随便是什么,其他的人都要和前一个人不相同,那么不会发生越狱的可能种数就是M∗(M−1)n−1M*(M-1)^{n-1},那么答案就是MN−M∗(M−1)n

2016-02-04 13:56:24 519

原创 BZOJ3932: [CQOI2015]任务查询系统

传送门 题目大意:在[s,e](闭区间)上加入一个数字k(就相当于在s时刻放入,e+1时刻取出)。支持询问在t时刻时的第k大数。想一想就可以知道主席树能水过这道题。/************************************************************** Problem: 3932 User: geng4512 Language: C++

2016-02-04 13:46:09 986

原创 HDU1695 GCD(莫比乌斯反演)

传送门 看了1个多小时,终于懂了一点了 题目大意:给n,m,k.求gcd(x,y) = k(1<=x<=n, 1<=y<=m)的个数 思路:令F(i)表示i|gcd(x,y)的(x,y)的对数,显然F(x)=[nx]∗[mx]F(x)=[\frac{n}{x}]*[\frac{m}{x}]。 设f(x)为gcd(x,y)=x的对数。 因为F(x)=∑i|xf(i)F(x)=\sum_{i|

2016-02-02 13:41:37 1103

原创 Winter(Sleep)Camp2016酱油鸡

这次参加WC感觉就是打酱油啊 出发去绵阳,到了之后熟悉了一下校园,听了Azui[http://blog.csdn.net/u011542204/]大神讲CDQ分治 听了Picks讲课,我感觉对冬令营失去了信心,这是什么玩意?这个上午就听懂了裸的FFT和Karatsuba分治乘法。其他的什么的Cantor、什么多项式XX,都只有坐飞机了。下午茹意中的自动机,那个正规语言听的还津津有味,后面走了一会

2016-02-02 09:27:35 2058

原创 Burnside引理和Polya定理

首先谈一下我对置换群的理解(PS:写给没学过抽象代数的我们……):置换群就是一些置换的集合,例如 (12233144)\begin{pmatrix} 1 & 2 & 3 & 4\\ 2 & 3 & 1 & 4 \end{pmatrix} 是一个置换,但不是一个置换群,置换只与每列的相对字符有关,与列顺序天关,比如(12233144)=(23123144)\begin{gather}\begin

2016-01-23 22:18:26 8333 3

原创 Ural1960 Palindromes and Super Abilities

嗯,这道题是回文树的裸题。 简单讲一下回文树。 也可以看看这个回文树笔记(转自quack_quack)struct PAM { int a[MAXN][MAXC], l[MAXN], fa[MAXN], sz, last; /*a就是next数组,一个节点的next[C]节点非空,表示着存在一个回文串在当前节点表示的回文串两边加上各一个字符C。 l表示长度len,在初始化

2016-01-18 21:19:44 616

原创 BZOJ3140 HNOI2013消毒

传送门 这道题有毒 我在做的时候就在想有没有一个什么“三分图”的匹配?(脑洞打开) 发现想不出来了,有观察到a,b,c中最小的最大只有17(a∗b∗c==5000)=>(min(a,b,c)<=50001/3)(a*b*c == 5000) =>(min(a, b, c) <={5000}^{1/3})就又写起了搜索……(因为每一次肯定可以通过选取1*x*y的一块矩形,最终得到最优解) 最

2016-01-16 00:58:55 966

原创 BZOJ3139 HNOI2013比赛 (搜索)

传送门 拿到这道题我开始想了想有没有什么递推关系?然后想了想状压DP? 均无果…… 开始写搜索,练习赛是只拿到了70分(暴力+剪枝),对每一场比赛搜索……看题解才发现是记忆化搜索。在搜索的时候可以将当前状态Hash下来。应为每个队最多只打9场比赛,所以最大得分27分,只有10个队伍,用28进制int64能装下。 而且不应该一场比赛一场比赛的搜,这样就不好利用之前的状态(因为这道题里每个人是等

2016-01-16 00:46:50 872

原创 Codeforces GoodBye2015 New Year and Three Musketeers Codeforces 611E(贪心)

这道题在比赛的时候一直在想二分答案+贪心判定,结果一直在WA on pretest10……第二天起来一想,发现是有问题的……因为在判定的时候,我是把每一次操作隔离开来看的,但他要求是同时干某件事。

2016-01-02 12:00:41 1054

转载 回文树笔记(转自quack_quack)

1.回文树的next[charset]指针: b->aba 那么就这样表示:b.next[a]=aba 当然树里面肯定不能存字符串,于是就直接用下标标号代替了 2.回文树的fail指针: 跟ac自动机类似,fail指针指向当前节点的最大回文后缀 没有就指向根 3.回文树的根 有2个根,一个单根就是往下连回文串长度为奇数的节点,本身长度为-1 还有个双根就是往下连回

2015-12-24 22:44:51 1187

重庆NOIP2012选手试题

这是重庆NOIP2012选手试题,喜欢的可以下下来

2012-11-24

空空如也

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

TA关注的人

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