自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Fighting

做一只勤劳的小蜜蜂,幸福才能揽入怀中。

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

原创 UPC:2526 Color the necklace

http://acm.upc.edu.cn/problem.php?id=2526 这个题是http://blog.csdn.net/kkkwjx/article/details/21525325的加强版,也是Polya定理非常经典的题目。由于最后要除以2和4,在模运算里面直接除是不行的,要乘上2或4模MOD的乘法逆元。用到了Polya定理,求欧拉函数,求逆元,快速幂模#inc

2014-03-26 12:02:35 762

原创 UPC:2536 Changlong(二进制技巧)

http://acm.upc.edu.cn/problem.php?id=2536给你一个数组,有一个数出现q次,其余数字出现p次。现在要找出这个出现一次的数来。内存卡的很紧,只要1MB。开一个数表示二进制的每一位,10^7开个25的数组足够。把每个数用二进制数表示,每位有数字则该数组位置+1。由于有个数字不是出现了p次,所以该数字的每一位都不能被p整除。这样可以计算出这个数字来。

2014-03-25 21:24:15 697

原创 UPC:2543 Job!Job!Job!(贪心+优先队列)

http://acm.upc.edu.cn/problem.php?id=2543贪心+优先队列。之前做过这类在时间轴上解决带权值的区间问题,一直都是用贪心+优先队列的方法。比赛的时候看了一下觉得没思路就没多想。后来看题解发现是贪心+优先队列,就立刻想到了方法。需要总结和反思。枚举每个时刻从m到1,将该时刻要截至的任务放进优先队列每次弹出当前权值最大的任务并完成。注意如果某任务

2014-03-25 14:17:31 693

原创 UPC:2541 HaHa's Morning

http://acm.upc.edu.cn/problem.php?id=2541题意:拓扑序列计数。思路:集合上的DP。floyd算法求传递闭包gl【i】【j】,可以快速判断i是否为j的前驱。dp【S】=sum{dp【S^i】}i的要求,它的前驱全部出现在S中。对于一些状态,某结点的前驱没有出现在集合中,这样的dp【S】=0 思路很巧。如果是从前往后想的话,需要每次找入度为0的点。动规是从顶往下,这样的话考虑不符合的情况就行了。

2014-03-24 21:54:53 884

转载 2014年计算机求职总结--准备篇

版权所有,转载请注明出处,谢谢!http://blog.csdn.net/walkinginthewind/article/details/13000431找工作是一个长期准备的过程,突击是没什么效果的。准备时间越长,准备就越充分,就越容易拿到好的offer。我基本上从研究生一入学就一直在准备找工作的东西,看书、研究研究笔试面试题、在线编程训练、参加实习招聘等等。当然,其实主要还是研二

2014-03-22 20:32:49 547

原创 UVa:1508 Equipment

K大于等于5的时候很好想,只要每一项都取最大值相加即可。但是小于5的时候就不太好做了。我一开始想了一个思路,认为选的K个type在这5种r中每个一定有一种是最大的。但是6 12 2 2 2 23 2 2 1 12 3 2 1 12 2 3 1 11 1 2 3 21 1 2 2 3这组数据就过不了,正确答案应该是10。好在数据量并不大,可以无脑枚举。

2014-03-22 20:04:58 980

原创 UVa:11987 Almost Union-Find(并查集)

题意:要求你实现一个并查集,有以下3个功能:1,合并两个集合;2,将某个元素移动到另一个集合中;3,求某元素所在集合的元素个数与它们的和。思路:对于普通并查集,只具备第1个功能。但是仔细研究一下功能3,发现它只查询整个集合的元素个数与和,这个是比较好实现的,只需要维护根结点的元素个数与和就行,无须维护每个父亲结点,因为功能2只能移动一个结点。问题还是在功能2上,要移动一个结点p,首先要删除它,这样会破坏并查集原来的结构,需要寻找它所有的孩子结点以改变它们的父亲,这样做比较麻烦。实际上该结点存在的意义就是连

2014-03-22 11:19:05 722

原创 UVa:1554 Binary Search

这个题直接枚举i+1到10000就行。但是题目哪里说N最大是10000呢。。#include #include #include #include #include #include #include #include #include #include #include #define ll long long#define INF 2139062143#def

2014-03-21 20:25:04 641

原创 POJ:2528 Mayor's posters(未AC)

这是经典的线段树染色问题。用到了区间改值。这个题的难点在于离散化。普通的离散化是不行的。因为在线段树和这个题中数字代表的是一段区间,这样4和5是相邻的。而且普通的离散化每个数都是相邻的。如果有两个区间【1,6】,【10,20】,【1,20】。离散化以后就变成【1,2】【3,4】,【1,4】。很明显两个答案并不一样。这样,如果相邻两个点的差值大于1,则离散化的时候编号多加一。POJ的di

2014-03-21 19:15:14 597

原创 UVa:11992 Fast Matrix Operations

以每行建立线段树处理即可。注意两个地方。1。同时有setv和addv标记的时候先处理setv,在处理setv标记的时候要清理子节点的addv。同样在结束的区间(即ql而处理addv标记的时候不清理setv。2。x,y分别对应行和列。不然会RE的很惨。。做了这个题对懒惰标记的理解更深了一点。对于某个结点的setv和addv含义是要对该结点的子节点要做的操作,而不是当前的这个结点。

2014-03-21 11:59:23 574

原创 POJ:2556 Largest Rectangle in a Histogram

栈的应用。思路类似于之前做得一个题,L【i】,R【i】,H【i】分别表示长度为H【i】的长方形的左端点和右端点。显然最大面积等于max{H【i】*(R【i】-L【i】+1)}。H【i】已知,问题在于L【i】,R【i】怎么求。这里用那个题的思路就不行了。就左端点而言,这里需要求从当前位置i往左第一个长度小于H【i】的。这里可以用一个栈来维护。如果栈顶长度大于等于H【i】则L【i】即i,否

2014-03-21 08:24:55 653

原创 UVa:1232 SKYLINE

线段树维护区间最值和区间替换。1。设setv,maxv,minv分别表示区间替换值和区间最大值和最小值。在找到目标的区间后,如果setv大于当前区间最大值,说明该区间都可以,ans+=L-R+1,同时更新该区间,注意这里maxv和minv都要改成setv。如果setv小于当前区间最小值,那就没有必要更新了,就中断update。其他情况就继续下传。2。结点信息下传的时候,minv要取该段区间

2014-03-20 18:49:00 835

原创 UVa:1509 Leet

dfs搜索即可。对于原串的每个字母可能对应火星文里的1、2、3个字符,如果出现矛盾就返回。用了stl,跑了2.1S。#include #include #include #include #include #include #include #include #include #include #define ll long long#define INF 2139

2014-03-20 14:18:02 594

原创 UVa:10313 Pay the Price

完全背包计数。这里L1,L2可能会大于N。如果L2大于N,那么L2就当N处理就行了。如果L1大于N,那么肯定是0.注意这里0元本身是一种情况,需要支付0个硬币。用longlong。#include #include #include #include #include #include #include #include #include #include #d

2014-03-20 12:34:35 722

原创 UVa:10600 ACM Contest and Blackout

求最小生成树和次小生成树。次小生成树和最小生成树是不一样的。枚举最小生成树上的一条边并在原来的边集数组中删掉,然后对边集数组求最小生成树。这样得到的所有最小生成树取最小的,就是原图的次小生成树。#include #include #include #include #include #include #include #include #define ll long lon

2014-03-20 08:53:50 681

原创 UVa:10304 Optimal Binary Search Tree(动态规划)

经典的OBST问题。我用了O(n^3)的解法,dp【i】【j】=min{dp【i】【k-1】+dp【k+1】【j】+sum【i】-sum【j-1】+val【k】}其中i一开始想了一个O(n^4)的算法,用dp【i】【j】【d】表示区间【i,j】段数字深度为d时候的最小值,这样多加了一维把问题给复杂化了。实际上这个题可以用四边形不等式优化成O(n^2),以后贴上代码。O(n^3):

2014-03-20 08:04:02 820

原创 UVa:10294 Arif in Dhaka (First Love Part 2)

Polya定理。先用一个置换的循环节数得到不动点数,由于这个题里面的置换都相同,可以得到全部置换的不动点数和,最后除以所有置换个数。计算置换的循环节有多种办法,可以用数学推导也可以模拟计算。题目中有提示是不会溢出的。#include #include #include #include //#include #include #include #include #i

2014-03-19 13:11:16 655

原创 UVa:10157 Expressions(动态规划+大数)

这个题和http://blog.csdn.net/kkkwjx/article/details/20038467 基本一样。只不过数据更强一点,把数组改大之后就能AC。我这里尝试了Java的大数,效率比我自己写的要快一些。

2014-03-18 22:24:22 674

原创 UVa:10862 Connect the Cable Wires(斐波那契数列大数)

输出斐波那契数列的第2*n项即可。需要用大数。

2014-03-18 20:52:15 642

原创 UVa:11795 Mega Man's Mission(状态压缩)

集合上的动态规划。状态转移方程是dp[S]=sum{dp[S^p]},其中S表示机器人集合,S^p表示S除去第p个机器人的集合,dp[S]表示消灭集合S内的机器人的顺序总数。当消灭S^p集合内机器人得到的武器可以消灭第p个机器人时,方程成立。整个过程可以用状态压缩,位运算表示集合完成。但是 判断消灭S^p集合内机器人得到的武器是否可以消灭第p个机器人 这里可以提前预处理一下,用state[

2014-03-18 13:42:20 518

原创 UVa:10911 Forming Quiz Teams(状态压缩)

集合上的动态规划。就这个题目而言,用整数表示的集合可以很好的表现除去某个元素的集合这种特点。集合中的元素已经隐含了阶段,集合是从较小的子集逐渐枚举到较大的子集的,正符合动规的特点。另外注意用整数表示集合,数组要开到比1

2014-03-18 12:32:47 578

原创 FZJ:1894 志愿者选拔(单调队列)

单调队列。维护一个从变动的起点到当前为区间的最大值。这里的离队操作只需要判断需要离队的人是否在单调队列中即可。

2014-03-18 10:19:34 628

原创 POJ:2823 Sliding Window(单调队列)

单调队列。分别用两个双端队列维护最小值和最大值。C++能过,G++超时。一开始用STL,C++也超时了,自己手写了一个过掉了。。

2014-03-18 09:50:31 554

原创 UVa:11012 Cosmic Cabbages

这个题目思路非常巧妙。一般思路是枚举两个点求其曼哈顿距离的最大值。但是O(n^2)必超时。从公式的角度入手, d = |x1 - x2| + |y1 - y2| + |z1 - z2|,去掉绝对值,一共可以得到八种情况(比如说 (x1+y1+z1)-(x2+y2+z2),(-x1+y1+z1)-(-x2+y2+z2)...),我们把左边看成一个整体,右边一个整体,求两者差的最大值,只需要用

2014-03-17 15:57:47 549

原创 POJ:3468 A Simple Problem with Integers(线段树模版题)

线段树区间加减,区间求和。模版题。

2014-03-16 19:30:39 529

原创 HDU:1698 Just a Hook

线段树区间更新,区间求和。模版题。#include #include #include #include #include #include #include #include #include #include #define ll long long#define INF 2139062143#define inf -2139062144#define MOD

2014-03-15 21:33:17 594

原创 POJ:3321 Apple Tree

可以用树状数组实现,每次C就是改值,每次Q就是查询。但是由于题目是给的树结构,而树状数组求和是线性区间,所以需要将题目中的树节点编号,并对每个结点划分它的子树区间以便求和。用dfs后序遍历整棵树标记序号,然后取子树中最小结点为左端点,自身编号是右端点。之后用树状数组就可以了。用vector会超时,自己写了个数组的邻接表居然AC了。#include #include #include

2014-03-14 23:13:10 559

原创 UVa:1513 Movie collection

树状数组。开始按照n,n-1,n-2,,,3,2,1插入到树状数组并记录每个数字的位置,每次取出一个数,就输出该数位置到末尾的和,然后将该位置设为0,把该数字放到末尾并记录位置。注意数组要开100000*2。树状数组求和的时候上限是n+m。#include #include #include #include #include #include #include #inclu

2014-03-14 19:47:40 533

原创 POJ:2828 Buy Tickets(线段树)

思路真的很奇妙。从后往前,pos的意义是此时该人前面的空位。这样用线段树寻找第k个元素即可。

2014-03-14 14:47:53 584

原创 UVa:12299 RMQ with Shifts

线段树单点修改+区间最值。其中shift的操作,只需要挨个改值就行了。#include #include #include #include #include #include #include #include #include #include #define ll long long#define INF 2139062143#define inf -213

2014-03-13 22:27:11 567

原创 POJ:2886 Who Gets the Most Candies?

线段树模拟约瑟夫环+反素数。 #include #include #include #include #include #include #include #include #include #include #define ll long long#define INF 2139062143#define inf -2139062144#define MOD

2014-03-13 19:08:49 578

原创 UVa:12086 Potentiometers

区间求和,单点改值。用线段树实现。封装成了一个类。#include #include #include #include #include #include #include #include #include #include #define ll long long#define INF 2139062143#define inf -2139062144#def

2014-03-13 12:31:54 583

原创 UVa:11019 Matrix Matcher(AC自动机)

AC自动机。很容易想到一个思路将模式矩阵的每一行插入Tire,然后将匹配矩阵的每一行用AC自动机漫游,统计该行中出现过的模式矩阵行,最后判断出现过的每行是否能够组成整个模式矩阵即可。这个也很好判断。但是有个问题如果模式矩阵中的串有重复,比如说匹配阵是aaaaaaaaa模式矩阵aaaa那么很有可能得不到正确结果。所以我把AC自动机中的val数组改成了二维,

2014-03-12 09:52:04 666

原创 UVa:1449 Dominating Patterns(AC自动机)

AC自动机模版题。找到每个串然后标记该串出现次数加一。注意模版串可能有重复,最后要全部输出。一开始因为数组开小了结果超时了。字典树开的大小应该为字符串个数n*字符串长度l

2014-03-11 19:42:52 560

原创 UVa:1329 Corporative Network(带权并查集)

题意:有两种操作。1,将u设为v的父亲结点,距离为abs(u-v)%1000;2,求u到根节点的距离。思路:带权并查集。设dist[u]表示u到根节点的距离,每次压缩路径时,需要每次加上其父亲结点的dist。另外在合并时计算为dist[v]=abs(u-v)%1000+dist[u]。#include #include #include using namespace std;co

2014-03-11 11:57:06 563

原创 UVa:1523 Helicopter

思路比较烂,直接上全排列。用了2s。#include #include #include #include #include #include #include #include #include #include #define ll long long#define INF 2139062143#define inf -2139062144

2014-03-11 10:47:08 577

原创 UVa:11136 Hoax or what

优先队列。使用一个最大堆和最小堆即可。但是注意最大堆里删除掉的了,可能在最小堆里出现。所以需要保证每次弹出的在另一个堆里没有删掉。所以加两个数组判断这个地方。答案要用longlong。#include #include #include #include #include #include #include #include #include #includ

2014-03-10 17:41:39 533

原创 UVa:585 Triangles

根据给的图可以发现要找的三角形一定是等边的,所以每层是1,3,5。。这样。只需要枚举三角形的顶点即可。枚举的时候要注意小三角形,不是该位置为“-”就行的,还要注意小三角形的开口方向。由于有两种方向,所以还要倒着枚举一遍即可。#include #include #include #include #include #include #include #include

2014-03-09 12:57:38 625

原创 UVa:10755 Garbage Heap

长方体中求价值最大的子长方体。由于之前做过一维和二维的所以这个相对来说比较好想。枚举高的上下界,用时O(n^2),这样问题就转化为二维长求最大子矩形,这个问题可以使用前缀和+DP在O(n^3)内解决。时间复杂度为O(n^5)。注意题中每个价值范围在正负2^31之内,所以求最大值,ans初值应该取最小,则至少应该取负2^31。另外注意每个样例之间有个空行。#include #include

2014-03-08 12:25:19 693

原创 UVa:1382 Distant Galaxy

错了一个小地方调了一上午。。跪。。首先要将所有点离散化,这里注意所有出现的数字最多是不只100个的,因为有x和y两个坐标,所以数组要开200。特判只有一行的情况。其他时候枚举上下两行,注意此时i!=j,根据left【r】-left【l】+on【l】+on2【r】,维护-left【l】+on【l】的最大值,枚举j,可以在O(n)内求出。注意l#include #include

2014-03-08 11:38:05 893

空空如也

空空如也

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

TA关注的人

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