自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(77)
  • 收藏
  • 关注

原创 HDU 3488 Tour 最大完美匹配

有N个城市,M条街道,每条街道是单向的,现在要你设计多条路线覆盖所有的点,每条路线都是一个环,并且每个点仅能被一条路线覆盖且只经过一次因为是圈,所以每个点的入度和出度应该都是1,故将一个点拆成两个点,入度点和出度点,可以想到,网络流的过程就是度数的流,因此可以建图跑最大匹配#include #include #include #include #define rep(i

2016-09-11 23:35:21 262

原创 HDU 2255 奔小康赚大钱 km算法

村里要分房子,有N家老百姓,刚好有N间房子。考虑到每家都要有房住,每家必须分配到一间房子且仅仅能分配到一间房子。另外, 村长为了得到最大利益,让老百姓对房子进行估价因为不同房子的价值是不同的,所以只考虑匹配数是不可以的,要用km算法或者网络流求最大匹配数值#include #include #include #include #define rep(i, j, k)

2016-09-11 23:32:50 382

原创 POJ 2289 Jamie's Contact Groups 二分图多重匹配

给定一个规模为n的名单,要将名单中的人归到m个组中,给出每个人可能的分组号,需要确定一种分配方案,是的最大规模的组最小建图之后,算是一个匈牙利算法的改进,看着kuangbin的模板写的#include#include#include#includeconst int M=2010;int bmap[M][M];bool bmask[M];int nx,ny;int

2016-09-11 23:23:31 522

原创 HDU 3829 Cat VS Dog

有p个小朋友参观动物园,动物园里面有两种动物,分别为猫和狗。规定一个小朋友喜欢猫就讨厌狗,喜欢狗就讨厌猫。现在管理员要移走0一些动物,当然,移走也是有条件的。比如一个小朋友喜欢猫3,讨厌狗4.那么移走狗4,这个小朋友就会非常开心。同样,如果移走猫3,小朋友就会很不高兴。现在问怎么样才能使开心的小朋友的人数最多二分图最大独立集#include #include #incl

2016-09-11 23:16:12 277

原创 HDU 4185 Oil Skimming 匈牙利

用1*2的木板覆盖矩阵中的‘#’,(木板要覆盖的只能是‘#’),问最多能用几个木板覆盖很典型的二分匹配问题,将矩阵中的点分成俩种,下标i+j为奇数和偶数俩种,即把矩阵当成一个黑白棋盘,然后用匈牙利二分匹配#include #include #include #include #include #define rep(i, j, k) for(int i = j

2016-09-11 23:15:00 257

原创 HDU 2819 Swap 最大匹配问题

交换图的某些行或者是某些列(可以都换),使得这个N*N的图对角线上全部都是1.建立二分图,左边表示的是横坐标,右边表示纵坐标,所以范围都是1~N,然后如果a[i][j]是1,那我们就从X的i向Y的j引一条边,然后直接求最大匹配数即可#include #include #include #include #define rep(i, j, k) for(int i

2016-09-11 23:11:16 216

原创 HDU 1281 棋盘游戏 二分图

在一个N*M大小的棋盘中,有K个空位置,(1)在这些空位置上最多能放多少的“车”(一行或一列最多一个)。(2)空位置中,有的位置若不放“车”,就无法保证放尽量多的“车”,这样的格子被称做重要点,求重要点的个数可以看成行与列的二分匹配问题,因为每行每列至多只能放一个棋子#include #include #include #include #define rep(

2016-09-11 23:06:54 247

原创 HDU 4280 Island Transport 网络流

有N个岛屿,M条路线,每条路都连接两个岛屿,并且每条路都有一个最大承载人数,现在想知道从最西边的岛到最东面的岛最多能有多少人过去可以看出是最大流的问题,而且源点汇点也都给出了,可以用dinic解决#include #include #include #include #include #define rep(i, j, k) for(int i = j; i <= k

2016-09-11 21:41:16 213

原创 POJ 1459 Power Network 网络流

给几个发电站,给几个消耗站,再给几个转发点。发电站只发电,消耗站只消耗电,转发点只是转发电,再给各个传送线的传电能力。问你消耗站能获得的最多电是多少很明显电能跟流是类似的,点能从中转站流走可以看出网络流的影子所以就增加一个超级源点,和超级汇点再把所给的发电站都和超级源点相连,把所给的消耗战都和超级汇点相连最后求最大流即可#include #include #incl

2016-09-11 21:36:28 208

原创 POJ 3080 Blue Jeans

求n个长度为60的字符串的最长连续公共子串直接暴力枚举第一个串的每个子串,然后判断是否是后面串的子串即可kmp的简单应用#include #include #include #include #define rep(i, j, k) for(int i = j; i <= k; i++)using namespace std;int nex[100];

2016-09-11 21:04:32 244

原创 POJ 2752 Seek the Name, Seek the Fame

给定一个字符串s,从小到大输出s中既是前缀又是后缀的子串的长度从最后一位开始回溯,若s[next[n-1]] == s[n-1],则子串s[0,1,2,...,next[n-1]]是满足条件的子串。然后判断s[next[next[n-1]]] == s[n-1]是否成立,这样一直回滚,直到next[next[.....next[n-1]]] == -1停止,就可以算出所有符合条件的解

2016-09-11 21:01:33 180

原创 POJ 2406 Power Strings

给定一个字符串,让你求出他最多由几个相同的连续子串连接而成还是用n - next[n]求出循环节,但是有个比较坑的地方就是一定要判断循环节的长度能否整除总长度#include #include #include #include #define rep(i, j, k) for(int i = j; i <= k; i++)#define maxn 1000009

2016-09-11 20:48:28 271

原创 HUST 1010 The Minimum Length

有一个字符串s,一次次的重写s,会得到一个新的字符串sssss.....,现在将这个字符串从中切去一部分得到一个字符串t直接用n - next[n] 求循环节即可#include #include #include #include #define rep(i, j, k) for(int i = j; i <= k; i++)#define maxn 1000009

2016-09-11 20:36:18 298

原创 HDU 1358 Period kmp

一个字符串,从头到某个位置,字符串的前缀最多重复了多少次用next数组做,对于每个位置用i - next[i]求出当前可能的循环长度,然后看能否整除即可#include #include #include #include #define rep(i, j, k) for(int i = j; i <= k; i++)#define maxn 1000009using

2016-09-10 23:27:22 288

原创 hdu 3746 Cyclic Nacklace kmp

给一个字符串,问在首位最少添加多少个字符能使得原字符串循环需要理解next数组,画个图理解就好,用n - next[n]求出循环节然后输出len % p#include #include #include #include #define rep(i, j, k) for(int i = j; i <= k; i++)#define maxn 100009using

2016-09-09 15:41:51 238

原创 hdu2087 剪花布条 kmp

给定一段长布条,然后给一个短布条,问从长的上能减下来几段短的布条还是kmp要注意的是,匹配位置是不能重叠的,所以匹配后,指针需要清零#include #include #include #include #include #include #define rep(i, j, k) for(ll i = j; i <= k; i++)#define ll long lo

2016-09-09 15:34:03 273

原创 hdu 1686 Oulipo kmp

给两个字符串,问第一个在第二个出现了多少次kmp#include #include #include #include #include #include #define rep(i, j, k) for(ll i = j; i <= k; i++)#define ll long long#define maxn 1000009#define inf 0x7fff

2016-09-09 15:28:53 312

原创 hdu 1711 Number Sequence kmp模板

给两个序列,问第二个在第一个出现了多少次kmp模板不解释#include #include #include #include #include #include #define rep(i, j, k) for(ll i = j; i <= k; i++)#define ll long long#define maxn 1000009#define inf 0x

2016-09-09 15:27:09 186

原创 codeforces 197D Infinite Maze dfs

有一个无限的迷宫,由无数个n*m的小单元组成,类似于拼图,给定这个小单元,每个位置是空地或者障碍,再给定起点,问能否从起点走到无穷远的位置刚开始的时候没有想清楚,实际上问题的本质在于,如果一个格子能从他相邻的两个不同的格子进入,那么一定可以走到无穷远的位置。想明白这个就挺好写了,先从起点开始dfs,对于每个没有走到的位置标记是从哪个格子走到他的,然后如果从不同的格子走到了一个已经标

2016-09-09 14:17:17 559

原创 codeforces 186D Mushroom Scientists 不等式

http://codeforces.com/blog/entry/4488 还是直接看cf的题解吧am-gm不等式。。又学到了#include #include using namespace std;int main(){ double a,b,c,S; cin>>S; cin>>a>>b>>c; if(a+b+c!=0) printf

2016-09-08 15:53:44 291

原创 codeforces 166D Shoe Store 二分图 匈牙利算法

题意:有n双鞋,给定其分别的售价和尺码,保证所有鞋的尺码是不用的,有m个人来买鞋,给定其脚的大小以及手里的钱,他可以买跟脚号码相等或者大一号的鞋,同时需要保证手里的钱足够,问最多卖出的营业额是多少因为每双鞋的尺码是不一样的,所以每个人最多有两种购买的可能,一边是顾客,一边是鞋,用map建成二分图,然后用匈牙利求解即可但是为了保证营业额最大,首先要将鞋的售价降序排序,这样可以保证最优

2016-09-08 12:53:38 730

原创 codeforces 200D Programming Language 字符串处理

字符串题,基于cpp模板的声明,先声明了n个函数原型,其中T代替任何数据类型,然后给了m种变量的声明,又给了k 个函数的声明,用的是之前那m个变量,问每个函数分别能匹配多少个函数原型先是字符串处理,然后暴力循环,用变量类型替换变量名,直接判断是否匹配然后统计答案即可#include #include #include #include #include #include #

2016-09-07 20:17:22 347

原创 codeforces 190D Non-Secret Cypher 双指针

给定长度为n的数组a,给定k,问有多少个子数组,其中至少包含着有k个相同的数字双指针经典题目,注意先要离散,然后注意m是1的情况#include #include #include #include #include #define rep(i, j, k) for(int i = j; i <= k; i++)#define maxn 1000009#define

2016-09-07 17:39:34 625

原创 codeforces 200C Football Championship

字符串题,基于cpp模板的声明,先声明了n个函数原型,其中T代替任何数据类型,然后给了m种变量的声明,又给了k 个函数的声明,用的是之前那m个变量,问每个函数分别能匹配多少个函数原型先是字符串处理,然后暴力循环,用变量类型替换变量名,直接判断是否匹配然后统计答案即可#include #include #include #include #include #includ

2016-09-07 11:36:28 454

原创 codeforces 199D Jumping on Walls

有左右两堵墙,高度都是n,每米为一个单位,每个单位是障碍后者是空地,你从左面的第一米开始爬,每秒可以上爬一米,或下爬一米,或者跳到对面墙k米之上,如果爬到n米或者更高就算是登顶,问登顶的最短时间。还有一个限制就是,洪水每秒一米往上,不能到洪水之下最好的办法就是bfs,拓展出每秒所能达到的所有位置,因为bfs是按照时间顺序的,所以之前记录下达到每个格子的最短时间,一定是最优解,这题我用d

2016-09-07 11:34:09 296

原创 codeforces 199C About Bacteria

开始时只有1个 细菌,然后之后的每一秒过去,其细菌数都会变为原来的k 倍加上b,就这样持续增长n秒。问如果最开始有 t 个细菌而不是一个,要增长到原来n秒后的水平(大于等于),至少需要多少秒因为kbn都是小于1e6,所以直接做数字会非常大,但是我们发现其实只要到了某一时刻,从1开始增长的细菌恰好大于等于t,之后的剧情就会完全类似,所以只需要从1开始求,求其刚达到t 的时间即可#

2016-09-07 11:32:46 273

原创 codeforces 197C Lexicographically Maximum Subsequence

给一个只含小写字符的字符串,求其字典序最大的子集并输出先后按字符的字典序降序和其对应下标升序排序,然后贪心输出即可#include #include #include #include #include #include #define rep(i, j, k) for(ll i = j; i <= k; i++)#define ll long long#def

2016-09-07 11:18:55 534

原创 codeforces 195C Try and Catch 字符串处理

字符串题目,题目给出一系列try - catch (xxx, "..."),表示在这个区间中找输出为xxx的部分,如果找到则输出相应的内容,问最终的屏幕输出用类似栈的思想,这样就只需要处理跟结果有关的字符串,然后就是注意空格啥的#include #include #include #include #include #include #define rep(i, j

2016-09-07 11:15:19 344

原创 codeforces 194C Cutting Figure

给一个n乘m的方格,每个格子是障碍或者空地,空地之间是四联通的,问最少在几个空格子放上障碍,可以使得原图不联通、首先自己想想可以得到,答案不是1就是2,然后问题就简化为了检验原图是否存在割点的问题,直接dfs就可以#include using namespace std;typedef double ld;typedef long long int64;typedef

2016-09-07 11:08:26 324

原创 codeforces 192D Demonstration

题意:相当难读的题,政府有n块场地,示威者要申请m天的场地进行示威,场地是m块不同的,政府有k 元,每当示威者进行一次申请,政府可以付出对应的费用拒绝,至少要保证把最坏的 (也就是第n块场地)给示威者,场地好坏从1-n递减,问示威者最好能得到哪块场地直接贪心就行,先判断钱能否拒绝所有的场地,具体看代码#include #include #include #include

2016-09-07 11:03:20 397

原创 codeforces 192C Dynasty Puzzles 字符串动态规划

给定n个字符串,问通过互相连接所能组成最长的字符串长度是多少,连接时必须满足前一个字符串的末尾和后一个字符串的首字符相同,而且最终的得到的字符串的首尾必须相同用f[i][j][k]表示前 i 个字符串首尾字符分别是j,k时的最优解,直接转移就可以。唯一值得注意的就是同样的状态,有可能随着转移,其最优解会发生改变。哦还要用滚动数组#include #include #incl

2016-09-07 11:02:06 219

原创 codeforces 190C STL 字符串处理+栈思想

给一个pair的嵌套声明去掉标点的字符串,然后让你加上标点使得新的字符串符合语法规则整体递归的思想,注意要将pair 作为一个整体 #include #include #include #include #include #include #include #include using namespa

2016-09-07 01:09:08 461

原创 codeforces 189D AlgoRace

有m种车,给定每种车从城市i到城市j的时间话费cost[i][j],有 r 个询问,每次询问从 i 到 j ,最多换 k 次车类型的最小时间花费用cost[i][j][k]表示用第 i 种车,从j 走到 k的最小花费,读入花费矩阵之后,注意用floyd预处理,保证cost[i][j][k]是最优。然后用f[i][j][k] 表示换i 次车从 j 到k 的最优解,然后每次询问直接输出就行

2016-09-07 00:52:18 294

原创 codeforces 189C Permutations

给两个不同的1-n的排列a和b,你每次可以把a数组最后一位的数字插入到任何位置,求从a转换到b的最小操作次数首先将a相对于b排序,然后找第一个 i 满足a[i] > a[i + 1],然后答案就是n - i#include #include #include #include #define rep(i, j, k) for(ll i = j; i <= k; i++)

2016-09-07 00:31:38 339

原创 codeforces 186C Plant

题意:每次把一个相反的(正倒相反)的三角形放到每个三角形中切割原来的图形,问n次切割后有多少个小三角形?公式题,忘记特判0的情况wa了很多次!!!以后一定要注意边界情况#include #include #include #include #include #include #define rep(i, j, k) for(int i = j; i <= k;

2016-09-07 00:27:23 298

原创 codeforces 180F Mathematical Analysis Rocks!

#116 div2给一个长度为n的序列a表示起初第i个人拿着第a[i]个人的作业,再给一个同样长度的序列b表示最终i拿着b[i]的作业,求序列p。序列p是一个1-n的排列,表示每过一天后,i 要把他手中的书给p[i]直接将(ai,bi)二元组排序,然后输出排序后的b数组即可#include #include #include #include #include

2016-09-07 00:19:01 594

原创 codeforces 180E Cubes 双指针经典题

#116 div2一个长度为n的序列,每个格子被涂成了m种颜色中的一种,让你删除不超过k个格子,使得得到的新序列中,同样颜色的子序列长度最大,并输出这个长度首先预处理,用vector把同种颜色的格子的下标记录下来,然后用双指针枚举相同颜色的前后区间,通过下标的加减来计算不同颜色的格子的数目,如果小于等于k那就更新答案#include #include #includ

2016-09-07 00:15:58 420

原创 codeforces 180C Letter

给一个包含大小写字符的字符串,让你每次将一个字符的大小写转换,问最少操作几次才能使得字符串是一些大写字母在前+一些小写字符在后的情况首先预处理出f[i]表示前i个字符中,小写字符的数目,然后o(n)枚举大小写字符的分界线,同时计算并更新答案即可#include #include #include #include #define rep(i, j, k) for(int

2016-09-07 00:10:30 405

原创 codeforces 166E Tetrahedron 数学题

题意:一个蚂蚁在正四面体的一个角,每秒都要移动一下去另外一个点,问n秒后又回到起点的方案数设f[i]是 i 秒后走到abc的方案数,g[i]表示 i 秒后走到d的方案数,所以g[i] = f[i - 1] * 3, f[i] = 2 * f[i-  1] + g[i - 1]#include #include #include #include #define rep(

2016-09-07 00:02:42 346

原创 codeforces 166C Median 中位数

#113 div2题意:给n个数的序列,问最少添加多少个数字,使得序列的中位数是m?暴力排序,首先注意如果序列里没有m那么添加一个m是必须的,然后就是对于每个m,判断其前后分别有多少个数字,通过计算要加几个数字来把当前数字推到中位数位置#include #include #include #include #define rep(i, j, k) for (

2016-09-06 23:48:46 356

空空如也

空空如也

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

TA关注的人

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