
+基础算法
文章平均质量分 77
hcbbt
这个作者很懒,什么都没留下…
展开
-
UVALive 3635 Pie 切糕大师 二分
题意:为每个小伙伴切糕,要求每个小盆友(包括你自己)分得的pie一样大,但是每个人只能分得一份pie,不能拿两份凑一起的。做法:二分查找切糕的大小,然后看看分出来的个数有没有大于小盆友们的个数,它又没说每个pie都要分完,分不完的留给工作人员吃嘛。代码:/** Author: illuz * Blog: http://blog.youkuaiyun.com/hcbb原创 2013-09-10 01:04:24 · 2186 阅读 · 0 评论 -
UVALive 3971 Assemble 电脑配件 二分+贪心
题意:某人想组装电脑,有很多电脑配件可以选,每样都有它的价格和质量,每种配件一定要买一个,现在给出钱数,求能组装出来的电脑里面配件质量最便宜的是多少。当然不能超出预算的啦。每次枚举那个最便宜的,然后贪心,每次找价格最小且价格大于最便宜的,如果超支就向前二分,否则向后二分。这题折腾了一晚上 = =,差点跪了。。。最后发现排序没处理好,郁闷。。。得先排前再排质量。代码:/** Au原创 2013-09-10 00:21:47 · 1856 阅读 · 0 评论 -
UVALive 2519 Radar Installation 雷达扫描 区间选点问题
题意:在坐标轴中给出n个岛屿的坐标,以及雷达的扫描距离,要求在y=0线上放尽量少的雷达能够覆盖全部岛屿。很明显的区间选点问题。代码:/** Author: illuz * Blog: http://blog.youkuaiyun.com/hcbbt* File: l2911.cpp* Create Date: 2013-09-09 20:51:原创 2013-09-09 21:11:19 · 1756 阅读 · 0 评论 -
hdu 4708 Rotation Lock Puzzle 2013年ICPC热身赛A题 旋转矩阵
题意:给出一个n*n的矩阵,旋转每一圈数字,求出对角线可能的最大值,以及转到最大时的最小距离。只要分析每一层就可以了,本来想用地址传递二维数组,发现行不通,改了一下就行了。这里有个坑,比如:1 1 9 9 11 1 1 1 11 1 1 1 11 1 1 1 1很明显最大的就是将一个9转到矩阵角,而这里更新最大值时很容易把另一种情况屏蔽掉,从而错过了更少步骤达到最大值的原创 2013-09-08 22:52:30 · 1545 阅读 · 0 评论 -
hdu 4706 Children's Day 2013年ICPC热身赛A题 模拟
题意:按字母顺序排列成n型,简单的模拟题。当字母排到z时从a开始重新排起。代码:/** Author: illuz * Blog: http://blog.youkuaiyun.com/hcbbt* File: a.cpp* Create Date: 2013-09-08 12:31:36* Descripton: simulate *原创 2013-09-08 22:33:41 · 1868 阅读 · 0 评论 -
UVALive 2326 Moving Tables 贪心
题意:你有几个搬东西的任务,从一间教室到另一间需要10分钟,但是在此期间,你需要经过的走廊不能又其他任务占用,求最短时间。教室分布如下:很明显的贪心,其实就是找出最少有几个不相交区间就可以了,循环找出来,复杂度为O(n^2),这样是可行的,因为数据量不是很大,只到200。但是如果数据量大点就会超时了,于是我想了个o(nlogn+n)的办法,排序后遍历一遍,拿个数组记录每一组不相原创 2013-09-07 15:50:28 · 1333 阅读 · 0 评论 -
HackerRank Algorithms-Search-Flowers 贪心
题目点此题意:K个小伙伴买N个多花,老板很奇葩,不想买太多花,如果有人已经买过x朵花了,那么买下一朵花就要付x+1倍的价格。给出每朵花的价格,求最少花多少钱都把花买下。分析:每个小伙伴买花时肯定是先买原价贵的,不然就吃亏了是不是。所以贪心策略就是把价格排序下,先让每个小伙伴把一血献给最贵的那几朵花,每次都买剩下的花最贵的那几朵,这样就是最优的了。一遍遍历即可,复杂度为O(n)。代码原创 2013-09-07 10:54:39 · 1497 阅读 · 0 评论 -
UVALive 2322 Wooden Sticks 截木棍 排序+贪心
题意:给出n段木棍的首尾坐标,求出(两个坐标都)非降的木棍序列的最小个数。排序后模拟即可。代码: /* * Author: illuz * Blog: http://blog.youkuaiyun.com/hcbbt * File: uvalive2322.cpp * Lauguage: C/C++ * C原创 2013-09-07 10:24:23 · 1665 阅读 · 0 评论 -
UVA 10148 Advertisement 贴广告的艺术 贪心 区间选点
题意:一段路上,给出n个慢跑者跑步的区间,给出k,要求让每个慢跑者都能看到k个广告,区间都是整数操作,也就是说一个广告只能放在一个整数上,求最小贴的广告数。分析:贴小广告的也好辛苦啊(大雾)。注意如果区间长度小于k的话贴满了就行。这就是区间选点问题的变形题。排序后从每个区间后面选起就行了。代码: /* * Author: illuz * Blog:原创 2013-09-07 10:18:37 · 1900 阅读 · 0 评论 -
UVA 10041 Vito's Family 求中位数 模拟
很水,就是找出一个数,让它与数组各数的距离和最小。很明显是中位数,模拟即可。代码: /* * Author: illuz * Blog: http://blog.youkuaiyun.com/hcbbt * File: uva10041.cpp * Lauguage: C/C++ * Create Date原创 2013-09-06 21:32:59 · 2042 阅读 · 0 评论 -
UVA 11129 An antiarithmetic permutation 非等差数列 贪心 递归
题意:给出n,让你把0,1,2,3...n排序,使其的子序列(>=2)都是非等差数列。额,这边有个trick,只要对序列按奇偶位置分成两个序列,然后对两个子序列同样进行分类,最后排出来的一定是非等差数列。代码: /* * Author: illuz * Blog: http://blog.youkuaiyun.com/hcbbt * File:原创 2013-09-06 21:28:41 · 2060 阅读 · 0 评论 -
UVA 10245 The Closest Pair Problem 最近点问题 分治算法
题意,给出n个点的坐标,找出两点间最近的距离,如果小于10000就输出INFINITY。纯暴力是会超时的,所以得另辟蹊径,用分治算法。递归思路将点按坐标排序后,分成两块处理,最近的距离不是在两块中的一块中,就会存在于跨越中线的点对中。查找跨越中线的点比较麻烦,之前已经求出两块中的最小距离,只要在x范围在[m-d,m+d]的点中找对,更新最小距离,最后返回最小距离即可。代码: /原创 2013-09-04 21:28:16 · 3858 阅读 · 0 评论 -
UVA 10718 Bit Mask 贪心+位运算
题意:给出一个数N,下限L上限U,在[L,U]里面找一个整数,使得N|M最大,且让M最小。很明显用贪心,用位运算搞了半天,样例过了后还是WA,没考虑清楚。。。然后网上翻到了一个人家位运算一句话解决了 = =....ORZ...人家的分析:(by天然呆大神)儘量讓 N 中為 0 的位元,M 為 1;N 為 1 的位元, M 為 0。因此從高位往低位檢查,如果 N 為 1(M 儘量原创 2013-09-04 11:20:42 · 2072 阅读 · 0 评论 -
UVA 10716 Evil Straw Warts Live 回文数 贪心
题意:给出一串字符串,每次交换相邻的两个字符,求到达回文串的最少交换次数。每次找最外面的两个字母,如果相同就向内缩进判断,如果不同,就找到里面能够让两边相同的最近的字符,进行交换,然后向内缩进判断。调了挺久,以后一定要把算法搞清楚再敲。。。代码: /* * Author: illuz * Blog: http://blog.csdn.n原创 2013-09-04 01:09:45 · 1846 阅读 · 0 评论 -
UVA 11100 The Trip, 2007 贪心(输出比较奇葩)
题意:给出n个包的大小,规定一个大包能装一个小包,问最少能装成几个包。只要排序,然后取连续出现次数最多的数的那个次数。输出注意需要等距输出。代码: /* * Author: illuz * Blog: http://blog.youkuaiyun.com/hcbbt * File: uva11100.cpp * Laugu原创 2013-09-03 16:53:00 · 2594 阅读 · 0 评论 -
UVA 10020 Minimal coverage 区间覆盖问题 贪心
题意:给出M,以及多个区间,求能覆盖[0,M]的最少的区间。小白上以及给出了很好的思路了。但是实现起来卡了卡了好久,果然若菜编码能力是硬伤啊 orz。。。用递归实现的,回头研究别人做法去。。。代码: /* * Author: illuz * Blog: http://blog.youkuaiyun.com/hcbbt * File:原创 2013-09-01 16:58:16 · 1411 阅读 · 0 评论 -
UVA 993 Product of digits 数字之积 贪心水题
题意:求出一个数,各个位数上相乘的积等于所给的数。枚举2-9,如果找到一个数能整除那个数就枚举下一位,递归即可。代码: /* * Author: illuz * Blog: http://blog.youkuaiyun.com/hcbbt * File: uva993.cpp * Lauguage: C/C++原创 2013-09-01 00:58:55 · 1615 阅读 · 0 评论 -
NYOJ 45 棋盘覆盖 模拟+高精度
题意就不说了,中文题。。。小白上讲了棋盘覆盖,于是我就挖了这题来做。棋盘覆盖的推导不是很难理解,就是分治的思想,具体可以去谷歌下。公式就是f(k) = f(k - 1) * 4 + 1,再化解下就是4^0 + 4^1 + 4^2 + ... + 4^(n-1)。思路很简单,但是题目没想象中的简单,刚开始天真的用递归模拟了下就交上去,立马wa掉。。。发现即使用Long long类原创 2013-08-31 21:40:41 · 1575 阅读 · 2 评论 -
UVA 10714 Ants 蚂蚁 贪心+模拟 水题
题意:蚂蚁在木棍上爬,速度1cm/s,给出木棍长度和每只蚂蚁的位置,问蚂蚁全部下木棍的最长时间和最短时间。模拟一下,发现其实灰常水的贪心。。。不能直接求最大和最小的= =。只要求出每只蚂蚁都走长路下木棍时的最大值,和走短路时的就行了。代码: /* * Author: illuz * Blog: http://blog.youkuaiyun.com/原创 2013-08-29 23:27:23 · 2137 阅读 · 0 评论 -
UVA 311 Packets 贪心+模拟
题意:有6种箱子,1x1 2x2 3x3 4x4 5x5 6x6,已知每种箱子的数量,要用6x6的箱子把全部箱子都装进去,问需要几个。一开始以为能箱子套箱子,原来不是。。。装箱规则:可以把箱子都看成正方体,装在6x6的盒子里。典型的贪心题。思路:(参考了Starginer大神的)①每个6*6的都占一个箱子。②每个5*5的放在一个箱子里,同时里面还能装11个1*1的。③每原创 2013-08-29 20:55:32 · 2716 阅读 · 0 评论 -
UVA 10026 Shoemaker's Problem 鞋匠的难题 贪心+排序
题意:鞋匠一口气接到了不少生意,但是做鞋需要时间,鞋匠只能一双一双地做,根据协议每笔生意如果拖延了要罚钱。给出每笔生意需要的天数和每天的罚钱数,求出最小罚钱的排列顺序。只要按罚款/天数去从大到小排序,如果比例一样就按序号排序(要求字典序)。解释我就不献丑了,附上Staginner大神的证明:对于为什么贪心策略是这个样子的,我们不妨拿相邻的两个事件a、b来说明一下。由于a、b之后的事原创 2013-08-26 00:01:09 · 3313 阅读 · 0 评论 -
UVA 10700 Camel trading 无括号的表达式 贪心
题意:给出只包含数字和+*的表达式,你可以自己安排每一个运算的顺序,让你找出表达式可能得到的最大值和最小值。很明显,先乘后加是最小值,先加后乘能得到最大值。其实不是很明显。。。证明下:数字的范围是大于等于1的,所以a+b*c如果先考虑加法就变成(a+b)*c,变换下就是ac+bc,而先考虑乘法的话就是a+bc,由于c是大于等于1的,所以ac+bc>=a+bc,先考虑加法结果会不小于原创 2013-08-26 00:00:42 · 1781 阅读 · 0 评论 -
UVA 10340 All in All 子序列判定 贪心
题意:给出两个字符串,问第一个字符串是否是第二个的子序列。(不一定需要连续的字串)只要每次从左向右寻找匹配字符,找到父序列的最右匹配字符的字串,然后从它的下个位置继续找下一个匹配。如果找完父串还没找到就表示不是子序列,如果找到就退出。代码: /* * Author: illuz * Blog: http://blog.youkuaiyun.com/hc原创 2013-08-25 21:49:31 · 1431 阅读 · 0 评论 -
UVA 10057 A mid-summer night's dream. 仲夏夜之梦 求中位数
题意:求中位数,以及能成为中位数的数的个数,以及选择不同中位数中间的可能性。也就是说当数组个数为奇数时,中位数就只有一个,中间那个以及中位数相等的数都能成为中位数,选择的中位数就只有一种可能;如果为偶数,中位数又两个,同样和那两个相等的数都能成为中位数,在[第一个中位数,第二个中位数]这一区间中拥有的整数个数就是所求的第三个数。分类讨论,模拟即可。代码: /* * Autho原创 2013-08-25 21:42:16 · 2468 阅读 · 0 评论 -
UVA 270 Lining Up 共线点 暴力
题意:给出几个点的位置,问一条直线最多能连过几个点。只要枚举每两个点组成的直线,然后找直线上的点数,更新最大值即可。我这样做过于暴力,2.7s让人心惊肉跳。。。应该还能继续剪枝的,同一直线找过之后就可以剪掉了。代码: /* * Author: illuz * Blog: http://blog.youkuaiyun.com/hcbbt * F原创 2013-08-25 21:30:59 · 1505 阅读 · 0 评论 -
UVA 10905 Children's Game 孩子的游戏 贪心
题意:给出N个数,要求把它们拼凑起来,让得到的数值是最大的。只要分别比较两个数放前与放后的值的大小,排序后输出就可以了。比如123和56,就比较12356和56123的大小就行了。写一个比较函数,然后用sort调用就行了。刚开始时用long long做,每次比较都让数相连,然后比较大小,后来发现数据好像会很暴力,即使longlong也不够大。考虑到两个数相连后两种情况长度都一样原创 2013-08-25 21:08:23 · 2820 阅读 · 0 评论 -
UVA 10815 Andy's First Dictionary 安迪的字典 stl应用 set+string做法
题意:给出一串单词,把所有单词改小写去重按字典序输出。以前做过c的版本,现在用stl又写了一遍,当做练习。set可以解决去重和排序问题。代码:#include #include #include #include #include using namespace std;set d;int main() { string s; char ch; while原创 2013-08-24 00:50:04 · 2862 阅读 · 0 评论 -
UVA 10194 Football (aka Soccer) 足球成绩统计 检索+模拟
题意:先读入球队信息,再按“team_name_1#goals1@goals2#team_name_2”的格式读入球队的比赛情况,然后统计各个球队的比赛得分,进球数,丢球数等等各项指标。最后按题目给定的顺序输出各个球队的信息。这题一个非常坑的地方就是在排序时队名的排序是按小写排的,看了别人博客上提醒才发现有这回事。。。还有一个我被坑很久的就是球队的排序不是各指标全部都是从大到小排的。。。这原创 2013-08-24 00:45:34 · 2745 阅读 · 0 评论 -
FZOJ 2166 inversion 逆序数对 模拟
FZOJ 2166 inversion 逆序数对 模拟原创 2014-04-15 16:31:39 · 1719 阅读 · 0 评论 -
UVA 11054 Wine trading in Gergovia 葡萄酒交易 贪心+模拟
题意:一题街道上很多酒店,交易葡萄酒,正数为卖出葡萄酒,负数为需要葡萄酒,总需求量和总售出量是相等的,从一家店到另外一家店需要路费(路费=距离×运算量),假设每家店线性排列且相邻两店之间距离都是1,求最小路费。在纸上模拟了一下,你会发现一家店如果卖酒,它的最终流向就是向两边运送;如果买酒,那它就在那边等别家店送酒过来。(我在废话。。。)然后第一家店肯定是向右边运酒了,最小的运费当然原创 2013-08-30 20:18:44 · 4276 阅读 · 0 评论 -
UVA 10763 Foreign Exchange 出国交换 pair+map
题意:给出很多对数字,看看每一对(a,b)能不能找到对应的(b,a)。放在贪心这其实有点像检索。用stl做,map+pair。记录每一对出现的次数,然后遍历看看对应的那一对出现的次数有没有和自己出现的此时一样即可。代码: /* * Author: illuz * Blog: http://blog.youkuaiyun.com/hcbbt *原创 2013-08-25 21:13:10 · 2424 阅读 · 0 评论 -
UVA 156 Ananagrams 模拟+字符串处理
题意:把每个单词全部转化成小写字母,对每个单词,看它的字母重排后得到的单词在所有输入的单词中是否出现过,若没有出现,就输出原单词。所有要输出的单词按字典序排列输出。这题的模拟没有那么裸,要求挺多的,还是需要思考下的,首先把全部单词都读入并转换成小写并排序,然后把重复的单词去掉,最后把剩下的单词排序并输出原单词。由于要输出原单词,于是我构造了个结构体,去重就把结构体里面的bool值改掉,然后原创 2013-08-24 00:23:06 · 3183 阅读 · 2 评论 -
UVA 299 Train Swapping 列车交换 冒泡排序简单模拟
题意:到老舊的火車站你也許會遇到少數僅存的"車箱置換員",車箱置換員是車站的員工,他的工作是重新排列火車車箱。當每節車箱(尤其是裝貨的車箱)都經過適當的排列之後,火車司機在每個車站卸貨時只需從最後車箱一節一節依序放下即可。"車箱置換員"的職稱起源於一座位於河畔的火車站,鐵路橫跨在河的兩岸,當船隻要通行時,橋上的鐵路不像其他地方一樣會垂直升起,而是以河中央的橋墩為中心旋轉90度,此時船隻原创 2013-08-24 00:11:03 · 2384 阅读 · 0 评论 -
UVA 10420 List of Conquests 战利品列表 简单检索+set
又是一题模拟水题。题目按“国家+战利品名字”给出一系列字符串,只要处理一下,每次读取后遍历一遍看看这个国家之前有没有出现过,有的话就把战利品名字放在该国家的set里面,如果没有就创建一个新的国家再放。代码:#include #include #include #include using namespace std;const int maxn = 2013;int n,原创 2013-08-23 23:55:57 · 1389 阅读 · 0 评论 -
UVA 340 Master-Mind Hints 猜数字提示的游戏 简单模拟
题意:以前曾经玩过的一个游戏,就是猜数字,原来的游戏规则是这样的:請寫一個猜數字遊戲,電腦會產生一個四位數且每個數字都不重複的數字讓使用者去猜,使用者猜測一組數字後,電腦會顯示 ?A?B 的訊息,A 代表正確的數字數目,B 代表數字正確但位置不對的數字數目。这边有个在线玩的网站:请戳这里,可能玩过了就会有点感觉了。题目有点不同,它给出的密码是多位的,然后给出一系列的猜测,让原创 2013-08-23 23:47:28 · 3056 阅读 · 0 评论 -
UVa 820 - Bandwidth 全排列+判断
题意:给出字母的连接情况,带宽是字母排列时相连的字母间距的最大值,要求找出一个排列使带宽最小。结点不会大于8,于是也用next_permutation进行排列后判断,其实这个排列也可以剪枝减掉一半的,我倒是没处理,不过时间较长。代码:#include #include #include #include using namespace std;const int maxn =原创 2013-08-05 01:41:17 · 1677 阅读 · 0 评论 -
nyoj 128 前缀式计算 模拟水题 回溯
题目中文的我就不多说了。回溯水题,模拟一下就行了。代码: #include #include double solve(char o) { char op[10]; double o1, o2; scanf("%s", op); if (op[0] >= '0' && op[0] <= '9') sscanf(op, "%lf", &o1); else原创 2013-10-15 23:39:25 · 1666 阅读 · 0 评论 -
UVa 10012 - How Big Is It? 堆球问题 全排列+坐标模拟 数据
题意:给出几个圆的半径,贴着底下排放在一个长方形里面,求出如何摆放能使长方形底下长度最短。由于球的个数不会超过8, 所以用全排列一个一个计算底下的长度,然后记录最短就行了。全排列用next_permutation函数,计算长度时模拟着摆放就行了。摆放时折腾了不久,一开始一个一个把圆放到最左端,然后和前面摆好的圆比较检查是否会出现两个圆重叠,是的话就把当前圆向右移动到相切的位置。然后判断原创 2013-08-05 00:19:50 · 2830 阅读 · 0 评论 -
POJ 1002 UVA 755 487--3279 电话排序 简单但不容易的水题
题意:给你许多串字符串,从中提取电话号码,输出出现复数次的电话号码及次数。以下是我艰难的AC历程:(这题估计是我刷的题目题解次数排前的了。。。)题目不是很难理解,刚开始想到用map,但stl的map不是很放心,怕超时。于是放心的用数组敲了。(事实证明我放心过头了)刚开始在Vjugde里面提交老SE,我还以为uva又挂了,最近各种挂啊。。。后来又刷了一题过来提交,还是SE。某大神说这原创 2013-07-31 10:30:15 · 2185 阅读 · 2 评论 -
hdu 2514 Another Eight Puzzle 图填数字 next_permutation+暴力
题目已经给出八个点以及各点的连接情况,要求两个相连的点的值不能连续,输入部分点的值,让你填其他点的值,检查能否填出已经是否有唯一解。只有八个点,把要填的数值排序填入点中,然后检查一下就可以了。代码:#include #include #include using namespace std;const int maxn = 9;int que[maxn], pre[maxn原创 2013-07-25 17:39:13 · 1741 阅读 · 0 评论