自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(344)
  • 资源 (2)
  • 收藏
  • 关注

原创 算法竞赛入门经典(第二版)-刘汝佳-第五章 C++与STL 习题(13/16)

说明本文是我对第五章16道习题的练习总结,建议配合紫书——《算法竞赛入门经典(第2版)》阅读本文。 另外为了方便做题,我在VOJ上开了一个contest,欢迎一起在上面做:第五章习题contest 如果想直接看某道题,请点开目录后点开相应的题目!!!习题习5-1 UVA 1593 代码对齐(vector)思路 此题的重点在于读入数据部分,读取每一行我用了getline,然后再用stringst

2016-02-21 15:37:25 2560

原创 算法竞赛入门经典(第二版)-刘汝佳-第五章 C++与STL 例题(9/12)

说明本文是我对第五章12道例题的练习总结,建议配合紫书——《算法竞赛入门经典(第2版)》阅读本文。 另外为了方便做题,我在VOJ上开了一个contest,欢迎一起在上面做:第五章例题contest 如果想直接看某道题,请点开目录后点开相应的题目!!!例题例5-1 UVA 10474 大理石在哪儿 (排序和查找)思路 这个题比较基础,排序用sort,查找用lower_bound,都是STL

2016-02-21 11:47:36 2402

原创 算法竞赛入门经典(第二版)-刘汝佳-第四章 函数与递归 例题+习题(15/16)

说明本文是我对第四章题目的练习总结,建议配合紫书——《算法竞赛入门经典(第2版)》阅读本文。 另外为了方便做题,我在VOJ上开了一个contest,欢迎一起在上面做:第四章contest 如果想直接看某道题,请点开目录后点开相应的题目!!!例题例4-1 UVA 1339 古老的密码思路 只需要分别统计两个字符串中26个字母出现的个数,然后对统计数组做一个排序,如果一样则结果为YES。 详细解

2016-02-19 22:43:18 4706 2

原创 算法竞赛入门经典(第二版)-刘汝佳-第三章 数组与字符串 例题+习题(17/18)

说明本文是我对第三章题目的练习总结,建议配合紫书——《算法竞赛入门经典(第2版)》阅读本文。 另外为了方便做题,我在VOJ上开了一个contest,欢迎一起在上面做:第三章contest例题例3-1 UVA 272 TeX 中的引号思路这个题主要讲带空格的输入输出处理。我总结了一下,主要有三种方案: 1、用getchar()一个一个字符处理 2、用fgets读入(gets已经过时) 3、用g

2016-02-19 17:28:15 6865 4

原创 《算法竞赛入门经典》(第二版)学习报告

《挑战程序设计竞赛》(第二版)做到后面越来越难了,而且有好多内容是纯数学或者几何的东西,比较耗时间。我个人觉得学算法应以常规算法为主,这里的常规算法指的是不需要太多的专业知识(数学、物理等)就能比较好理解的那些。算法掌握到一定阶段,打下非常好的基础,再去弄这些比较难啃的东西,这时候因为前面的积累,难啃的东西也变得不是那么难了。偶然的机会了解到《算法竞赛入门经典》(第二版)这本书,大致看了一下内...

2016-02-19 16:42:59 2300

转载 双向广度优先搜索算法框架

双向广度优先搜索算法是对广度优先算法的一种扩展。广度优先算法从起始节点以广度优先的顺序不断扩展,直到遇到目的节点;而双向广度优先算法从两个方向以广度优先的顺序同时扩展,一个是从起始节点开始扩展,另一个是从目的节点扩展,直到一个扩展队列中出现另外一个队列中已经扩展的节点,也就相当于两个扩展方向出现了交点,那么可以认为我们找到了一条路径。双向广度优先算法相对于广度优先算法来说,

2016-02-13 14:55:19 6797 2

原创 《挑战程序设计竞赛》4.2.2 游戏必胜策略-Nim与Grundy数 POJ2975 1704 2311 3537 2315 CF138D(2)

POJ 2975 取石头问题http://poj.org/problem?id=2975题意有n堆石头,甲乙两个人轮流拿,每次从某堆石头中拿出至少一个。若轮到某人时无石可拿,此人输。 当甲存在必赢策略时,并不意味着他从任意一堆里选石头都能赢。求他有多少种拿石头的方案可以使乙达到必输态(也就是甲必赢)。思路判断输赢根据下式: X=a[0]^a[1]^……a[n] 当X为0则必输,大于0则必赢。

2016-01-18 15:48:49 1176

原创 《挑战程序设计竞赛》4.2.1 游戏必胜策略-推理与动态规划算法 POJ2484 2348 1082 2068 3688 1740(1)

POJ 2484 取硬币游戏http://poj.org/problem?id=2484题意给出N个硬币围成一个圈,然后两个人从这圈硬币中轮流拿1个或毗邻的2个硬币。直到全部拿完为止,最后一个拿的人为,胜者。思路当n==1 || n==2时,明显先手必胜。 当n==3时,明显先手必败。 由于每次只可取1或2个,而取2个时,2个必须相邻,推断有: 当n>3时,若n为偶数,先手无论如何取,后手可在

2016-01-18 15:12:30 959

原创 POJ前面的题目算法思路【转】

1000 A+B Problem 送分题 49% 2005-5-71001 Exponentiation 高精度 85% 2005-5-71002 487-3279 n/a 90% 2005-5-71003 Hangover 送分题 62% 2005-5-

2016-01-08 22:07:51 5442

原创 《挑战程序设计竞赛》3.4.2 动态规划-矩阵幂 POJ3070 3734 3233 2663 3420 3735

POJ3070http://ac.jobdu.com/problem.php?pid=3070题意求斐波那契数列第n项的值对10^4取余的结果。思路由于n很大,常见的数组递推肯定是不行的。要用矩阵幂来做,时间复杂度O(logN)。这里不再讲解,书中以及题目中都有讲解或提示。代码Source CodeProblem: 3070 User: liangrx06Memory: 176K

2016-01-06 22:33:33 752

原创 《挑战程序设计竞赛》3.4.1 动态规划-状态压缩DP POJ3311 2686 2411 2441 3254 2836 1795 3411(2)

POJ3311 旅行商问题http://ac.jobdu.com/problem.php?pid=3311题意给一个起点和终点相同的图,一个矩阵表示各个点之间的距离,求经过所有的点,回到原点的最下路径,点可以重复走。思路这个题基本等同于书中例题,唯一的区别是点可以重复走(其实这样对于书中的解法来说,更简单了)。 书中的DP解法是:将已经访问过的节点集合(起点0不算)记为S,当前所在的顶点为v,用d

2016-01-06 22:22:41 1321

原创 《挑战程序设计竞赛》3.3.2 数据结构-线段树和平方分割 POJ2991 3264 2104 3468 3368 3470 1201 UVA11990(4)

# http://ac.jobdu.com/problem.php?pid=题意思路代码# http://ac.jobdu.com/problem.php?pid=题意思路代码# http://ac.jobdu.com/problem.php?pid=题意思路代码# http://ac.jobdu.com/problem.php?pid=题意思路代码# http://ac.jobdu.co

2016-01-06 22:21:09 1211

原创 《挑战程序设计竞赛》3.3.1 数据结构-树状数组 POJ3468 1804 1990 3109 2155 2886(4)

# http://ac.jobdu.com/problem.php?pid=题意思路代码# http://ac.jobdu.com/problem.php?pid=题意思路代码# http://ac.jobdu.com/problem.php?pid=题意思路代码# http://ac.jobdu.com/problem.php?pid=题意思路代码# http://ac.jobdu.co

2016-01-06 22:19:15 976

原创 九度OJ 1391(递归) 1392(排序) 1393(归并) 1394(查找) 1395(贪心法)

1391:顺时针打印矩阵http://ac.jobdu.com/problem.php?pid=1391题意输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.思路实则为数组递归,注意

2016-01-03 17:57:44 704

原创 九度OJ 1386(最值) 1387(递归) 1388(递归) 1389(递归) 1390(递归)

1386:旋转数组的最小数字http://ac.jobdu.com/problem.php?pid=1386题意把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。思路这个题不就是求数组最小值吗?跟旋转有什么关系?代码#include <stdio.h>#define N 1000000int main(){ int

2016-01-03 17:46:45 468

原创 九度OJ 1376(最近零子序列、DP) 1377(序列、贪心) 1380(位运算) 1384(二分法查找) 1385(二叉树遍历)

1376:最近零子序列http://ac.jobdu.com/problem.php?pid=1376题意给定一个整数序列,求其最接近0的连续子串和。思路DP类题目,注意考虑正数负数两种情况,略复杂一些。代码#include <stdio.h>#include <stdlib.h>#include <math.h>#define N 100000struct st { int s;

2016-01-03 11:59:49 695

原创 九度OJ 1371(排序) 1372(DP) 1373(统计) 1374(统计) 1375(统计)

1371:最小的K个数http://ac.jobdu.com/problem.php?pid=1371题意输入n个整数,找出其中最小的K个数。思路排序然后输出。代码#include<stdio.h>#include<algorithm>#define N 200005using namespace std;int main(){ int n,k; int i

2016-01-03 11:44:05 605

原创 九度OJ 1366(栈操作) 1367(二叉树遍历) 1368(二叉树路径) 1369(字符串全排列) 1370(特殊数字查找)

1366:栈的压入、弹出序列http://ac.jobdu.com/problem.php?pid=1366题意输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。思路根据两个数组的值,还原栈的压入弹出过程,如果能够完全还原则答案为YES。代码#include <stdio.h>#define N 100000int stack[N], top;void init()

2016-01-03 00:23:34 727

原创 九度OJ 1361(反转) 1362(循环移位) 1363(判断) 1364(01背包) 1365(BFS)

1361:翻转单词顺序http://ac.jobdu.com/problem.php?pid=1361题意将一行英文句子按单词反转。思路二维字符串存储,反转外围即可。代码#include <stdio.h>#include <string.h>#define M 50000int main(void){ int n, i, j, m, k; char s[M+1]; whi

2016-01-03 00:12:14 695

原创 《挑战程序设计竞赛》3.2.5 常用技巧-坐标离散化 AOJ0531(1RE)

AOJ3061http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0531题意涂色:为了宣传信息竞赛,要在长方形的三合板上喷油漆来制作招牌。三合板上不需要涂色的部分预先贴好了护板。被护板隔开的区域要涂上不同的颜色,比如上图就应该涂上5种颜色。 请编写一个程序计算涂色数量,输入数据中,保证看板不会被护板全部遮住,并且护板的边一定是水平或垂

2016-01-01 14:48:09 1363

原创 《挑战程序设计竞赛》3.2.4 常用技巧-折半枚举 POJ2785 3977 2549

POJ2785http://poj.org/problem?id=2785题意输入n,表示a b c d 四个集合都有n个元素。之后每行输入4个集合中的一个元素。求这四个集合每个集合中拿出一个数相加等于0的组数。思路如果直接搜,复杂度为O(N^3),时间不满足要求。 折半搜索比较适合,把4个数字分成两份,分别两两求和,得到两个长度n*n的一维数组,排序后比较进行匹配即可。 另外这个题还可以用ha

2016-01-01 14:47:22 914

原创 《挑战程序设计竞赛》3.2.3 常用技巧-弹性碰撞 POJ3684 2674

#POJ2785[http://poj.org/problem?id=2785](http://poj.org/problem?id=2785)##题意将N个半径为R的球放入一个圆桶(圆桶口径刚好放入一个球),将圆桶竖直放着,最下端距离地面H高度,让球每隔一秒自由下落,求T时刻各个球距离地面的高度。

2016-01-01 14:45:46 768 1

原创 《挑战程序设计竞赛》3.2.2 常用技巧-反转 POJ3276 3279 3185 1222

POJ3276http://poj.org/problem?id=3276题意N头牛排成一列1<=N<=5000。每头牛或者向前(表示为F)或者向后(表示为B)。为了让所有牛都面向前方,农夫每次可以将K头连续的牛转向1<=K<=N,求操作的最少次数M和对应的最小K。思路所有情况穷举O(2^N)肯定超时。 顺序考虑每头牛的反转方向能不能行呢?因为想改变一头牛的方向就必定影响k头牛,但再思考一下,当一

2016-01-01 14:44:09 1469 1

原创 《挑战程序设计竞赛》3.2.1 常用技巧-尺取法 POJ3061 3320 2566 2739 2100(1)

POJ3061http://poj.org/problem?id=3061题意给出n个数,要求将这n个数两两相减,把这些相减得到的数排序后,输出位置在中间的那个数。思路如果两两相减再排序复杂度太高,肯定超时了,二分法求解复杂度将大大降低。 枚举最中间的那个数,然后判断一下相减得到的数有多少个大于等于枚举的数。 如何判断上面所说的那句呢,其实不用把每个数相减,只需要排序一下,然后将当前这个数 +

2015-12-31 22:58:19 717

原创 《挑战程序设计竞赛》3.1.5 二分搜索-其它 POJ1759 3484

POJ1759http://poj.org/problem?id=1759题意给出n个数,要求将这n个数两两相减,把这些相减得到的数排序后,输出位置在中间的那个数。思路如果两两相减再排序复杂度太高,肯定超时了,二分法求解复杂度将大大降低。 枚举最中间的那个数,然后判断一下相减得到的数有多少个大于等于枚举的数。 如何判断上面所说的那句呢,其实不用把每个数相减,只需要排序一下,然后将当前这个数 +

2015-12-31 22:55:51 480

原创 《挑战程序设计竞赛》3.1.4 二分搜索-最小化第k大的值 POJ2010 3662(2)

POJ2010http://poj.org/problem?id=2010题意给出n个数,要求将这n个数两两相减,把这些相减得到的数排序后,输出位置在中间的那个数。思路如果两两相减再排序复杂度太高,肯定超时了,二分法求解复杂度将大大降低。 枚举最中间的那个数,然后判断一下相减得到的数有多少个大于等于枚举的数。 如何判断上面所说的那句呢,其实不用把每个数相减,只需要排序一下,然后将当前这个数 +

2015-12-31 22:54:12 815

原创 《挑战程序设计竞赛》3.1.3 二分搜索-查找第k大的值 POJ3579 3685

POJ3579http://poj.org/problem?id=3579题意给出n个数,要求将这n个数两两相减,把这些相减得到的数排序后,输出位置在中间的那个数。思路如果两两相减再排序复杂度太高,肯定超时了,二分法求解复杂度将大大降低。 枚举最中间的那个数,然后判断一下相减得到的数有多少个大于等于枚举的数。 如何判断上面所说的那句呢,其实不用把每个数相减,只需要排序一下,然后将当前这个数 +

2015-12-31 22:50:51 634

原创 《挑战程序设计竞赛》3.1.2 二分搜索-最大化平均值 POJ2976 3111

POJ2976http://poj.org/problem?id=2976题意给出n个对,可以从中最多排除k个对,求∑a/∑b的最大值。思路二分法求解,书中例题跟这个题其实是一样的。 这个题对精度的要求其实并不像题目介绍中说的那么低,程序中应该写的更高一些才行。题目说0.001,实际上至少要0.0001.代码Source CodeProblem: 2976 User: liangrx0

2015-12-31 22:36:14 543

原创 《挑战程序设计竞赛》3.1.1 二分搜索-最大化最小值 POJ1064 2456 3258 3273 3104 3045

POJ1064http://poj.org/problem?id=1064题意给出n条线段,以米的单位给出,小数点后两位(精确到厘米),要你对这些线段裁剪,裁剪出m条等长的线段,并且让这些线段尽可能长另外线段的长度不能小于1厘米,如果筹不够m条,输出0.00。思路很明显的用二分法求解题目,二分法的的试验值实际上为题目增加了一个条件,加上这个条件判断是否符合题目要求即可。 但需要注意答案的精度会对判

2015-12-31 20:47:45 1106 1

原创 《挑战程序设计竞赛》2.6.3 数学问题-快速幂运算 POJ1995

POJ1995http://poj.org/problem?id=1995题意求(A1^B1+A2^B2+ … +AH^BH)mod M.思路标准快速幂运算题目,算法复杂度为logN。不需要解释,直接看代码好了。代码Source CodeProblem: 1995 User: liangrx06Memory: 204K Time: 329MSLanguage: C++

2015-12-31 00:04:32 575

原创 《挑战程序设计竞赛》2.6.2 数学问题-素数 AOJ0009 POJ3126 3421 3292 3641

AOJ0009http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0009题意求不大于n的素数个数。思路素数筛法可解,筛法过程中可顺便统计不大于n的素数个数。 另外这个题由于有多个测试数据,可预先求出题目所给数据范围的所有解。 素数筛法中我的写法里要注意数的范围,这个题中的i*i是可能超过int表示范围的,因而我提交了好几次都是RE,

2015-12-31 00:02:49 1164

原创 《挑战程序设计竞赛》2.6.1 数学问题-辗转相除法 AOJ0005 POJ2429 1930(1)

AOJ0005http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0005题意给定两个数,求其最大公约数GCD以及最小公倍数LCM。思路求最大公约数一般用辗转相除法,然后就得到了最小公倍数。 更详细的分析参见我的博客文章: 数论——最大公约数和最小公倍数算法代码#include <iostream>#include <cstdio>

2015-12-30 23:58:38 589

原创 《挑战程序设计竞赛》2.5.2 最小生成树 POJ3723 3169 1258 2377 2395 AOJ2224(1)

POJ3723POJ3169POJ1258http://poj.org/problem?id=1258题意有n个农场,已知这n个农场都互相相通,有一定的距离,现在每个农场需要装光纤,问怎么安装光纤能将所有农场都连通起来,并且要使光纤距离最小,输出安装光纤的总距离。思路求最小生成树,由于这个题直接给出了邻接矩阵,所以用prim算法比较合适。代码Source CodeProblem: 1258

2015-12-30 23:58:00 944

原创 《挑战程序设计竞赛》2.5.1 最短路 AOJ0189 2249 2200 POJ3255 2139 3259 3268(5)

POJ2139http://poj.org/problem?id=2139题意奶牛们最近要拍电影了…… 1、若两个的奶牛一起工作则,他们相互的度(degrees)为; 2、若两只奶牛a、b不一起工作,但与另有一只奶牛都和他们工作,则a、b的相互的度为2。 求奶牛的与其他奶牛的度的平均值的100的整数。思路本题题意可以变换的理解为如果N个点在一个集合中,则这些点之间的距离为1。然后由此建立一个无

2015-12-30 23:57:33 1093 4

原创 《挑战程序设计竞赛》2.4.2 数据结构-并查集 POJ1182 2236 1703 AOJ2170

POJ1182http://poj.org/problem?id=1182题目难得的中文题。。。 食物链 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 56252 Accepted: 16485 Description 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形。A吃B,

2015-12-30 23:56:41 1434 1

原创 《挑战程序设计竞赛》2.4.1 数据结构-优先队列 POJ2431 3253 3614 2010(3)

POJ3253http://poj.org/problem?id=3253题意有一块长木板,要经过n-1次切割将其切成n块FJ想要的木板,对于每块木板,没切割一次,将会消耗和这条木板长度值相等的金钱,问最少需要多少钱,可将木板切成自己想要的n块。思路这个题前面用贪心法已经解过了,贪心法朴素实现时间复杂度是O(N2)。 而如果用优先队列实现,复杂度将是O(N)次O(logN)。代码Source Co

2015-12-30 23:55:52 622

原创 《挑战程序设计竞赛》2.3.3 动态规划-进阶 POJ1065 1631 3666 2392 2184

POJ1065http://poj.org/problem?id=1065题意描述C小加有一些木棒,它们的长度和质量都已经知道,需要一个机器处理这些木棒,机器开启的时候需要耗费一个单位的时间,如果第i+1个木棒的重量和长度都大于等于第i个处理的木棒,那么将不会耗费时间,否则需要消耗一个单位的时间。因为急着去约会,C小加想在最短的时间内把木棒处理完,你能告诉他应该怎样做吗?输入第一行是一个整数T,表示

2015-12-29 13:57:26 886 4

原创 《挑战程序设计竞赛》2.3.2 动态规划-优化递推 POJ1742 3046 3181

POJ1742http://poj.org/problem?id=1742题意有n种面额的硬币,面额个数分别为Ai、Ci,求最多能搭配出几种不超过m的金额?思路据说这是传说中的男人8题呢,对时间和空间复杂度要求都挺高的。 朴素DP三重循环比较容易想到,但显而易见会TLE。 这里由于dp数组记录的是一个bool值(是否能搭配出某金额),记录的信息较少,因而存在浪费。优化思路是dp[i][j]记录用

2015-12-27 22:22:55 633

原创 《挑战程序设计竞赛》2.3.1 动态规划-基础 POJ3176 2229 2385 3616 3280

POJ3176Cow Bowling题意输入一个n层的三角形,第i层有i个数,求从第1层到第n层的所有路线中,权值之和最大的路线。 规定:第i层的某个数只能连线走到第i+1层中与它位置相邻的两个数中的一个。思路最显而易见的是使用二维数组动态规划计算。 比如dp[i][j]表示以第i行j列的位置作为终点的路线的最大权值。 (注意区分初始化时的意义) 那么dp[i][j]的最大值取决于dp[i-1

2015-12-19 16:04:25 515

原创 《挑战程序设计竞赛》2.2.2 贪心法-其它 POJ3617 3069 3253 2393 1017 3040 1862 3262

POJ3617Best Cow Line题意给定长度为N的字符串S,要构造一个长度为N的字符串T。起初,T是一个空串,随后反复进行下列任意操作: 从S的头部(或尾部)删除一个字符,加到T的尾部 目标是构造字典序尽可能小的字符串T。思路贪心算法,不断取S的开头和末尾中较小的一个字符放到T的末尾。但对于S的开头和末尾字符相同的情况下,需要比较下一个字符大小,这可以用如下算法实现: 按照字典序比较S

2015-12-18 15:07:38 670

Kerrighed集群操作系统分析

Kerrighed是基于linux的一种优秀的集群操作系统,本文是从某研究生毕业论文中摘录的一段,其中详尽的分析了kerrighed操作系统的基本原理。

2011-12-15

空空如也

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

TA关注的人

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