自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 TopCoder 603 div1 & div2

div2250pts MiddleCode题意:s串长度为奇数时,将中间字符取掉并添加到t末尾;长度为偶数时,将中间两个较小的字符取掉并添加到末尾。分析:直接做,学习了一下substr(s, pos, len)返回s中从pos开始的长度为len的字串。代码:class MiddleCode {public: void Remove(string &s,

2015-02-25 18:10:04 496

原创 FFT初步学习小结

FFT其实没什么需要特别了解的,了解下原理,(特别推荐算法导论上面的讲解),模板理解就行了。重在运用吧。处理过程中要特别注意精度。 先上个练习的地址吧:http://vjudge.net/vjudge/contest/view.action?cid=53596#overviewProblem A A * B Problem PlusA*B的大数乘法,似乎大数模拟乘法不行的,

2014-08-26 17:44:12 689

原创 MemSQL Start[c]UP 2.0 - Round 2

反正晚上睡不着,熬到1点开始做比赛,6个题目只做了2个题目,而且手速还比较慢,待提升空间还很大呢。A题:给定两个0,1串(len分析:q的长度很大,即使用大数似乎也不怎么合理,其实我写了半天大数,用最大长度数据测试发现根本出不了结果,也许我写的太挫了,也学时间就耗在上面了。最终只能另想方法,而且题目中也说明了q^2 = q+1,所以很容易想到利用这个来做这个题, 观察到对于一个串中连续

2014-08-26 17:44:09 520

原创 NEERC 2010, Eastern subregional contest

只能把补了的题目放这儿了,先留个坑,怕忘记。Problem G URAL 1806 Mobile Telegraphs题意是:给定n个电话号码,每个号码是一个长度为10的仅含'0'~'9'的字符串,每两个电话号码a,b之间能通信,需要满足一下条件之一:1.b能通过改变a中某一个数字的值获得;2.b能通过交换a中两个数字获得。n个电话号码不相同,且相互通信的费用由之间的最长公共前

2014-08-26 17:44:07 878

原创 bitset学习小记

Cplusplus官网的资料:http://www.cplusplus.com/reference/bitset/bitset/http://www.cplusplus.com/reference/bitset/bitset/bitset/ bitset作为STL中一个位集,主要在涉及二进制位存储,操作时比较方便。定义及基本操作:bitset b,定义一个包含n个二进制位的

2014-08-26 17:44:05 567

原创 HDOJ多校联合第五场

1001 题意:求逆序对,然后交换k次相邻的两个数,使得剩下的逆序对最少。分析:题目用到的结论是:数组中存在一对逆序对,那么可以通过交换相邻两个数使得逆序对减少1,交换k次,可以最多减少k个。嘉定ai>aj,i 考虑ak,k = j-1;#11:ak > aj,那么ak,aj构成逆序对,交换后逆序对减少1;#12:ak考虑ak,k = i+1;#21:ak#22:a

2014-08-26 17:44:03 510

原创 HDOJ多校联合第四场

B题: C题:仅由'A','G','C','T',4个字母组成,给定一个字符串S,|S|分析:dp+状态压缩反正我不会这题,也是看了羊神的代码之后才明白这题的思路下面说说我的理解吧: 由于|S|长度最大为15,所以用一个二进制编码表示是哪些位置上的字母构成LCS,并求相应的数目。dp[0][st],dp[1][st]记录的是相应字母构成LCS时,T可能的数目,然后一

2014-08-26 17:44:01 407

原创 HDOJ多校联合第六场

先一道一道题慢慢补上,1009.题意,一棵N(N分析:对于每次询问需要知道其LCA,设w = LCA(u, v),可以用tarjan处理出来,或者倍增法也行。然后w会将S0分成两部分,记做S1,S2,然后分别考虑S1在u->w的路径出现次数,以及S2在v->w出现的次数。S1(x) = S0[1....x],1以S1为例,需要预处理出来u到根节点的路径上对应S0[i,j]序列出现的

2014-08-26 17:43:59 432

原创 MemSQL Start[c]UP 2.0 - Round 1

搞了好久才把大部分题目题解看完了,真是太弱了。A题简单暴力题一个一个匹配,对应位置字母要么相同,要么是'.'.B题给定一个矩阵,左下角(0,0),右上角(n, m),取4个不同的点连成一段折线,要有最长的折线长度。排除n == 0 和m == 0 ,剩下的情况中总共由4中情况:枚举一下就可以了1. (0,0)->(n,m)->(0, m)->(n, 0)2. (0,0)->

2014-08-26 17:43:57 489

原创 HDOJ 4893 Wow! Such Sequence!

题意是这样的,给定一个n个元素的数组,初始值为0,3种操作:1 k d将第k个数增加d;2 l r 询问区间l...r范围内数之和;3 l r 表示将区间l...r内的数变成离他最近的斐波那契数,要求尽量小。线段树操作题目,其中对于第三种操作用一个懒惰标记一下,表示l...r内的数是不是已经变成斐波那契数,如果是的话,求和就是其相应数的斐波那契数之和。代码: 1

2014-08-26 17:43:55 461

原创 TC Asia Competition

250PT不说了。很水得一题。500PT给定n(最后判断一下剩余的是不是完全平方。1000PT一个排列组合题,一个中心出发有k条路,路与路之间有且仅有中心这个交点。现在要建n个城市,编号1~n,使得中心有一个城市,每条路末端有一个城市,然后其余城市就放在各条路的中间。首先保证中心和末端处各建设1个城市,问总共有多少种安排方式。两种安排方式不同,表示至少存在一个城市他的邻居集

2014-08-26 17:43:52 438

原创 Codeforces 258 Div2

A题,n*m根木棍,相交放置,轮流取走相交的两根,最后谁不能行动,则输掉。min(n,m)&1 为1则先取者赢。B题,给定一个长度为n,且各不相同的数组,问能否通过交换连续一段L....R使得变成单调递增。如果一开始就是递增的,那么直接输出L。。。R就是1 1,交换一个就行了;否则判断中间是否有且一段单调递减,且两端交换后使得数组递增。代码: 1 //Template

2014-08-26 17:43:50 374

原创 斯坦纳树

斯坦纳树是一类比较特殊的DP吧,主要针对点集连通问题,通常dp[i][s]表示以i为根的,连通状态为s的一棵树的最小权值,有两种转移方式,其中state[i]表示点i的二进制标号,通常无关的点state值为0,dp[i][s] = min{dp[i][s], dp[i][j] + dp[i][k]},这里是针对state[i]非0dp[i][s] = min{dp[j][s] + di

2014-08-26 17:43:48 1456

原创 <算法竞赛入门经典> 第8章 贪心+递归+分治总结

虽然都是算法基础,不过做了之后还是感觉有长进的,前期基础不打好后面学得很艰难的,现在才慢慢明白这个道理。 闲话少说,上VOJ上的专题训练吧:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=40741#overview 1. A UVA 10602 Editor Nottoobad 好像是俄罗斯NOI的题目,题意是给定n个字符串,然后

2014-08-26 17:43:46 727

原创 UVALive 6602 Counting Lattice Squares

给定一个n*m的网格,求面积为奇数的正方形有多少个.首先是n*m个面积为1的,然后剩下的要么是边长为奇数,要么被这样一个奇数边长所包围。原因如下:对于一个边长不平行于坐标抽的正方形,其边长一定是某个长方形的对角线,而且长方形长宽a,b一定是一奇数,一偶数,这样area = a^2+b^2才是奇数。所以可以对任何奇数i 注意对于一个奇数例如5,被包围的正方形可以是以1和4的对

2014-08-26 17:43:44 482

原创 UVALive 6609 Minimal Subarray Length (查找+构建排序数组)

描述:给定n个整数元素,求出长度最小的一段连续元素,使得这段元素的和sum >= X. 对整个数组先求出sum[i],表示前i个元素的和,然后依次求出以a[i]为起点的,总和>= X的最小长度, 每次考虑新元素a[i]时,将a[i]加入数组, pa[—q] = mp(sum[i], i),这样pa[q……….p]形成一段总和递增的序列,下标也是逐渐增大。 最后利用lower_bound函数求

2014-08-26 17:43:42 475

原创 TC SRM 607 DIV2

求拼接完成后的字符串包含的子回文串的数目,一开始还用暴力去做,想都不用想 肯定超时了。 复习了一下求最长子回文串的算法,发现可以类似解决。 给相邻字符之间添加一个‘@’字符,这样所有的回文串都是奇数长度,然后从左到右,统计以每个字符为中心的回文串的数目就行了,长度逐渐递增,一旦遇到不是回文串的情况,就马上结束,开始对下一个字符为中心的回文串的统计。 Orz…这个回文串算法不久前学过,最近搞前

2014-08-26 17:43:40 495

原创 UVALive - 3401 Colored Cubes

好久没写解题回顾了。主要是没什么时间,但是还是一直在刷题,图论刷了70%的知识点,不过感觉长进不是很大,所以觉得还是得一步步来,最近还是先从刘汝佳大白书把前面基础章节刷完然后再决定以后的训练方式吧。 这个题目还算是理解了。重点在于各种姿态的的表示,顶部在上共有6种放置方法,然后正面对应4种,这样每个魔方对应24种方式放置。利用一个数组p[6]保存旋转后各个面对应的标准姿态的编号。然后将第一个魔方

2014-08-26 17:43:38 511

原创 UVA 11090 Going in Cycle!!

要求给定的图的中平均权值最小的环,注意处理自环的情况就能过了。按照w1+w2+w3+….wn 代码:#include #include #include #include #include #include #include string>#include #include #include #include #include #in

2014-08-26 17:43:35 466

原创 CodeChef A

问题是求出斐波那契数列的第n个,这里要用大数加法预处理,然后就可以了代码: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include string> 8 #include 9 #include 10 #include 11 #incl

2014-08-26 17:43:33 432

原创 CodeForces - 7D Palindrome Degree

最近接触了一点字符串算法,其实也就是一个简单的最大回文串算法,给定字符串s,求出最大字符串长度。 算法是这样的, 用'#'将s字符串中的每个字符分隔,比如s = “aba”,分割后变成#a#b#a#,然后利用下面的算法: pre: mx ←0    for i: = 1 to n-1         if(mx>i)           p[i] = min(p[2*id-i], mx

2014-08-26 17:43:31 456

原创 LCA问题的ST,tarjan离线算法解法

一  ST算法与LCA 介绍 第一次算法笔记这样的东西,以前学算法只是笔上画画写写,理解了下,刷几道题,其实都没深入理解,以后遇到新的算法要把自己的理解想法写下来,方便日后回顾嘛>= RMQ问题就是询问一个给定数组相应区间i…j的最大值。 ST算法的思路是:f(i,j)表示i开始的2^j个数中最大值/最小值,通过运用dp的思想初始化f(i,j)求出每个i(1….n)出发长度为2^

2014-08-26 17:43:29 447

原创 HDU Traffic Real Time Query System

题目大意是:对于(n, m)的图,给定边a, b查询从a到b要经过的割点的最少数目。先tarjan算法求双连通然后缩点,即对于每个割点将周围的每个双连通看成一个点与之相连。然后求解LCA即可,距离dis[u]表示从根出发到u的遍历过程中经过的割顶的数目,利用tarjan离线算法, 最后答案是:dis[u] + dis[v] - 2*dis[findset(v)] + (findset(v)

2014-08-26 17:43:27 505

原创 ZOJ - 3195 Design the city

题目要对每次询问将一个树形图的三个点连接,输出最短距离。利用tarjan离线算法,算出每次询问的任意两个点的最短公共祖先,并在dfs过程中求出离根的距离。把每次询问的三个点两两求出最短距离,这样最终结果就是3个值一半。其实开始我用的一种很挫的方法才AC的,具体思路就不说了,感觉很麻烦又不好写的样子。怎么没想到上面的简便方法呢。初始代码: 1 #include 2

2014-08-26 17:43:25 410

原创 UVALive 5903 Piece it together

一开始用的STL一直超时不能过,后来发现AC的代码基本都用的普通邻接表,然后改了一下13s,T=T,效率太低了。然后把某大神,详情戳链接http://acm.hust.edu.cn/vjudge/problem/viewSource.action?id=1199083的300+ms的代码加上自己的优化成功到了85ms,限时30s的程序还是挺有成就感的。 题目分析: 一个黑格子要和相邻的两个白格

2014-08-26 17:43:23 553

原创 POJ - 1523 SPF

题目要求割顶集,并且还要求出去掉割顶之后剩下的图连通数目。tarjan算法求出割顶后直接枚举就可以了吧。一开始想到利用iscut[u]的次数也就是点u被判定为割顶的次数求连通分量数,还有利用与结点u相连的点的bccno不同的编号来判定,都是不行的,具体原因自己想清楚比较好。以后就不会犯这样的错误了。代码:#include #include #include #i

2014-08-26 17:43:21 422

原创 HDU - 3594 Cactus

这是一个有向仙人掌的题目,要求判定给定的图是不是强连通图,而且每一条边只能出现在一个环中,这里有一个介绍有向仙人掌的文档:http://files.cnblogs.com/ambition/cactus_solution.pdf。有向仙人掌的判定:1.dfs树中不存在横叉边;2.dfs树中不存在lowlink[v]>pre[u],也就是不存在桥,lowlink[v]表示从v及其子节点出

2014-08-26 17:43:18 482

原创 UVA 10765 Doves and bombs

给定一个无向的连通图,要求每个点去掉后连通分量的数目,然后输出连通分量最多的m个点。 分析: 先求出双连通分量,然后统计所有双连通分量中割顶出现的次数,最后求出的就是割顶去掉后剩下的双连通的数目,对于不是割顶的点,去掉后剩下的仍为双连通,所以结果就是1. 代码: #include #include #include #include #include #in

2014-08-26 17:43:16 543

原创 UVA 11294 Wedding

给n对夫妇安排座位,其中0h,0w分别表示新郎,新娘。同一对新郎,新娘不能坐在同一侧,而且互为通奸关系的人不能同时坐在新娘对面。 这道题目真是掉尽节操啊,,,欧美的氛围还是比较开放的。 分析: 首先说一下应该注意的是新郎新娘也可能是会有通奸关系出现的,所以一开始必须将他们考虑进去。 为每对夫妇设立一个变量,xi,1表示妻子和新娘坐在同侧,否则表示丈夫和新郎坐在同侧。然后用mark[2*i]

2014-08-26 17:43:14 419

原创 ZOJ - 2615 Cells

注意数组别开太小了,代码照着训练经典打的: #include #include #include #include #include #include #include string>#include #include #include #include #include #include #define esp 1e-6#defin

2014-08-26 17:43:12 487

原创 UVALive - 3713 Astronauts

给定n个宇航员的年龄,平均年龄为 ave,根据下列要求分配任务: B任务只能分配给年龄 A任务只能分配给年龄>=ave的宇航员; C任务可以任意分配。 给定m组互相憎恨的宇航员,要求他们不能分配到同一个任务。能否存在这样的一组任务分配。 每个宇航员都只能分配两种任务中的一种:A或C(年龄大于等于ave),B或C(年龄小于ave),那么为每个宇航员设立一个变量xi,xi为0表示分配C任务,

2014-08-26 17:43:10 517

原创 UVALive 3211 Now or later

每架飞机有早晚起降两种方式,给定n架飞机两种方式的起落时间,为每架飞机安排起落时间(早或晚),使得所有飞机起降时间按照早到晚的顺序之间的间隔时间最小值尽量大。 分析: 最小时间尽量大应该采用二分的方法比较好,然后就变成了判别某个时间间隔m是不是符合要求的了。为没加飞机设立一个变量xi,0表示早,1表示晚,然后每架飞机i用两个点2*i,2*i+1表示,前者如果被标记表示早,后者被标记表示晚降。

2014-08-26 17:43:08 670

原创 UVA - 11324 The Largest Clique

给定一个图,求一个节点数目最多的团,对于其中任意两个节点u,v至少存在一条这样的路径使得u到v,或者v到u。分析: 先求出强连通分量,然后缩点,构成一个scc图,然后求一条最长的路,每个节点的权重即为该强连通分量的节点数目,由于是DAG, 所以可以用dp或者spfa,一开始用记忆化搜索竟然TLE,想也想不通,后来改成spfa,以0为起点,然后求出距离0的最大距离。spfa:

2014-08-26 17:43:06 390

原创 UVALive - 4287 Proving Equivalences

给定n个命题之间的已经证明的关系如 a b表示已经证明蕴含式a→b,要求还需要再作多少次证明使得所有的命题都是等价的.将每个命题看成一个点,已经证明的命题之间连一条边,问题转化为添加多少条单向边使得图成为一个强连通分量. 先求出所有的强连通分量,然后缩点构成一个SCC图,统计其中入度为0的点个数a,以及出度为0的点的个数b,max(a,b)就是需要再作的证明.注意当图一开始就是强连通时,不需要作

2014-08-26 17:43:04 402

原创 UVALive - 5135 Mining Your Own Business

刘汝佳白书上面的一道题目:题意是给定一个联通分量,求出割顶以及双连通分量的个数,并且要求出安放安全井的种类数,也就是每个双连通分量中结点数(除开 割顶)个数相乘,对于有2个及以上割顶的双连通分量可以不用安放安全井。如果整个图就是一个双连通分量,那么需要安放两个安全井,种类数是n*(n-1)/2.代码来自刘汝佳白书: 1 #include 2 #include 3

2014-08-26 17:43:02 421

原创 POJ - 1094 Sorting It All Out 拓扑排序

题意描述:给定前n个字母的关系描述,根据输入的m组描述(类似A分析:每次添加一组关系就进行一次拓扑排序,看能否判断关系,或者得出矛盾;如果是不确定的关系就继续添加直到数据用完,或者得出结论。关于判定关系是不是唯一确定的只需要看拓扑排序过程中,每次去掉一个入度为0的点之后剩下的入度为0的点是否唯一,如果不是的话最终得出来的关系就是不唯一的。代码:#include #include

2014-08-26 17:42:59 377

原创 UVALive - 4255 Guess

给定一个字符矩阵,s[i][j]为+,-,0分别表示ai+……….aj的和为正,负,0。可以将连续和转化为前缀差,即s[i][j]为+可以表示为B[j]-B[i-1]为正,B[i]表示前i项的和,B[0]为0,然后拓扑排序找出相对关系再依次取值即可。注意相同的B[i],B[j]要注意保存,最后两者的值统一。最终输出结果a[i] = B[i]-B[i-1]l.代码:#include

2014-08-26 17:42:57 383

原创 UVA - 10047 The Monocycle

从刘汝佳训练指南上看到的一道题,看了解释之后发现是一道最短路问题,(x,y,d,c)表示位于(x,y)点面向为d,颜色为c的状态,然后每个状态有左转,右转,前进3个转移方式也就对应三条边,然后建图求最短路就可以了。代码: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #in

2014-08-26 17:42:55 318

原创 UVA 10651 Pebble Solitaire 状态压缩dp

一开始还在纠结怎么表示一个状态,毕竟是一个串。后来搜了一下题解发现了这里用一个整数的前12位表示转态就好了 ,1~o,0~'-',每个状态用一个数来表示,然后dp写起来就比较方便了。代码: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include st

2014-08-26 17:42:53 425

原创 UVA 825 Walkiing on the safe side

根据地图,要求固定两点间最短路径的条数 。这题的输入数据就是个坑,题目有没有说明数据之间有多个空格,结尾换行符之前也不止一个空格,WA了好几遍,以后这种情况看来都要默认按照多空格的情况处理了。 可以先利用bfs求出起点到各点的最短距离,然后dfs统计 num[x][y]表示起点到x,y的最短路径数,转移方程为 num[x][y] += num[nx][ny], nx = x +dx[k

2014-08-26 17:42:51 330

空空如也

空空如也

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

TA关注的人

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