自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(51)
  • 收藏
  • 关注

原创 UVa上未解决的题目

来自《挑战编程》和《算法竞赛入门经典(第2版)》Programming Challenges习题1.6.3 10137 TheTrip因为这道题的测试用例有错误,详见这里3楼的评论浮点数的题目我一向没有好感习题4.6.3 10037 Bridge网上给出了很多贪心的解法,还有为数不多的动态规划解法,但是我没想明白习题5.9.3 701 The Archeologists’ Dilemma如果尝试枚举E的话那么很快程序就超时了虽然我也感觉不应该暴力枚举求解,应该用对数,但是没想出来

2019-10-02 11:42:41 286

原创 Programming Challenges 习题8.6.1

PC/UVa:110801/861Little Bishops动态规划一般都是从1开始递推到n,这样数组大小就需要n + 1,且一般来说0作为一种提前预置的边界条件,所以分配n + 1维的空间正合适。这样写起来后,代码和递推公式就保持了下标一致性,不会有-1的修正,更容易读。我原来都是能用n就不用n + 1。不仅写起来不方便,而且可读性也很差,最主要的是调试也很麻烦,所以:动态规划千万别装...

2019-10-29 22:08:32 140

原创 Programming Challenges 习题7.6.3

PC/UVa:110703/10104Euclid Problem先做了7.6.7题,所以这道题就很好理解了。因为欧几里得算法中参数a > b,所以算出来的x是正数,y是负数(不知道为什么,反正结果是这个)。x减小lcm(a, b) / a,y减小lcm(a, b) / b,有lcm(a, b) / a < lcm(a, b) / b,x减小的少,y增大的多,绝对值和会增大,所以...

2019-10-28 10:02:43 146

原创 Programming Challenges 习题7.6.7

PC/UVa:110707/10090Marbles这道题的数据如果用int或者long可能会溢出,所以要使用long long第1次超时,是因为在把x和y修正为正数时采用的是一次一次变化的方法,而不是一次乘法直接变为整数后面超时,是因为又去一次一次的变化x和y去算最小值,这样算起来非常慢,而没法发现这是一个线性函数,极值就在区间端点上#include <iostream&gt...

2019-10-28 09:31:01 166

原创 Programming Challenges 习题7.6.6

PC/UVa:110706/10042Smith Numbers第一次写完后忘记清空viPF中所有的质因数了,所以很久都算不出来。如果在else中定义就不容易出错了。#include <iostream>#include <vector>#include <string>using namespace std;bool Prime(int n)...

2019-10-27 18:47:06 126

原创 Programming Challenges 习题7.6.5

PC/UVa:110705/10168Summation of Four Primes本来想着把所有素数枚举出来,然后去优化那个四重循环,但是枚举小于10 000 000的素数时间太长了。应该根据哥德巴赫猜想做。#include <iostream>using namespace std;bool Prime(int n){ if (n == 2) return t...

2019-10-27 18:16:14 110

原创 Programming Challenges 习题7.6.4

PC/UVa:110704/10139Factovisors判断m是否可以整除n!。这题很简单,从n开始和m进行约分,直到m变成1。还有就是特殊情况特殊处理,m为0的测试用例在uDebug上显示可以整除任何值,但是UVa上就是WA,因为这个错了4次;m为1的也要特殊处理,原因在下面。另外这道题让我深深体会到除法是有多慢!如果去掉代码中注释的那两行,并把循环之前相同的检查去掉,以及约分之后相...

2019-10-23 09:42:03 117

原创 Programming Challenges 习题7.6.2

PC/UVa:110702/10006Carmichael Numbers一看到这道题就想起当年被1024位RSA支配的恐惧了,算一个明文算几个小时。这题明显说了,对于给定的合数n,如果a ^ n mod n == a对于所有小于n的a成立,那么这个数就是Carmichael数,所以肯定是要从头到尾枚举才能算,能优化的方法就是在模幂运算上。计算a ^ n mod n时,用的是每次平方,最后...

2019-10-23 09:13:05 160

原创 Programming Challenges 习题7.6.1

PC/UVa:110701/10110Light, more light可以不用模拟每一次按了哪些灯的开关,因为第1次和第n次的操作使得最后一盏灯恢复到初始状态,所以统计n的因子个数,根据奇偶判断。第一次统计因子个数的时候,先判断除数能不能整除被除数,然后根据除数和商的大小关系增加因子个数,然后就超时了,因为这几乎会试除到n-1。第二次提交改成了先判断除数和商的关系,uDebug上的第一个...

2019-10-21 18:22:37 116

原创 Programming Challenges 习题6.6.8

PC/UVa:110608/846Steps这一章的题目是真难啊,不光难想,而且还代码还需要高精度运算。这最后一个算是简单的。为了用最少的步数,那么每一步就要尽可能的大,而步长是递增的,所以前一段就应该一直递增步长,然后到达一个值后再递减步长,这样才能保证第一步和最后一步都是1。根据区间的长度,依次减去2、4、6…直到最后剩下的距离不够了。此时这个距离可能有三种情况:0表示正好走完0 ...

2019-10-19 23:51:01 99

原创 Programming Challenges 习题6.6.7

PC/UVa:110607/10049Self-describing Sequence看前边很多题都需要高精度运算就没做,就捡了一个软的柿子捏,结果这个也不软。这个序列还是很好递推的,从3开始最好推,也就是build()函数,但是循环还不到最大上上限的一半就已经要用很长时间了,所以肯定不能这么做。通过观察这个自描述序列,可以发现映射后的值小于映射之前的值,所以可以存储逆映射,而且通过uDe...

2019-10-18 20:25:20 112

原创 Programming Challenges 习题6.6.3

PC/UVa:110603/10198Counting给一个输入n,找出有多少种使用1、2、3、4的排列方式,使得和为n。特别的,这里的1和4是相同的,都当做1用,比如1 + 2 + 3 = 6,而4 + 2 + 3 = 6。假如输入是4,则排列方式有13、112、22、1111、121、211、31这么多种,又因为1和4都代表1,所以总的排列方式为2 + 4 + 1 + 16 + 4 + 4...

2019-10-15 20:34:42 136

原创 Programming Challenges 习题6.6.1

PC/UVa:110601/10183How Many Fibs?做题之前先查了查,发现没人用那个封闭形式估计,所以只能高精度加法了,uDebug测试用例调试的时候出了2个小问题:加法的时候把数字改成小端序了,比较的时候为了用string内置的<运算符,应该换成大端序比较当数列中的某一项大于a时,也可能会大于b,所以应该先判断,然后再算下一项题目中求a <= fi <...

2019-10-14 18:51:17 88

原创 Programming Challenges 习题5.9.4

PC/UVa:110504/10127Ones这一章因为是高精度算术,所以我总是担心整数溢出,以及超时。这道题目就是枚举,看最短多长的全1的数可以整除输入n,根据uDebug上的测试用例,长度可以达到几千多,所以内置类型肯定是溢出了。其实题目中已经给了提示了,找一个x,使得a * b = p,其中p = 10^0 + 10^1 + …… + 10^(x-1),a就是n,既然没让找b,那也就...

2019-10-13 18:54:59 105

原创 Programming Challenges 习题5.9.5

PC/UVa:110505/847A Multiplication Game#include <iostream>using namespace std;int main(){ unsigned int ui; while (cin >> ui){ bool bS = true; while (ui > 1){ if (bS){ ...

2019-10-13 14:57:42 86

原创 Programming Challenges 习题5.9.7

PC/UVa:110507/10077The Stern-Brocot Number System如果按照题目中的树来找规律就太麻烦了,应该用序列。#include <iostream>#include <vector>#include <string>using namespace std;struct Rational{ int num...

2019-10-13 14:44:47 84

原创 Programming Challenges 习题5.9.6

PC/UVa:110506/10105Polynomial Coefficients二项式定理,并不会溢出。#include <iostream>#include <vector>using namespace std;unsigned int Combinatinon(unsigned int uiTotal, unsigned int uiSelect)...

2019-10-12 19:57:44 105

原创 Programming Challenges 习题5.9.8

PC/UVa:110508/10202Pairsumonious Numbers#include <iostream>#include <vector>#include <algorithm>using namespace std;bool update(int xi, int xj, const vector<int> &v...

2019-10-12 18:35:14 68

原创 Programming Challenges 习题5.9.2

PC/UVa:110502/10018Reverse and Add可以使用to_string()转换成string,然后使用反向迭代器逆转,最后再使用stoull()转换回unsigned long long。#include <iostream>#include <string>using namespace std;unsigned long long...

2019-10-11 20:10:24 112

原创 Programming Challenges 习题5.9.1

PC/UVa:110501/10035Primary Arithmetic书上给了一个提示,说是否可以不用高精度加法获得进位次数,反正我是不知道。其实高精度加法并不困难,而且既然都知道了进位,算结果是顺带的事,感觉这俩没差别啊。#include <iostream>#include <string>using namespace std;int main()...

2019-10-11 19:53:00 100 1

原创 Programming Challenges 习题 4.6.8

PC/UVa:110408/10194Football (aka Soccer)排序的比较函数有些复杂,嵌套了好多层条件判断。看了别人的一个写法,可以依次判断每个排名项是否相同,不相同则return两项的比较结果,相同再判断下一个。本质上还是多层嵌套,但是看起来方便一些。这就要借用大师Donald Knuth的一句名言了,#include <iostream>#include...

2019-10-10 20:33:35 109

原创 Programming Challenges 习题 4.6.7

PC/UVa:110407/10152ShellSort我记得这好像不是希尔排序吧?因为排序的唯一操作就是拿出中间的一个,然后放到最上面,所以可以分两步进行。第一步是所有需要移动的乌龟爬出来,第二步是按照目标顺序在顶上摞好。同时从底部遍历初始序列和目标序列,如果出现不同的(也就是这个乌龟和其它乌龟的相对顺序要发生变化),那么初始序列中的这个乌龟肯定要爬出来,但是爬出来之后不一定需要立即摞在...

2019-10-10 16:59:40 128

原创 Programming Challenges 习题 4.6.5

PC/UVa:110405/10026Shoemaker’s Problem#include <iostream>#include <vector>using namespace std;int main(){ int cases = 0; cin >> cases; for (int c = 0; c < cases; c++) ...

2019-10-09 21:27:08 135

原创 Programming Challenges 习题 4.6.6

PC/UVa:110406/10138CDVII

2019-10-09 21:14:52 131

原创 算法竞赛入门经典 例题5-3

UVa10815Andy’s First Dictionary这题还真不简单,不能直接用空格分词,因为输入可能是字母和标点混在一起的。#include <iostream>#include <string>#include <sstream>#include <set>using namespace std;int main()...

2019-10-06 00:24:12 157

原创 算法竞赛入门经典 例题5-1

UVa10474Where is the Marble?#include <iostream>#include <vector>#include <algorithm>using namespace std;void find(const vector<int> &vi, const int q){ for (size_t...

2019-10-05 23:56:10 101

原创 算法竞赛入门经典 例题5-9

UVa1592Database一道判断数据库范式的题目。根据书上的说法,如果四重循环肯定是不可取的,那就只能空间换时间,对当前的c1和c2,把已经扫描过的行内容存下来,如果新行和存储的内容相同就不满足范式。#include <iostream>#include <vector>#include <string>#include <map&gt...

2019-10-05 22:03:08 225

原创 算法竞赛入门经典 例题5-8

UVa400Unix ls非常不明白为什么UNIX上的ls命令会按照一列一列竖着的方式输出,反正这道题目很难写,主要有下面几个坑:输出时候只能按照行输出,但是字典序是按照列排列的,数组索引需要仔细斟酌一下文件名长度不足M要用空格补齐,即使是这一行最后的文件名,否则uDebug的例子过不去其实是每一行第一列的文件名补齐为M,如果有下一列,再输出那个2。这一点和书上的代码不一样,不知道书上...

2019-10-05 20:01:28 161

原创 算法竞赛入门经典 例题5-7

UVa136Ugly Numbers这道题虽然很简单,但是要用优先队列。#include <iostream>#include <queue>#include <set>using namespace std;int main(){ priority_queue<long long> pq; set<long long&...

2019-10-05 18:09:30 124

原创 算法竞赛入门经典 例题5-6

UVa540Team Queue两层队列模拟。#include <iostream>#include <deque>#include <map>#include <string>#include <sstream>using namespace std;void enqueue(deque<deque<i...

2019-10-05 17:32:12 208

原创 算法竞赛入门经典 例题5-5

UVa12096The SetStack Computer这题理解起来有一些复杂,即使理解了一时也可能想不出来该怎么表示集合套集合的情况,后来看了看书,说用整数代表每一个集合。比如题目中的例子,可以定义A={0, 1},然后A用2表示,同样B={0, 3},然后B用4表示,A和B的并集中元素为{0, 1, 3},然后这个集合用5表示,A和B的交集中元素为{0},这个集合用6表示,A + B中元...

2019-10-05 16:41:45 154

原创 算法竞赛入门经典 例题5-4

UVa156Ananagrams给定一个字典,如果字典中的某一个单词可以通过重排得到另一个单词,则这个单词就是Ananagrams。题目思路可以参考例题4-1,也就是通过排序把字典中所有单词都变成字典序。#include <iostream>#include <string>#include <map>#include <set>#in...

2019-10-05 14:57:45 159

原创 算法竞赛入门经典 习题4-10

UVa815Flooded!这题就很不错,虽然最后输出浮点数,但是不同精度控制。还有这题的背景倒是挺不错的。为了让买房者心里对房子被洪水淹了的情况有个谱,某家公司给住户提供了一个单元格大小为10米乘10米的沙盘区域,所有的新房都会建在单元格中。洪水可能来自雨水、雪水和自来水。洪水都会先把海拔最低的房子淹了(因为水往低处流)。因此为了简便,我们假设这种情况成立,并且水不会渗入到地下。从天气...

2019-10-05 00:12:21 168

原创 算法竞赛入门经典 习题4-9

UVa1591Data Mining挺没意思的一道题目。书上对题目的描述有些难以理解,看英文原题会好一些。当P的偏移增加SP时,对应Q的偏移增加(SP + SP << A) >> B,所以只要A和B使得上式大于SQ,那么就不会出现元素覆盖的情况。这道题的困难在于不知道如何确定A和B的上限,以及如果算出来的空间大于UINT_MAX时会产生回绕,所以在计算过程中必须要...

2019-10-04 23:18:35 139

原创 算法竞赛入门经典 习题4-8

UVa12108Extraordinarily Tired Students根据题意模拟,因为周期不会大于10,所以就使用字符1~9以及:来记录状态,冒号的ASCII值正好为40。注意如果这个学生不能睡得话周期又从1开始。这种题虽然也很简单,可是写起来也用了1个多小时,还是应该多加练习。#include <iostream>#include <vector>#...

2019-10-04 19:36:04 139

原创 算法竞赛入门经典 习题4-7

UVa509RAID!uDebug上有一个每块64比特,一共100块的测试用例过不去,但是系统上的测试用例没有那么大的。最开始看Sample input的时候没看懂,因为总想着一行就是表中的一行,后来才发行一行表示的是一个磁盘,也就是表中的一列。还要注意即使中没有损坏的数据,也得把每行做一下校验。#include <iostream>#include <string&...

2019-10-04 18:23:27 107

原创 算法竞赛入门经典 习题4-6

UVa508Morse Mismatches各种地方描述的这道题目不一样。精确匹配时,有的地方说输出最短的(长度相同再按照字典序排序),有的地方说输出字典序最小的;模糊匹配时,必须是删除最少字符后完全匹配,或者增加最少字符后精确匹配才可以输出,输出跟字典序好像没关系(uDebug上的测试用例就是先按长度、再按字典序,但是我AC的代码是按照字典序的),而且不满足上述条件的也不用考虑。下面代码中...

2019-10-04 16:17:53 88

原创 算法竞赛入门经典 习题4-5

UVa1590IP Networks这道题让我加深了对网络地址的理解,也算是我第一次自己设计算法吧。求包含所有给定网络地址的一个网络,思路就是用尽可能长的掩码去试,但是如果直接用一个掩码去所有的网络,实现起来有些复杂,所以就想试试类似归并排序的思路,结果一次就成功了,可把我厉害坏了。#include <iostream>#include <string>#inc...

2019-10-04 11:23:02 185

原创 算法竞赛入门经典 习题4-4

Uva253Cube painting首先要硬编码每种旋转方式的变换情况,存在各个static变量中,数组表示表示新的面是原来的哪个面,然后把1~6分别转到上面,再左右转3次得到24种组合。#include <iostream>#include <string>#include <vector>#include <set>using ...

2019-10-03 23:56:42 159

原创 算法竞赛入门经典 习题4-3

UVa220Othello题目没什么难的,就是太费时间了,有这时间还不如写点不会的题,这样能提高更多。#include <iostream>#include <vector>#include <string>#include <algorithm>#define BOUND 8using namespace std;pair&...

2019-10-03 19:38:24 204

空空如也

空空如也

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

TA关注的人

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