自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 CDOJ 1635 Building Roads

Problem:http://www.acm.uestc.edu.cn/problem.php?pid=1635最大最小生成树,但由于本题中的边权值比较特别,有十分简单地做法。最小树:按人口排序,然后依次连通相邻的城市即可最大数:先把人口最少的城市A和最多的B连起来,然后对于其他城市,看人口与与AB中的那个相差更大就连哪个#include #include using name

2013-07-25 18:25:38 579

原创 CDOJ 1638 Easy Problem

Problem:http://www.acm.uestc.edu.cn/problem.php?pid=1638用一个二维数组表示到达某曾某个楼梯口所用的时间,然后从底层向高层DP即可。对每个左边的楼梯口,上到更高一层后,可以送完所有物品后回到左边,或者直接去到右边。#include int dp[101][2];char floo[101];int end[101][2];i

2013-07-25 18:12:09 627

原创 CDOJ 1644 KKX Sequence

Problem: http://www.acm.uestc.edu.cn/problem.php?pid=1644最终结果可由通过组合数和最初始的排列表示出来,类似一个二项展开的样子,但是这样并不容易看出来最佳调整策略是怎样的。于是在N比较小的时候,对random_shuffle了一万次,把最优的排列方案给输出了,但都是不唯一的:3:2 1 34:3 1 4 25:3 2 5

2013-07-25 12:52:47 612

原创 CDOJ 1639 Fruit Ninja

Problem:http://acm.uestc.edu.cn/problem.php?pid=1639 乍一看觉得挺麻烦,但事实上要考虑的特殊情况并不多。首先从INF的情况入手比较容易,当m为10的倍数时,可以无穷地加下去,例如选10000开始。当m以5为个位时,差不多也是可以无限加,但是有限制。例如加到达55555时,需要额外加一个n,这可能会导致结果不再是5的倍数。但若n是5的倍数,则不会出

2013-07-25 12:36:11 646

原创 ZOJ 3725 Painting Storages

采用递推:当NM时,若1到N-1满足条件,则N可以任意染色,方案数为C(N-1)*2;否则,必有1到N-M-1不满足条件,N-M为蓝,N-M+1到N-1为红,这时将N染成红色即可,方案数为2^(N-M-1)-C(N-M-1),即1到N-M-1所有的染色方案数减去满足条件的方案数。#include #include #define mod 1000000007typedef long lo

2013-07-21 22:31:59 920

原创 关于STL中map的key

某些时候可能要用一个数组作为map的key,这时候有一些细节需要注意。struct key{ int a[5];};首先,用自定义类型做key时,要重载<操作符。格式如下(括号外的const少了会报错的):bool operator<(const key& k) const{ //...}然后,比较时需要对数组每个比较,若是直接return a[0]<k

2013-05-22 22:21:05 837

转载 为Zend Studio配置JRE

From: http://kb.zend.com/index.php?View=entry&EntryID=339Note: Current Zend Studio runs only on 32bit JRE.How to Change the JRE Used by Zend Studio for Eclipse

2013-05-20 10:48:28 1285

原创 ZOJ 1202 Divide and Count

高中排列组合题,以第一个case为例。方案数C(6, 3)*C(6-3, 3)/2! = 10,之所以要除2!是因为两个容量为3的箱子是对等的,故除去2的全排列。在第二个case中,则是C(6, 1)*C(6-1, 2)*C(6-1-2, 3) = 60。因为最大的数字可能是144,开始感觉还是挺麻烦的。不过看了AC的代码发现数据非常弱,虽然后面的数已经溢出了但没有相应的case。#inclu

2013-04-21 22:04:12 690

原创 浙江大学第13届程序设计竞赛总结

一大早被赛会给坑了,说是一个人不能领三人的证,于是不到八点就爬起来,屁颠屁颠地赶过去了。事实上由于人太多了,依然是一人领了三人的证。下午四个小时的比赛一晃而过,最终3 AC 1 TLE 1 Debugging 15 Rank,相对来说是个可以接受但略带遗憾的成绩。三月初刚开学的时候觉得很无聊,于是想做做ACM刺激一下,开始看了一些竞赛的基础知识。只不过依然很烦看书,后面还是直接转向刷题,首先是

2013-04-21 15:23:45 1151

转载 C++ std::random_shuffle

鉴于每次打开的速度都很慢。。From http://www.cplusplus.com/reference/algorithm/random_shuffle/

2013-04-10 18:44:01 1675

原创 ZOJ 3591 & 3594

3591 Nim这题连基本的Nim都不告诉怎么,让比赛时没见过的情何以堪。#include #include using namespace std;typedef long long ll;int T, N, S, W;int a[1000001];inline void Generate(){ int g = S; ++ N; for(int i=1; i<N;

2013-04-07 21:12:24 659

原创 ZOJ 3598 Spherical Triangle

当时居然没想到转成直角坐标系计算,一搜居然发现有余弦公式:cosA = (cosa-cosb*cosc)/(sinb*sinc),果断用之。a, b, c是单位球下角A, B, C所对的弧长。#include #include #define torad(x) x=x/180*3.14159265358979323846#define todeg(x) x=x*180/3.1

2013-04-07 20:56:05 740

原创 ZOJ 3593 One Person Game

令c = a+b, d = A-B,则等价于求{|x|+|y| | ax+by=d || ax+cy=d || bx+cy=d}。对于ax+by=d,用扩展欧几里得算法求得axx+byy=gcd(a,b),是否有解可由d是否为gcd的倍数判断。若有解,原方程的一组解为(x0, y0)  = (xx*d/gcd, yy*d/gcd)。令aa=a/gcd,bb=b/gcd,则通解可表示为(x0+k*b

2013-04-07 20:48:14 1024

原创 ZOJ 3596 Digit Number

看过像1136这类求最小倍数的题就知道,应该用BFS,逐渐构造从小到大的满足条件的数。另外根据条件以及余数,设置状态标记位,第一次达到该状态时进行置位,因为之后再到达同一状态时,其对应的数必然更大。另外内存充足,队列可以开得足够大,不要用循环的,因为输出结果时要用到之前的节点。开始将搜索的数直接用string保存在节点里,超时得一塌糊涂。后来在节点中保存了上一状态的下标,换成了数组做队列,又手

2013-04-07 15:28:55 856

原创 ZOJ 3688 C The Review Plan II

据说是错排公式的扩展,叫做限位排列。递推公式如下:但是因为对1000000007取了模,所以其中的除法不一定能除尽,当然在数学意义上是能够除尽的。可以用费马小定理去掉除法:若P为质数,则 a^p = a mod P,即 a^(p-1) = 1 mod P。但是这样一来式中会出现三项相乘,用long long计算是必须的,此外每乘一次要取模,否则long long

2013-04-05 23:00:49 1337

原创 ZOJ 3605 Find the Marble

传说中的江湖赌骗术,能自己想到的dp都不是什么复杂的dp。用dp[i][j]k]表示前i次交换看漏j次最后猜k的可能排列数,递推时,若第i步看漏,则dp[i][j][k] += dp[i-1][j-1][k]。若第i步没看漏,则分两种情况:第i步的交换与k有关,另外一个是l,则dp[i][j][k] += dp[i-1][j][l];若无关,则dp[i][j][k] += dp[i-1][j]

2013-04-05 10:55:28 1087

原创 ZOJ 3604 Tunnel Network

开始想找递推公式,果然失败了。不过对于给定的n和s,可以对n-s个点先排列然后划分成s份,然后计算有x个点树有多少种。这样显然不好递推,也没法写公式。事实上对任意n个点构成的树对应一个长为n-2的Prufer序列,且这种关系是一一对应。所谓Prufer序列是每次拿掉编号最小的叶节点然后将它的父亲push,直到只剩下两个节点。因此可以假定有点0与s个城市分别相连,问题转化为这n+1个点构成的树的Pr

2013-04-04 22:03:44 1504

原创 ZOJ 3600 & 3603

两个简单题,但都是几遍才过的- -3600 Taxi Fare杭州公交涨价了,不过没关系,反正坐的少。当时新老价格不是分开算的,所以出现了舍入问题。#include int main(){ int T; int d, t; double o, n; scanf("%d", &T); while(T --) { scanf("%d%d", &d, &t)

2013-04-04 20:45:29 875

原创 ZOJ 3602 Count the Trees

开始以为子树不仅需要同构,还要每个节点的编号相等,然后发现测试样例怎么对不上的呢。于是看了解题报告,于是思路就暴露了。一个节点对应一颗子树,所以可以为每个节点映射一个整数,这个整数唯一体现了这颗子树的形态。显然这个整数可以递归地由两个孩子对应的整数确定,方便起见,我们把第一次碰到的子树(一个节点)编号为0,然后第二次遇到的编号为1,依次类推。由于写了两个类似的的DFS,调用的时候掉混了,这是第二次

2013-04-04 20:09:22 771

原创 ZOJ 3601 Unrequited Love

注意到若存在两个人同时满足条件的话会推出矛盾,因此满足条件的只能有一个人。开始想到先利用被爱关系,把肯定不满足条件的人踢掉。若果剩下一个人,则判断他是否爱所有人,只见时间一直从0飙到16秒。其实是有线性的方法的,先假定第一个人a满足条件,从第二个人开始遍历。若b爱a或a不爱b,则把a置成b。被覆盖的那些肯定是不满足的条件的,而对于跳过的人,必定存在一个他不爱的人,这就是当时的a,不然,a就要等于他

2013-04-04 17:52:14 867

原创 ZOJ 3607 Lazier Salesgirl

简单题,线性遍历一遍就好。但要注意如果ave(p)计算到第i个顾客为止,那么第i+1个顾客来到时必须睡着。#include #include int c[1001];int sum[1001];int T, n, p, t;int i, tmin, w;int main(){ double max, temp; scanf("%d", &T); while(

2013-04-04 13:59:03 652

原创 ZOJ 3687 B The Review Plan I

因为限制数M比较小,可以直接对不满足条件的情况进行搜索。若某次搜索的结果中有违反了k个限制,则这样的排列数为(n-k)!,再根据k的奇偶性,判断是应当加还是减。当k为0时显然要取加号,于是k为奇时取减号。#include #include #define Mod 55566677bool got[51][51], use[51][2];int st[25][2], n,

2013-04-03 19:01:18 918

原创 ZOJ 3686 A A Simple Tree Problem

开始想了一个错误的算法,对每个节点保存它的子树中的节点数目和其中为一的数目,操作某节点时向上更新其祖先的数据(log N),查询时直接输出。当时忽略了操作同时也需要更新后代的数据,这样的最坏复杂度是N,肯定是不行的。但直接交上去不是WA而是超时,由此猜想其中有类似链表的数据。这个问题可以用线段树很好地解决,在对原树进行先序遍历的同时标上序号后,可以将任意子树转化为区间。序号介于某节点到它的任意

2013-04-02 22:19:36 812

原创 ZOJ 3689 D Digging

虽然一看就是DP问题,但是每个Coffin是唯一的,修了一次就不能再修了。这样更新每个时间对应的最高赏金时要考虑那些Coffin还没修的问题,这就很麻烦了。但事实上,对于一个最优的安排中修建的Coffin,是有严格的时间先后顺序的。考虑Coffin a & b,在任意相同时间t下,先a后b与先b后a所能获得的赏金分别是 t*a.s + (t-a.t)*b.s & t*b.s + (t-b.t)

2013-04-01 12:43:16 885

原创 腾讯编程马拉松复赛第三场 1 & 2 & 5

调完了ZOJ月赛的E题,忽然发现腾讯的比赛已经开始了。不过因为之前的比赛都是1AC带俩不是WA就是TLE的,倒也没怎么着急。第一题貌似也没那么赤裸裸地送分了,但是整体的难度倒是降低了不少,最后一次来个小小的安抚么。一场初赛加三场复赛,都十分憋屈,现在会觉得中文题不如英文题看得爽。HDOJ用的也很不习惯,十秒内不得刷新两次,你要敢刷再给你加十秒,当然这也不是什么主要矛盾啦。

2013-03-31 22:57:42 707

原创 ZOJ Monthly March 2013 E & H

这是第二次参加ZOJ月赛吧,两次都是为了准备校赛。第一次也是去年的这个时间,三个人去了机房,用个把小时看完题后,走了两个。我多呆了半个小时,终于忍受不了机房的键盘鼠标声和题目的复杂程度,也离开了。在刷这次月赛前,做了一下上次月赛的题目,能A四五道,心中窃喜。果然运气成分还是很大的,若没有与人讨论,今次恐怕又是鸭蛋。H  3693 Happy Great BG简单题,但是出题者神思路

2013-03-31 22:08:14 978 4

原创 ZOJ 3684 Destroy

首先中心应当位于整棵树的直径上,先从任意点开始搜一条最长路径,该路径的终点必是直径的一段,以上结论由反证可推出矛盾。再从端点开始深搜可得直径,遍历该路径即可得到中心点所在。接下来以中心点为根节点,开始DP即可。#include #include #include using namespace std;#define it map::iteratorstruct roa

2013-03-27 21:34:59 728

原创 ZOJ 3681 E - Cup 2

又是DP问题,又是内存不够,可惜这道题却能用map过掉。将M分解成a*b,则dp[M]=min(dp[a]*(b/2+1), dp[b]*(a/2+1))。(a|b)/2+1是level1中最少支持意大利的组数。#include #include using namespace std;map mem;int dp(int num){ int& res = mem

2013-03-26 00:29:31 790

原创 ZOJ 3682 E - Cup 3

二维DP,用a[i][j]表示前i个广场容纳j个球迷的方案数,这里的球迷或为Barcelona,或为Madrid。由于题目保证两队人数与广场总容量相等,则可选择人数较少的队DP。不过这样的话用来存储中间结果的二维数组过大,为200*100000*4Byte,刚好约是内存限制的1.25倍。开始想用map<pair<int, int>, int>节约内存,结果超时,故而重新用滚动数组写了一遍。

2013-03-25 22:30:00 859

原创 ZOJ 3678 The Toy of Flandre Scarlet

题目大意是有L*W*H个1*1*1的小方块,堆成长L,宽W,高H的玩具。每个小方块上有一个数字,每次我们可以让某相邻的两个小方块,同时加上或减去一个相同的数字。问经过若干步后能不能使所有数字均为0。显然可以转化成图来考虑。假设A, B, C, D依次相邻,分别对应1,2,3,4。经过三次操作,AB-1,BC+1, CD-1,可使D=D-A,A=0;通过两次操作,BC-2,CD+2,可使D=D+

2013-03-25 19:43:07 3602

空空如也

空空如也

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

TA关注的人

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