11 2012 档案
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1257题目链接:1257解题思路: 一开始一直纠结在求最小下降的次数(从大减少到最小的的为一次)。 想了很久才恍然大悟,这题可以转换成求最长非降子序列。贪心思想。 1 http://acm.hdu.edu.cn/showproblem.php?pid=1257#include <iostream> 2 #include <cstdio> 3 #include <cmath> 4 #include <algorithm> 5 #include <c
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1753题目大意: 给你两个不超过400位的带小数的整数,求出透明的和,要求小数后面的后缀0不能输出。解题思路:题目很简单,思路也比较清晰。不难,但就是要注意的地方很多。 小数点后面的位数可以直接相加,小数点前面的按末尾相加(和小数点后相加不同)。1.注意小数点的进位,如果0位(大于10)还要继续进位,大于10则取余后将tmp2记为1,不大于10则tmp2记为0,小数点前的第一位加tmp2。我就是先进完位再加tmp2错了几次。2.输出的时候判断.要不要输出。测试样例在代码最后,过了这个基本就能过吧。。
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3242题目大意:给你两个集合,A,B,让你实现操作A+B,A-B(集合内能存相同的)。解题思路:开始脑抽了,我居然用遍历进行判断一个一个去标记去判断,完全的胡搞,各种测试各种对,wrong answer到死,下次再来检查。过不了,果断换一种写法。用vector去存储相加删除,代码简洁清晰,汗颜,开始怎么没想到呢。AC代码: 1 #include <iostream> 2 #include <cstdio> 3 #include <vector> 4 #includ
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4334题目大意:输入5行,每行有n个数字,让你从这5行中每行抽取一个数让这5个数的和我0。如果存在输出Yes,否则输出No解题思路:用O(n^2)的时间求出前两行所有sum的值存入hash表中,注意存的时候存它的相反数,下面再解释。然后再用O(n^3)的时间枚举后三行所有的sum值,现在只需要判断hash表中是否有它对应的数,因为上面我们存的是相反数,这就是我们上面为什么存相反数的原因了。如果找到了,直接跳出循环。还有一点要注意的是,hash表不能赋初值,hash表最好开到它所有数据十倍左右,藐视我
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3391(3391) http://acm.hdu.edu.cn/showproblem.php?pid=4431(4431) 3391比较简单,这里我只讲讲4431的题目意思和解法,4431会了3391就
阅读全文
摘要:比赛网址链接:http://www.acdream.net/contest.php?cid=1010A题: 按位异或。讨论情况。C题:经典广搜。先打表存储各个数的因子。G题:可以说是规律题。常规方法nlogn肯定超时。H题:简单的二分匹配。I题:树形dfs。A题目大意:给你两个有同样多元素的集合,求一个最小的x,x异或A中所有元素的结果都落在B集合中,且形成一一映射。解题思路:关键就在于一一映射,并且先把所有的数都转换成二进制 => A,B中元素每位对应的0和1计算出来。假设第1位, A有a0个0,a1个1,b有b1个1,b0个0,如果a0==b0&&a1==b1 那么x对应的
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1114题目大意:给你一个体积为V的猪猪存钱罐,然后有一些体积为c,价值为w的硬币,问你如何装硬币能使总价值最大。解题思路: 这题有两点错误很容易犯。 第一:用了01背包而不是完全背包。 第二:初始化问题还没搞清楚(这里的初始化指的是不同类型的最大值初始化的条件不一样)1、题目给你的硬币数量没规定只能取一次,能取多次当然就是完全背包了,当然也有可能是多重背包,这里不讨论。2、重点在第二点了。背包进行初始化时,如果恰好完全装满,则dp[0]赋值为0,其余赋值为无穷。如果只希望价值最大,则初始化时将dp[
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1058(1058) http://acm.hdu.edu.cn/showproblem.php?pid=3199(3199)题目大意:给你四个素数2,3,5,7,只由它们四个组成合数,对这些合数从大到小进行排列,求第n个合数的大小。解题思路: 一看到这题,开始想要暴力,从1到Max进行横扫遍历,ok这题暴力没问题1171ms,因为题目给了限制n最大只有5842,如果我给的数很大呢,比如n=100000,暴力明显TLE。 所以这题我们要换种思路,因为题目只给了4个数(如果题目...
阅读全文
摘要:题目链接:http://acm.hust.edu.cn:8080/judge/problem/viewProblem.action?id=25979题目大意:一根长L厘米的木棍上有n只蚂蚁,每只蚂蚁有个开始的位置和爬行方向,速度为1.当两只蚂蚁相撞后,两者同时掉头继续爬行,求按输入顺序给出每只蚂蚁T秒后的位置后朝向。解题思路: 1.每只蚂蚁相撞后同时掉头可以看做对穿而过,关键的问题就在于求位置的变化。 2.按位置从小到大排序,可以惊奇的发现排序后(befor数组和after数组)所有的蚂蚁相对位置并没有变化,改变的只是朝向。 1 #include <iostream> 2 #inc
阅读全文
摘要:题目链接:http://acm.hust.edu.cn:8080/judge/problem/viewProblem.action?id=15133题目大意:给一个周长为10000的园,圆上等距分布着n个雕塑,现在要新增m个雕塑,要求n+m个雕塑最终也等距,问如何移动这n个雕塑的部分雕塑,让其移动总距离和最小。解题思路:先计算让n+m个雕塑固定(周长是固定的),因为雕塑最终要移到这些位置。再从n+m个点中选择一个固定点,以它为起始再对n-1个点进行圆周上等距分布。这两种情况下的点不一样,可以记为黑与白,让n-1个白点移到离本点最近的黑点算出来的移动距离总和就是最小了。小知识: floor:下位
阅读全文
摘要:题目链接:http://acm.hust.edu.cn:8080/judge/problem/viewProblem.action?id=14074题目大意: 给你一个n个点加权无向图,要你从里面找一个路径最短的环,每个点只能经过一次 ,如果存在这样的最短环则把路径给打印出来,如果有多个,打印一个出来即可。解题思路:最小环的定义:经过一条简单路径(除起点每点只经过一次)回到起点成为环,并且环的总长度最小称为最小环。开始直接用floyd求每个点的dist[X][X],发现输出的时候问题很大,本题是floyd的扩展板。如果简单的floyd打印路径算法还不熟悉可以看看这个博客的解释,很详细。http
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1892题目大意:有很多方格,每个方格对应的坐标为(I,J),刚开始时每个格子里有1本书,然后让你统计一片区域有多少本书,还可以增加书和减少,移动书。解题思路:和一维树状数组没撒子区别。一维扩展到二维而已。需要注意的两点是:1.x,y坐标从0开始,所以存储更新的时候坐标分别加1进行更新。因为0坐标会进入死循环。 2.区间求和的时候bit数组里面存的是它整个左下角的和,所以还要进行操作(即下面的find函数)让它表示的此位置的数目。 1 #include <iostream> 2...
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4000题目大意:给出n个数,求(x<z<y)的次数 。(x,y,z一次先后出现)解题思路:题目数据量很大,暴力肯定不行的。设现在出现的位置为x,后面比它大的数有s个。s个选两个(y,z)有s*(s-1)/2种。此时yz无序。然后按题目要求x<z<y,所以还要把x<y<z除掉。 1 #include <iostream> 2 #include <cstdio> 3 #include <algorithm> 4 #include &
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1541题目大意: 开始输入一个n(表示有n颗星星)。接下来n行,每行输入一个x,y,代表星星的坐标,注意y是递增输入。求各阶段星星的等级(阶段分为0~n-1)有多少,星星等级数计算方法为本星星左下角的有的星星个数。 1 #include <iostream> 2 #include <cstdio> 3 #include <algorithm> 4 #include <cstring> 5 using namespace std; 6 7 const i
阅读全文
摘要:题目链接:http://acm.timus.ru/problem.aspx?space=1&num=1260题目大意:有n个数1—n,将他们排成一列。最左边必须是1,后面排列的数字和与他们它们相邻的数字只差不能超过2,求有多少中排列方式。解题思路:一开始看到这题,才55个点,果断dfs,结果TLE。不过至少答案是正确的,然后把答案给记录起来,仔细一分析,发现有规律可寻,打表,果断过了。规律递推式:dp[n]=dp[n-1]+dp[n-3]+1。搜狗一下发现别人此题写的是DP,囧。然后又思考了一下,果然如此。n个人时求dp[n]。第2个位置放2时有dp[n-1]种;第2个位置放3,第3个
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3183题目大意:给你一串数字,要你删去n个数字,使得删去n个数字后数值最小。解题思路: 蛋疼的水题,搞了我一天。开始是暴力模拟,各种测试对但就是过不了。所以换了个写法。 思路主要是这样的: 因为需要你删除m个数使得结果最小,所以每次对字符串进行一次遍历,从前往后,只要a[i]>a[j] (j的位置为i后面未标记的第一个) 则对a[i]进行一次标记(赋赋值)将其除外,进行n次遍历,这样就删除了n个数字。因为删除的都是和后面比较相比下大的,所得结果当然就最小了。 1 #include <io
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3127题目大意:一个大矩形,要你分割成小矩形(只能水平和竖直切割),每个小矩形都有一个价值,问如何分割能得到最大总价值。解题思路:完全背包思想,枚举所有可能情况。对于枚举每个小矩形都可以横放竖放两种情况。对于每种情况都有两种切割方式:横向切割或者竖向切割。 1 #include <iostream> 2 #include <cstdio> 3 #include <algorithm> 4 #include <cstring> 5 using names
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3172题目大意: 找朋友,遇见新朋友就把他们的朋友圈子合并,输出总的朋友数。否则若已经在同一个,则直接输出就行。解题思路:明显的并查集,朋友数值需要再开一个数组存储父节点以下圈子人数,不在同一圈子合并就是。但是敲出代码后你会果断发现TLE。网上很多解题报告也是TLE,赛后的数据藐视加强了很多。用并查集+map暴搞明显要超时。这里就有点小技巧,对map进行指针优化处理。 1 #include <iostream> 2 #include <cstdio> 3 #include &
阅读全文
摘要:由于冒泡排序是以相邻元素来比较和交换的,因此,若一个元素离其最终位置较远,则需要进行多次的比较和移动操作。而快速排序则很好的解决了上述问题。 所以,可以说快排是冒泡排序的改进版本。 基本思想:首先选定一个元素作为中间元素,然后将表中所有元素和该元素相比较,将表中比中间元素小的元素调到表的前面,比中间元素大的元素调到表的后 面,再将中间元素放到这两部分之间作为分界点,由此而得到一个划分。然后再对左右两部分分别进行快速排序(即对所得到的两个子表再采用相同的方式来划分和 排序,直到每个子表仅有一个元素或为空表为止,此时便得到一个有序表)。代码一: 基本思想:p、r分别是待排数组的上下界。首先,用te
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3038题目大意:给你n给整数,m次操作。每次操作是给出三个整数a,b,c; 子序列a~b的和为c。找出m次操作中有多少次不合法,不合法的操作舍去。解题思路:先开一个dis[n]数组,dis[x]记录的是与父节点的距离。d[x]记录的是[0,x]的和 dis[x]=d[x]-d[pre[x]];对于每个操作:1.如果操作合法,则进行更新。 注意:节点小的作为父节点放前面。2. 如果不合法(前提是父节点相同),即dis[b]-dis[a]不等于c,次数加1. 1 #include <iostrea
阅读全文