自定义博客皮肤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

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

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

原创 UVa:11728 Alternate Task

简单题,只需要从S开始,从大到小枚举,取第一个所有正因子之和为S的即可。#include #include #include #include #include #include #define ll long long#define INF 2139062143#define MAXN 100005using namespace std;int S;

2014-02-28 22:02:35 658

原创 UVa:1411 Ants(KM算法)

由黑白两色的结点很容易想到二分图匹配,但是线段相交这里很难处理。这里有一个性质,即不相交的线段和一定小于相交的线段和。由于一定存在解,那么这样线段和最小的情况一定是不相交的。这样由KM算法求最小权即可。

2014-02-28 20:38:21 942

原创 UVa:11383 Golden Tiger Claw(KM算法)

利用KM算法中的l(x)+l(y)>=w(x,y)。算法结束后所有标顶之和是最小的。即所求答案。

2014-02-28 19:52:20 870

原创 UVa:10888 Warehouse

问题可以转化为二分图匹配来做。利用BFS求得每个X到每个B的最短距离,为权值。然后用KM算法求最小权。需要用求最大权的算法,权值取反。不存在无解的情况。#include #include #include #include #include #include #include #include #include #define ll long lon

2014-02-27 21:45:25 984

原创 UVa:10590 Boxes of Chocolates Again

这也是个整数划分的问题。数据量只有5000,O(n^2)的方法看似能行,但是由于用到大数,所以除非大数效率比较高,否则很难过掉。有了上个题的经验,用f[n]=∑(-1)^(k-1)*(f[n-k*(3*k-1)/2]+f[n-k*(3*k+1)/2]) 这个公式就行了。速度会快很多。#include #include #include #include #include

2014-02-27 19:52:11 1221

原创 HDU:4651 Partition

经典的整数划分问题。使用O(n^2)的办法必超时。用这个公式可以递推出来。注意n-k*(3*k-1)/2>=0,n-k*(3*k+1)/2>=0。#include #include #include #include #include #include #include #include #include #define ll long lo

2014-02-27 19:41:16 717

原创 ZOJ:2604 Little Brackets

watashi的题解:用dp[n][k]表示长度为2n深度不超过k的括号序列个数,那么答案就是dp[n][k]-dp[n][k-1]。边界条件:dp[0][j] = 1 递推公式:dp[i][j] = sum{dp[i-k][j] * dp[k-1][j-1] | 0dp[i][j] = sum{dp[i-k][j] * dp[k-1][j-1] | 0i对括号深度不超过j的,

2014-02-27 10:58:36 1043

原创 URAL:1017 Staircases

01背包计数问题。这类问题非常经典,很多问题都可以转化为背包类的计数问题。#include #include #include #include #include #include #define ll long long#define INF 2139062143#define MAXN 100005using namespace std;ll d

2014-02-25 22:40:17 584

原创 URAL:1049 Brave Balloonists

给你10个数,问你它们的乘积,这个数有多少个因子。输出因子数的最后一个数字。对每个数分解质因数,得到所有质因数及其指数,这些也是乘积的质因数及其指数。利用 某数的因子个数等于 它所有质因数指数+1的乘积 ,然后模10得到答案。#include #include #include #include #include #include #include #inc

2014-02-20 21:41:49 694

原创 UVa:753 A Plug for UNIX

最大流。建立源点为0,汇点为1。将已有插头与0相连,每种电器用到的插头与汇点相连。转换器与插头之间是INF。 #include #include #include #include #include #include #include #include #include #define ll long long#define INF 213906

2014-02-20 21:37:07 705

原创 HDU:4738 Caocao's Bridges

无向图求桥。虽然是模版题但是有几个trick。1,图可能不连通,这样答案输出02,有重边,重边肯定不是桥3,如果最小值是0,那么应该输出1,因为至少要派一个人去炸桥。#include #include #include #include #include #include #include #include #define ll long lon

2014-02-13 19:29:12 636

原创 UVa:11375 Matches

白书上的例题。用到了大数加法。注意它问的是用n根火柴可以摆成多少个整数,就是说少于n根火柴的时候也是可以的。另外注意前导0的情况。 #include #include #include #include #include #include #include #include #define ll long long#define INF 21390621

2014-02-13 18:01:24 623

原创 UVa:11134 Fabled Rooks

非常关键的一点是行和列是独立的,不相互影响。所以判断车是否相互攻击只需要行不相互攻击,列也不相互攻击即可。这样二维可以转化成两个一维。一维的问题是,在给定的每个区间上选一个点使得该点不再其他区间上出现。贪心,优先给右端点小的线段选点即可。类似于上一个题,我用优先队列做得。#include #include #include #include #include #incl

2014-02-13 17:10:43 564

原创 UVa:1422 Processor

二分+贪心。二分答案,然后需要判断该速度时能否完成所有任务。每次优先去做结束时间早的任务。这样从1开始枚举每个时刻,如果该时刻是某任务的左端点就把它放进优先队列,然后每一秒优先去做结束时间早的任务。这里有个非常恶心的地方,如果你在这一秒内完成了这个任务,但是这一秒还没有结束,那么你可以把余下的时间去做另一个任务。用另一种角度阐述就是,如果某一秒速度v>某任务的工作量w,那么多出来的(v-w)这

2014-02-13 14:54:21 623

原创 HYSBZ:1026 windy数(数位DP)

题意:求区间内windy数的个数。思路:数位DP。用递归比较好写。设f[cur][num]表示当前是第cur位,第cur+1位的数字是num时的windy数个数。显然状态转移方程是f[cur][num]=sum{f[cur-1][i]}(abs(num-i)>=2)。注意处理前导零。另外像1,2,3这种个位数也windy数。

2014-02-12 22:26:36 603

原创 UVa:12105 Bigger is Better

这个题可能有非大数做法,但是我想了好久没想到什么太好的思路,所以用了大数。所以时间很慢,跑了1.4s。dp【i】【j】表示用i根火柴得到模m余j的最大数字。这样进行转移即可。过程尽量简单,因为时间复杂度比较高,一开始想用vector保存char结果超时了。注意答案为0的情况。#include #include #include #include #include #

2014-02-12 19:01:08 668

原创 UVa: 12097 Pie

二分。依旧相当于求下界。由于答案是浮点数,用while(low一开始WA了好多次,可能是π精确度不够的原因。。#include #include #include #include #include #include #include #define ll long long#define INF 2139062143#define MOD 200710

2014-02-12 15:29:14 562

原创 UVa:12124 Assemble

最小值最大化。相当于求下界。用二分法。思路参考白书。 #include #include #include #include #include #include #include #include #include #define ll long long#define INF 2139062143#define MOD 1000000000

2014-02-12 13:58:58 551

原创 UVa:11464 Even Parity

二进制枚举子集,LRJ的书上已经说的很清楚了。注意题目是将把0变成1,因此可能有无解的情况。#include #include #include #include #include #include #define ll long long#define INF 200000000#define MOD 20071027#define MAXN 1000

2014-02-10 21:30:44 526

原创 UVa:10054 The Necklace

大一的时候写这道题被卡到死,最终AC跑了1s多,不知为何。今天重写,还是WA了好多次。注意一些地方,要判断图是否联通,编号1——50不一定全部都出现,也不一定连续出现。这样,并查集+欧拉回路即可。#include #include #include #include #include #include #define ll long long#defin

2014-02-10 17:57:19 630

原创 UVa:10047 The Monocycle

简单bfs。将状态映射成hash来判重。#include #include #include #include #include #include #define ll long long#define INF 200000000#define MOD 20071027#define MAXN 1000005using namespace std;

2014-02-10 17:02:12 573

原创 HDU:3652 B-number(数位DP)

数位dp。问你能被13整除而且包含13的数字有多少个。这里需要设计状态了。dp【i】【j】【k】【l】表示长i位,以j开头,是否包含13(k=1为包含,0不包含),模13余数为l的数字有多少个。统计的时候和前面略有不同,要计算前面的余数,保证前后的余数之和能被13整除才能统计在内。

2014-02-10 10:09:25 534

原创 HDU:3555 Bomb

一点没动脑。把上个题的代码改了改,先求不包含49的数个数目,然后删去就行。HDU上lld,llu似乎是不行的。用了cin和cout。#include #include #include #include #include #include #define ll unsigned long long#define INF 200000000#define MO

2014-02-09 21:26:20 578

原创 HDU:2089 不要62

数位dp。学习了这篇PPT。http://wenku.baidu.com/link?url=mUxdsYomenU-e9SFVPacVtXysemiQA4KnP1EldVuYaB8ECiaLQN4VIAEc19MmHQWQeFqUrU4oFpsX2J1LvrAeoJyAmDYdwMODM8mm3ph327注意是右边是开区间。用到了区间的分解,说得很详细。#include #incl

2014-02-09 19:54:08 567

原创 UVa:11624 Fire!

多源bfs。注意J一开始就在边界的特殊情况。#include #include #include #include #include #include #define ll long long#define INF 200000000#define MOD 1000007#define MAXN 4000*1005using namespace std;

2014-02-09 15:23:38 547

原创 UVa:1394 And Then There Was One

约瑟夫环问题。最后一个删除的编号,递推公式是f【n】=(f【n-1】+k)%n。网上多数对这个公式说的不太清楚。假设编号从0开始到n-1。编号从0开始,我们很好求删掉的第k个元素,那么第一次删除了编号是k-1的数。为了方便求第二次删除的数,把剩下的数字重新编号,即从编号是k的元素开始,令它为0,这样把剩下的n-1个数字重新编号了。这里重新编号以后的下标和之前是有一个对应关系的,即x‘=(x

2014-02-09 14:21:43 701

原创 UVa:11806 Cheerleaders

白书上的例题,跟LRJ写的基本一样。注意组合数的递推,这里写错WA了一次。用到了容斥原理,需要各种情况的组合,用二进制枚举子集,由于是从全集里面扣掉,所以奇变成了减,偶变成了加。感觉还是很厉害。。取余的时候如果有减法,要记得加一个模,避免出现负数。#include #include #include #include #include #include #d

2014-02-09 13:43:53 507

原创 UVa:11732 strcmp() Anyone?

折腾了两个多小时终于把这个题给过了。一开始想到思路直接写了个多叉的tire,结果超时了。感觉是不能再小的算法了,后来发现只memset就要很长时间,于是改成每次开辟新节点的时候再memset,还加了读入输出外挂,结果还是超时。后来上网题解上说要用左儿子右兄弟表示法来做,然后写了一个,1.7sAC了。多叉的写法,由于它直接利用下标表示对应的字符,所以对空间浪费比较严重,但是要找到某个结点的孩

2014-02-08 17:54:43 596

转载 数组空间的计算

在编程竞赛中,由于题目内存的限制,在一些卡内存的题目中空间花销计算显得尤为重要。众所周知,查询数组空间可以用sizeof(),比如        sizeof(char) = 1;        令 :char A[1024];        则sizeof(A) = 1024;我在百度 “数组空间计算” 的时候,答案基本上就是上述,但这似乎还是不够的。上面的结果1

2014-02-08 15:54:52 3081

原创 UVa:11488 Hyper Prefix Sets

Tire。思路很蠢,每个串的最后一个结点记录该串出现次数。然后在树上dfs求相同结点数*串个数的最大值。第一次用scanf超时,后来改成gets,优化了一下读入,1.8s水过。。。#include #include #include #include #include #include #define ll long long#define INF 2000

2014-02-08 13:15:27 580

原创 UVa:1401 Remember the Word(字典树)

字典树,第一次写。还需要递推。dp【i】=sum{dp【i+len(x)】}x是str【i……L】的前缀长度。朴素的想法是枚举所有x,然后判断是否是str【i……L】的前缀,这是时间复杂度大约是30000*4000*比较的时间,会超时。利用tire减少了不必要的比较,使得可以快速找到所有的x,即每次找到的都是str【i……L】的前缀,这样至多是30000*100。关于字典树。用数组

2014-02-07 23:50:58 603

原创 UVa:10148 Advertisement(贪心)

贪心。要求每个区间至少有k个点覆盖,如果区间长度不足k则全部有点覆盖。根据区间右端点从小到大排序,如果右端点相同则根据左从小到大排序。对于每个区间选取右边k个端点。这里有个问题就是,如果该段区间已经选过一部分点了,那需要统计一下已经选过多少点,我这里用了最笨的办法,直接数(由于区间有负数,所以都加了10005来消掉负数),这样再把剩下的点选够即可。这样最坏的情况是1000*20000,居然

2014-02-06 18:02:42 603

原创 UVa:12050 Palindrome Numbers

区间分解的问题。想想回文数是怎么构造出来的就行。1——9,有9个111——99,有9个1101——999,有9个101001——9999,有9个10……可见每次都是9个9个的,它的单位分别是1,10,100……这样。由于回文数长度可能是奇或偶,所以有两种情况。这样分解区间,然后求解就行了。#include #include #include #include

2014-02-06 12:43:18 628

原创 UVa:10330 Power Transmission

最大流。每个结点也给了容量,这样要求每条边的都要比结点容量小或相等。用邻接表实现的,注意要记录反向边在邻接表中的位置,同时在EK算法中也要记录父亲结点中边的位置。 #include #include #include #include #include #include #include #include #define ll long long#d

2014-02-03 15:24:22 648

原创 UVa:471 Magic Numbers

简单回溯。dfs枚举除数,然后除数乘商,判断被除数是否有重复数字。注意一个剪枝,由于被除数长度至多是10,减去商的长度,就是除数的最大长度。#include #include #include #include #include #include #include #include #define ll long long#define INF 213906

2014-02-03 13:45:12 574

原创 UVa:10912 Simple Minded Hashing

还是个递推,跟之前一道题很像。注意L大于26的时候输出0.所以数组不需要开太大。#include #include #include #include #include #include #include #include #define ll long long#define INF 2139062143#define MAXN 10000//io

2014-02-02 20:36:18 565

原创 UVa:10759 Dice Throwing

简单递推。注意pow这个函数要求参数是double类型的,否则会出错。#include #include #include #include #include #include #include #include #define ll long long#define INF 2139062143#define MAXN 5000000//ios::

2014-02-02 18:19:22 602

原创 UVa:524 Prime Ring Problem

LRJ白书上的例题,简单回溯,比较水#include #include #include #include #include #include #include #include #define ll long long#define INF 2139062143#define MAXN 5000000//ios::sync_with_stdio(f

2014-02-02 17:03:48 781

原创 UVa:306 Cipher

这个题去年就看到了,但是用模拟的办法超时了。如果每次模拟都记录下字符串还会内存超限。后来得知是置换群。每个字符的出现都是有周期的,这样整个串的周期就是所有字符周期的最小公倍数数。如果求了串的周期,k取模之后再模拟,还是会超时。正确的办法是k对每个字符的周期取模,然后对字符操作。#include #include #include #include #include #inc

2014-02-02 14:16:21 695

空空如也

空空如也

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

TA关注的人

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