- 博客(61)
- 收藏
- 关注
原创 SRM 426
D2 hard DistinctDigits 选定一个区间[low,high],将每个数的数字按小到大排序,去掉所有0,构成一个集合。问不同的集合种类。 区间数目相当之大,因此无法从区间各个数来推得答案。考虑到最后一个样例中几近题目最大限度,结果仅为19519,我们可以先搜索集合的种类,然后再逆推是否可组成区间内的数字。 当集合的数字个数小于len(high)大于
2009-07-29 22:17:00 1042 2
原创 SRM 445
这场就是彻头彻尾的悲剧。就算是在莫斯科城下寒风中瑟瑟发抖的德军,也及不上我们这组的悲惨。 250P给出平面上一个点集S,在平面上找一个点V。V对于S中每个点v0,v1,v2....vn,各自有一个曼哈顿距离。顺便说一句,tc的出题者还真是会赶时髦,他们代表了先进算法的发展方向。让排序之后得到的Kth曼哈顿距离最短。求此距离。 其实结论很简单:最
2009-07-28 16:41:00 772
原创 SRM 434
D1D2的250p都是水题,特别纯净的那种。 D1 500p HexatridecimalSum 高精度模板上吧! D1 1000p IncreasingLists 花了半个下午搞定。首先搜索最长不下降序列划分逗号,然后贪心。贪心时注意:只要某一位被预置,并且与之前的string在该位不同,那么就可以对后面的数位置0.还有一些细节,比如开头不能为0。 str
2009-07-14 14:47:00 613
原创 SRM 444
很长时间没有在tc上做比赛,还是老老实实从D2区开始吧! 我们这个房间很有意思,最后分数排名前三的家伙在最简单的250分上都卡了一小会——其中就包括我。也许是因为久疏战阵,缺乏对模拟题的手感吧。 第二题求乘积的层次,实际上就是求质因数的个数。我居然先打了一张四百万的质数表…… 这题到最后只有两个人过。进入challenge环节之后,当排名前列的几位在代码间寻寻觅觅,苦心竭力
2009-07-08 20:43:00 780
原创 SRM 438
这轮的三道题目比较有水准,充分反映了Tc的前沿水平。 D1 250p UnluckyIntervals 首先计算得到以下公式: UnluckyNumber = ( K - LuckySet[left] ) * ( luckySet[right] - K ) - 1 然后建立pair 代表UnluckyNumber 和K。 由于题目要求只需要N个(N=100
2009-07-05 22:30:00 664
原创 SRM 439
D2 1000p PalindromeFactory 邮局问题。设Dp[i][j]为从串[i,j]得到回文串的最小步数,然后进行两种操作:删除一个字符、删除两个字符。 class PalindromeFactory{ string str; int dp[50][50]; int get ( int l, int r ) { if ( l == r
2009-07-04 22:55:00 734
原创 SRM 442
相比起443来略为简单。D1三道题分别是简单题、简单题和简单题。 D1 250p Underprimes 没什么好说的,分解质因数,拼手速的题目。 D1 500p BedroomFloor 模拟题,有些麻烦。 首先算出中间完整的正方形个数。然后用边上完整的正方形去和原长方形做交集运算,分出各种小矩形。 最后用4和1相拼,3和2相拼,3和1相拼,2
2009-07-04 13:22:00 693
原创 SRM 443
D2 500p: CirclesCountry 简单题,枚举每两个点是否在同一圆内。 D2 1000p: Polygons2 首先将数组segments排序。对于segments[i]而言,它能组成的N边形个数=总长度大于segments[i]的前面N-1边形的个数。设状态表示为F[i][k][sum],k表示边数,则F[i][k][sum] = F[i - 1][
2009-07-04 12:55:00 696
原创 POJ 1848 Tree
懒得再写一遍。 三个状态,表示包含root点,不包含root点,不包含root点和任意一条链的子树最优值。 #include #include #include using namespace std;#define INF 9999999int N;vector t[101];int f[101][3];int used[101];
2009-06-21 12:51:00 942
原创 SPFA:改进的BellmanFord求单源最短路径算法
SPFA——Shortest Path Faster Algorithm,可以在O(kE)的时间复杂度内求出源点到其他所有点的最短路径,可以处理负边。SPFA的实现甚至比Dijkstra或者Bellman_Ford还要简单: 设Dist代表S到I点的当前最短距离,Fa代表S到I的当前最短路径中I点之前的一个点的编号。开始时Dist全部为+∞,只有Dist[S]=0,Fa全部为0。 维护
2009-02-21 21:40:00 1365 2
原创 八皇后问题的位操作解法
比起普通的搜索剪枝来,由于在每一层的搜索里多加了两个限定条件ld/rd——斜对角线,加之使用取最低位的操作,大大减少了每一层的遍历时间。 这是USACO1.5的最后一题,要求列出字典序遍历结果的前三位。在N=13的情形下,运行时间0.163S。 /*ID: C.D.PROG: checkerLANG: C++*/#include #include #
2009-02-12 10:45:00 907
原创 Zoj 2315
对于一棵树而言,记录下包含此结点的最大num和不包含此节点的最大num,进行dp。 我发现自己每每写完一题,就再也不想多写一个字,以至于解题报告如同旧时的电报,惜字如金。 #include #include using namespace std;enum{ SIZE = 500001,};struct Node{ int p; //
2009-02-01 11:48:00 914
原创 ZOJ 1941
无聊题,中缀表达式。一口气写了290行,就如炎炎烈日下当头一兜凉水般的爽快。 #include #include #include #include #include using namespace std;string str;int cs = 1;int lev ( char c ){ if ( c == + || c ==
2009-01-22 14:46:00 749
转载 C时间函数概述
关键字:UTC(世界标准时间),Calendar Time(日历时间),epoch(时间点),clock tick(时钟计时单元)1.概念在C/C++中,对字符串的操作有很多值得注意的问题,同样,C/C++对时间的操作也有许多值得大家注意的地方。最近,在技术群中有很多网友也多次问到过C++语言中对时间的操作、获取和显示等等的问题。下面,在这篇文章中,笔者将主要介绍在C/C++中时间和日期的使用方法
2009-01-21 11:09:00 656
原创 ZOJ 1063 Space Station Shielding
练习floodfill很好的题。第一次考虑从内部有模块的点开始floodfill,发现无法识别内部空仓和外部空仓。反向思考,从外部空仓进入模块,得解。 #include #include int b[60][60][60];bool used[216000];int q[216000];int N, M, K, L;int dir[6][3] ={ {
2009-01-15 22:42:00 931
原创 ZOJ 1039 Number Game
记得很久前写过,博弈的题目大同小异,要注意的就是两点: 1、状态的表示 2、状态之间的转换:只要能达到必败态,就是必胜态。反之就是必败态。起点为必败态。 另外,数组作为参数传递时是指针传递。 #include #include int cs, n;int list[21];int move[21], len;int b[60000
2009-01-13 19:01:00 818
原创 SRM399 BinarySum
Problem Statement You are given three integers: a, b and c. Convert each of
2008-06-04 18:40:00 647
原创 SRM397 CollectingMarbles
Maybe you dont know, but you are a fanatic of colored marbles. You want to collect them all, but you may not be able to carry them. You have numberOfBags bags, each of capacity bagCapacity grams. The
2008-06-03 11:21:00 609
原创 TCSRM 400 ReversalChain
记忆化搜索,类似邮局问题的dp。以下解法byACRush。对于每一种string a -> string b,都有一个最小的转换步数。对长度分层考虑,当a首字符和b首字符相同时继续,当a首字符和b末字符相同时就可以调转。class ReversalChain ...{ map string, int > m; int minStep ( string a, string
2008-05-27 22:57:00 674
转载 关于一个小问题的联想
潮湿的天气和人的心理一样,散发出懒洋洋的热空气。懒的写东西,帖一篇Love_Shsean的文。我们设柱型图的元素高度为h [ ],那么我们要求的就是max { h [i] * (Right [i] - Left [i] + 1) },其中Left [i]分别是以h [i]为中心,向左拓展使得h [j]~ h [i] 0 && image.height>0){if(image.width>=70
2008-05-27 11:06:00 976
原创 HDOJ 2167 Pebbles
这种类型的题目似乎很常见——方格棋盘,搜索某种状态。你也许会大喊:“嘿,伙计,为什么不再来一份?……”但是我就他喵的又敲了2个钟头,其中莫名其妙的错误就和绵羊身上的毛一样多。在这之前我要承认这是一道很繁琐的题目。第一题目没有给出棋盘的长宽,需要处理字符串;第二当你敲下第200行代码之后再简单的题也会突然变得复杂起来。单纯的搜索是不可能的。N*N= 225,这样的数据规模已经注定了纯搜的
2008-05-15 22:23:00 783
原创 ZOJ 1918 Ferry Loading II
设f(i,j)表示第i次运输能将第j辆车运到对岸,抵达时所花的最小时间。f(i,j)=f(i-1,j-k)+回岸的时间T+T。当然,若回岸时车还未到达,f(i,j)=j车抵达的时间+T。 #include cstdio>#include string>#define min( x, y ) ( x #define max( x, y ) ( x > y ? x : y )int T
2008-05-03 16:29:00 1038
原创 ZOJ 2074 Trip
先求凸包再枚举包上的点对距离。#include cstdio>#include string>#include cmath>#include algorithm>using namespace std;#define eps 1e-10typedef struct...{ double x, y; int id;} Point;Point p[30001];int N;int
2008-04-27 11:25:00 853
原创 ZOJ 2852 Deck of Cards
什么是郁闷?就是把整段代码从头至尾天翻地覆修改了一遍之后,发现错误出现在最不起眼的地方。今后出现if...if...if...else的时候一定要小心,很可能就把原来的意思搞反了。不难的DP题。方程是C[n,a,b,c] = max(C[n-1,a-v[i],b,c],C[n-1,a,b-v[i],c] ,C[n-1,a,b,c-v[i]]);,无非写起来要考虑清楚几种不同状况。#in
2008-04-25 12:46:00 1621
原创 ZOJ 1827 The Game of 31
博弈的题目。123456各四张花色,游戏开始时从中抽掉一些牌。每人一次抽取一张相加,和大于31者失败。求必胜策略。设定状态表示为行动结束时剩下的sum。假如每种牌无限制张数,那么就等于抢七,必胜态为0、7、14、21、28。但是当给定一些牌的时候,只能搜索。类似记忆化搜索,注意:牌数量不同,节点的状态也不同。当抢到必胜态之后,上一个可以到达必胜态的节点一定是必败态。以无限制扑克战为例,
2008-04-23 19:54:00 1360
原创 ZOJ 2834 Maximize Game Time
07年浙大赛的一题。TreeDp。感谢某位不知名牛人。 /**//*每次遍历子结点来进行DP过程。每个结点保留下3个值,以它为跟的树所有结点值的和(结点数)totel,进行到这个结点的最优值finish,以及不能走到当前结点,子结点最多可以走的数目。这样,每个结点的3个值都可以通过所有子结点的值来确定。计算完毕后,需要注意的是这题里的数据可能是一个森林,不在要求树中的所有结点可以全部
2008-04-21 13:58:00 1358 1
原创 ZOJ Summary
最近三个月做了一些题,收获不少,总结一下。1009 Enigma 模拟,很繁很暴力,找规律的题目,难度B1010 Area 计算几何,套公式,无聊题。难度C1011 NTA 树状结构深搜。难度B1012 Mainframe 模拟,链表居然WA。难度B1013 Great Equipment DP,难度A1014 Operand 模拟,难度B1015 Fi
2008-04-18 20:19:00 2205 1
原创 ZOJ 1346 Comparing Your Heroes
AndyZh说过:“我们想求一堆人的排列总数,它等于在这一堆人中 减去 每一个 入度为 0 的人,剩下的人的排列总数的和。具体实现也借助了回溯法。如果只剩下一个人,那么排列总数为1,这是递归的边界。 ” #include cstdio>#include string>#include map>using namespace std;int M, N, a[16][16];cha
2008-04-17 19:43:00 1269
原创 ZOJ 2646 Joseph's Problem
给出K和N,求 ,N,K 9。数据如此BT,从1到N穷举是不可能的。不妨列出小规模时的情况。比如N = 5,K = 5。5%5=0 5/5=15%4=1 5/4=15%3=2 5/3=15%2=1 5/2=25%1=0 5/1=5可以看到当商相同时,余数成等差数列,这是题目的关键。所以我们可以穷举商,计算等差数列之和。 #include cstdi
2008-04-08 19:21:00 1082
原创 归并排序和求逆序数对
合并排序(MERGE SORT)是又一类不同的排序方法,合并的含义就是将两个或两个以上的有序数据序列合并成一个新的有序数据序列,因此它又叫归并算法。它的基本思想就是假设数组A有N个元素,那么可以看成数组A是又N个有序的子序列组成,每个子序列的长度为1,然后再两两合并,得到了一个 N/2 个长度为2或1的有序子序列,再两两合并,如此重复,值得得到一个长度为N的有序数据序列为止,这种排序方法
2008-04-06 13:10:00 2859 4
转载 弦图判断
定义: 无向图中,如果任意边数大于3的环,至少存在一条边连接环中不相邻的某两 个点,则称此图为弦图(Chordal Graph)。 zoj1015的题目: 判断无向图是否为弦图,是则输出Perfect,否则输出Imperfect。 以下是时间复杂度为O(n+m)的算法,n是图的点数,m是图的边数。 第一步:给节点编号 设已编号的节点集合为A,未编号的节点集合为B 开始时A为空,B包含所有节点。 f
2008-04-04 19:41:00 2339
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人