- 博客(17)
- 资源 (3)
- 收藏
- 关注
原创 zoj 1944 Tree Recovery
/* zoj 1944 图论 典型题,由树的前序遍历和中序遍历求后序遍历。 这题跟zoj_1500可以做比较 */ #include #include #include using namespace std; string ans,a,b; void build( int l1,int r1,int l2,int r2 ) { int i,len=0; if( l1
2012-02-23 21:47:18 2484
原创 zoj 1913 Euclid's Game
/* zoj 1913 博弈 思路:递推 举25 7为例,则代码中的vector中为3 1 1 3(大的数对小的数反复取整所得) 不妨把最后的获胜者标记为a,则vector中最后一个元素看起,3必定为a 取整,递推知道倒数第二个元素1为b(代表令一个人),第二个元素1为 a,剩下第一个元素3。要注意的是a是获胜者。假设整个3都是b所取整的,
2012-02-23 20:56:03 2507
原创 zoj 1942 Frogger
/* zoj 1942 最短路 简单最短路,要注意的是double的比较 */ #include #include #include #include #define MAX 2000000000 #define eps 1e-9 using namespace std; struct point { double x,y; }p[205]; double map[1010]
2012-02-23 20:54:16 2830
原创 zoj 2476 Total Amount
/* zoj_2476 字符串处理 简单的字符串处理,但有很多小问题需要注意,wa了数次才过。 注意点: 1.应该*100把小数点去掉,不要用double处理 2.结果小于10和100时的特判 3.不要在最前面输出',' 收获: 这题用double做时导致了各种错误。。double在比较的时候不能直接比较大小, 而要用eps控制。 */ #include #include #inclu
2012-02-22 20:54:46 2652
原创 zoj 1654 Place the Robots
/* zoj_1654 最大流(最大二分匹配) 这题大家可以看黄源河大牛的论文,很牛B的建图思路。 匈牙利算法易解之。 */ #include #include #include #include #define N 2550 using namespace std; char map[55][55]; bool gra[N][N],state[N]; int result[N];
2012-02-20 18:48:33 2625
原创 zoj 1610 Count the Colors
/* zoj_1610 模拟 线段树的典型题,不过好久没碰线段树了。发现数据才8000试了下模拟,果然 没有TLE。 */ #include #include #include #include #include #define N 8010 using namespace std; struct segment { int l,r,v; segment( int
2012-02-19 17:59:16 2285
原创 zoj 1854 Election
/* zoj_1854 字符串处理 说实话,这题也太恶心了。。数字后面是有可能有多个空格的。。 */ #include #include #include #include using namespace std; map mp; map num; int main() { int n,m,i,maxi; string a,b; map ::iterator
2012-02-18 11:06:09 2363
原创 zoj 2376 Ants
/* zoj_2376 模拟 思路:最短时间容易的,最长时间,关键要注意到每个蚂蚁速度是一样的,作图 通过距离的等价替换可以发现我们要求的其实就是(最右边的蚂蚁-左终点) 和(右终点-最左边的蚂蚁)的较大值 */ #include #include #include #include using namespace std; int main() {
2012-02-17 21:17:55 2326
原创 zoj 2284 Inversion Number
/* zoj_2284 dp 简单dp。 题意:求n个元素(1到n)逆序对为k的排列个数 思路:dp[i][j]表示i个元素有j个逆序对的排列数 注意:1,0的数据输出1 */ #include #include #include using namespace std; long long dp[25][205]; int main() { int n,k,i,j;
2012-02-12 23:05:38 2217
原创 zoj 1838 Crypt Kicker II
/* zoj_1838 字符串处理 题意:根据已经给出的一组字符串(其中一个对应the quick brown fox jumps over the lazy dog) 破译出其他字符串。 注意:输入格式注意,还有就是那句话中已经包含26个字母的了,没solution的情况是没有长度相等 的或者一个字母对应两个不同的~ */ #include #include #
2012-02-11 15:40:29 2467 1
原创 zoj 2527 Series
/* zoj_2527 dp 题意:从给出的序列选出n个数,组成等差数列,求最大的n 思路:dp[i][j]表示以num[i]、num[j]开头的数列,记忆化搜索易写 这题要注意的是必须剔除相等元素,再查找数时可用二分。 */ #include #include #include #include using namespace std; int dp[1010][101
2012-02-09 22:51:55 2467
原创 zoj 1579 Bridge
/* zoj_1579 贪心 送两个人过桥为一轮进行循环,设a,b,c,d为要过桥的四个人(其中a<b<c<d) 第一种方式:a,b过桥,a回来 a,c过桥,a回来 a,d过桥。 第二种方式:a,b过桥,a回来 c,d过桥,b回来 a,b过桥。 即比较 a+2*b+d,2*a+c+d的大小。 */
2012-02-09 21:33:10 2558 1
原创 zoj 2705 Dividing a Chocolate
/* zoj_2705 递推 引用watershi神牛的解释: 从描述中可以知道,完成第一刀之后后面的发展是确定的,但由于规模很大, 我们不可能去枚举第一刀的情况。可以反过来思考,事实上,知道了最后的 结果,比如最后是两个a*b的矩形,那么我们也可以反过来推出之前较大的那 个矩形依次是2a*b, 3a*b, 5a*b, 8a*b …,这不正是著名的Fibonacci数列么。 目标是a*b尽量
2012-02-09 21:16:57 2538
原创 zoj 2704 Brackets
/* zoj_2704 模拟 用栈模拟。感觉题目说得不是很清楚,wa了数次才过。。 [][]()()这种数据是整串输出的。 */ #include #include #include #include #include using namespace std; struct node { int id,len; char v; }; stack s; int nu
2012-02-09 21:12:13 2165
原创 zoj 2588 Burning Bridges
有向图强连通分量的Tarjan算法:http://www.byvoid.com/blog/scc-tarjan/ /* zoj 2588 求割边 Tarjan算法。第一次写tarjan,完全学习别人写的。 注意点: 1.必须变成有向图存储,对于一条无向边,从一个方向访问过,则另一个方向不能访问。 2.因为两点之间可能有多条边,重边必定不是割边,需标记。 3.临界表存储。 */ #inclu
2012-02-06 12:26:14 2360 1
原创 zoj 2202 Alphacode
/* zoj_2202 dp 简单dp, dp[i]=dp[i+1]+dp[i+2] , 当然还要加限制条件,详见代码。 特别注意的是对0的处理。 */ #include #include #include using namespace std; long long dp[10000]; string s; bool check( int a,int b ) { if( s
2012-02-04 18:46:30 2263
原创 zoj 1789 The Suspects
/* zoj_1789 并查集 并查集的简单应用,可以继续优化。 */ #include #include #include #include #define N 30002 using namespace std; int father[N],num[N],h[N]; void init( int n ) { int i; for( i=0;i<n;i++ )
2012-02-04 15:34:42 2201
瑞士军刀NC
2011-10-03
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人