![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
UVa oj
NingLiu_
该csdn博客专门用来做技术类的总结,希望自己能给初学者一些鄙陋的建议和帮助
展开
-
UVALive - 7267 Mysterious Antiques in Sackler Museum
/* 这题如果想明白以后,其实并没有那么难 两个长方形A, B若要合并,(a1 == b1 || a1 == b2 || a2 == b1 || a2 == b2)四种条件中,必定要满足至少一个,也就是说,两个长方形必有相等的边,假设这两个长方形已经合成了一个大长方形 第三个长方形,如果要和大三角形合并,除非有边和它们相等的那条边相等,或者有边和它们合并后得到的边相等原创 2017-08-19 14:39:07 · 369 阅读 · 0 评论 -
UVA - 1587 Box
/* 起初自己的思路是没有这么简洁清晰的,后来做完以后,想要去搜下别人是怎么做的,搜到了这篇blog http://blog.csdn.net/kun768/article/details/43701899 发现别人的代码真是清晰又简洁,于是自己也改写了自己的代码,采用了博主的思路,并且加上了一些重载 另外,上面那个博客链接的代码,可真是优美,值得一看 同时,这也启发我们原创 2017-08-19 14:43:23 · 169 阅读 · 0 评论 -
UVA-202 Repeating Decimals
/* http://blog.csdn.net/mobius_strip/article/details/39870555 这题涉及到了抽屉原理,也叫鸽巢原理,有时间不妨看看,我下载了相关文档 http://www.xuebuyuan.com/2224752.html 这个blog讲解得比较细致易懂,但是它的代码是RE的,不过思路和下面那串代码也是大同小异的,就没有改代码了原创 2017-08-19 14:46:50 · 259 阅读 · 0 评论 -
UVALive - 7270 Osu! Master
/* 这题我觉得最关键的地方不在写代码,而是看懂题意,我读题时,其实是没那么快理解题目是要我们做什么的 以及,值得一提的是,之前我一直以为,应该把last记录下来,但是后来发现根本没有必要,直接记录下ans就行,每次遇到S,ans更新,遇到非S的字母和为1的数组,ans更新,和非1的数字一点关系都没有,换言之,1后面的数字不一定要满足 1 2 3 4这种关系,如果我是1 3 5,也可原创 2017-08-19 15:16:03 · 194 阅读 · 0 评论 -
UVA - 1588 Kickdown
/* 这题我的思路是这样的,假设有串a和串b ①先固定a,a从第一个元素开始,b从第一个元素开始(from=1),一一比较直到遇到失配的情况(进入②)或者某串结束的情况(进入③),每次匹配,会有same++,表示在这个位置,它们是符合容器高度的上限3的; ②表示位置的from++,b从from开始,a从第一个开始,再来一一匹配,情况处理同① ③某串结束以后,匹配也就结束原创 2017-08-19 16:33:11 · 226 阅读 · 0 评论 -
UVA - 11809 Floating-Point Numbers
/* 这份代码参考了这个博客中的思路: http://blog.csdn.net/crazysillynerd/article/details/43339157 感谢这个博主,一开始我是不知道怎么处理这么大的数据的,还要多亏了他博客的细致讲解...在做这题的ACMer们可以去看看,博主分析得十分到位,无论是数学公式的一步步推理过程,打表时的各种考虑,还是对于数据不是科学记数法表示的处原创 2017-08-19 19:21:30 · 205 阅读 · 0 评论 -
UVA - 213 Message Decoding
/* 具体题解见入门经典P83-85 总结下这题碰到的知识点: 1.数据输入的处理,尤其特殊字符,EOF,'\n','\r'等等 (以及,如果单独写出一个函数,来处理这些特殊的输入方式,会使得代码书写变得简洁很多,见该题中的 readchar()函数) //当然,读取编码头的函数中用到了readchar(),但如果不用,其实也未尝不可,全用getchar(),不怕麻烦的话原创 2017-08-20 15:06:13 · 185 阅读 · 0 评论 -
UVA - 133 The Dole Queue
/* 题解:入门经典P82*/#include #include using namespace std;const int maxn = 105;int a[maxn], n, k, m;//逆时针走t步,步长为d,d为-1表示顺时针走,返回新位置int go(int p, int d, int t){ while (t--) { do { p = (p原创 2017-08-20 15:08:13 · 157 阅读 · 0 评论 -
UVA - 489 Hangman Judge
/* 入门经典P80-81有题解,十分详细 入门经典上有提醒,猜一个已经猜过的字母也算错...我英语理解能力不是太好,猜测应该是原题里的这句话"Each unique wrong guess only counts against the contestant once.",也许是表示每次错误的猜测都是单独起作用的?所以如果两次猜错都是同一个字母,那就错两次? 总而言之,英文阅读原创 2017-08-20 21:47:35 · 169 阅读 · 0 评论 -
UVA - 512 Spreadsheet Tracking
//法1:先模拟操作,算出最后的电子表格,接着在每次查询时直接在电子表格中,找到所求的单元格/* 此方法最关键的地方,应是怎样建立原来的位置和后来的位置的联系 入门经典的法一,很巧妙地借助了这样的数组定义; d[i][j] = i*BIG + j,记录下了原来的位置...在后面的插入、删除和交换等等步骤之后 虽然d[i][j]里装的数字可能变化了,可是只要计算 d[i][j原创 2017-08-20 22:48:11 · 151 阅读 · 0 评论 -
UVA - 10167 Birthday Cake
/*其实这题并不难,主要是我没有理解题意,题意就是找到一个A和一个B,A和B的绝对值不超过500,使得给出的 2n 个点,刚好一半在直线上,一半在直线上此外,当时没想到直接枚举,后来看了题解,仔细想想,这题的数据量好像真的不大,枚举确实是挺好的方法...当时怎么就不尝试呢?sigh*/#include using namespace std;struct PNode{ int x,原创 2017-08-24 19:43:11 · 231 阅读 · 0 评论 -
UVA - 1589 Xiangqi
/* 法一: 之前不会象棋的玩法,为了这题特意百度了许久,弄清楚了基本规则 另,这题一开始的代码十分繁琐,后来看到了一篇很好的博客,他的思路就很简洁: http://blog.csdn.net/hao_zong_yin/article/details/53780164 于是,我也回去修改了自己的代码,才有了这个最终的版本 另外总结一下,上面那篇博客究竟原创 2017-08-25 09:05:04 · 238 阅读 · 0 评论 -
UVA - 12412 A Typical Homework
/* 这题其实不难,而且很贴近生活啊!等ACM题刷累了的时候,不妨把这个代码再多加些功能,写成一个小小的项目试试,我觉得会挺有意义 体现了的知识点: 为了避免浮点数的误差,一般在按小数点输入之前,要先将它和一个较小的数EPS(通常用1e-5)相加 打脸了...WA了将近一天,各种调试和找错,整整找了一天,没错,就是整整一天,不是上学的一天,是暑假的一整天,什么都不做专门原创 2017-08-22 08:37:13 · 251 阅读 · 0 评论 -
UVA - 10391 Compound Words
/* 这题我开始时的思路是:合成单词,两两合成,看组合得到的合成词是否在字典中,但这样很明显会超时 最后查完题解,发现正确的思路是分割,不过分隔的做法也不止一种,具体见下:*//* 法一: 参考博客:http://blog.csdn.net/czjxy881/article/details/8300237 A. 注意先说下博客里的代码,有两原创 2017-09-03 20:22:56 · 206 阅读 · 0 评论 -
UVA - 1368 DNA Consensus String
//法一//这题算是初等贪心的思路了,要求总harmming距离最小,通过使每一位上选取的字母,都能使该位对总harming距离的贡献最小,按照定义,也就是所有DNA在该位置上,ATCG字母究竟哪个最多,若多个最多,就选字典序小的...思路确实挺巧妙,值得琢磨//顺带提一下,不知道为什么,看了别人的代码,发现有人将变量作为数组维度,即在main函数内部,char DNA[m][n+1];时,居原创 2017-08-25 14:13:40 · 206 阅读 · 0 评论 -
UVA - 1595 Symmetry
/* 可用暴力破解的方法,思路如下: 先假设对称轴存在,且其为 x = xmid,那么对称轴肯定为为左端和最右端中点的平均数 xmid = ( xmin + xmax) / 2 如果x = x0真为对称轴,对任意的 xi,都会有 xj = 2 * xmid - xi; 鉴于求xmid涉及除以2,但是判断的时候,却可以用对称轴横坐标的两倍来判断,出于精度和误差方面的考原创 2017-09-04 00:00:14 · 189 阅读 · 0 评论 -
UVA - 227 Puzzle
/* 这题debug了好久,一直都没有找到错误,后来发现,是因为样例数据的格式有些神奇...比较难调,以及有些别的细节,因为自己观察不细致,也没有发现...导致所有的bug都只能一点点发现 1. 不要选C++5.3.0,应该按照 C++11 5.3.0,好像前者已经废除了gets(),总之如果用前者,编译错 2. 注意观察输入的数据,有一种比较特殊的情况,空格在某行的最后一原创 2017-08-22 20:49:39 · 265 阅读 · 0 评论 -
UVA - 1339 Ancient Cipher
/* 这题的关键是,既然可以一一映射,只要统计字符串中每个字母的出现次数并比较 也就是说,只要a串中的每一个次数,都能找到b串的一个次数和它相等即可 (但要注意不可重复,也就是说,a串中只有2个字母出现50次,b串也要恰好2个字母出现50次,不能多也不能少) ...至于到底是哪个字母出现50次,既然可以映射,哪个字母就不重要了,我们不需要关心这点...*/原创 2017-08-22 20:53:18 · 183 阅读 · 0 评论 -
UVA - 10288 Coupons
/*代码似有点细节问题,但解析挺细致的bloghttp://www.cnblogs.com/xcw0754/p/4754015.htmlhttp://blog.163.com/xifan_jiang/blog/static/251140042201671887586/我模仿借鉴了的2个blog,其中有些可写可不写的,或者可以合并的代码,在我自己重写的时候,我都做了一定的简化http:/原创 2017-08-22 20:58:43 · 260 阅读 · 0 评论 -
UVA - 10340 All in All
//水题,并且我用的这种方法,太过死板了...反正不太好...#include #include #include const int N = 1e8;using namespace std;char a[N], b[N];int main(){ while (cin >> a >> b) { int len1 = strlen(a); int len2 = strle原创 2017-08-22 21:03:39 · 152 阅读 · 0 评论 -
UVA - 232 Crossword Answers
//我觉得该注意的地方,都写在注释里了,这题应该也算水题,不难,数据也没有特殊的格式,比较需要注意的就是,写循环的时候,不要把自己绕进去绕晕了#include using namespace std;const int N = 12;char maze[N][N];int num[N][N];void shownum(int r, int c){ for (int i = 0;原创 2017-08-26 09:14:15 · 185 阅读 · 0 评论 -
UVA - 10006 Carmichael Numbers
//挑战P122#include #include using namespace std;const int MAXN = 65010;int notprime[MAXN];int n;typedef long long ll;void init(){ memset(notprime, 0, sizeof(notprime)); for (int i = 2; i <= M原创 2017-08-26 09:22:10 · 211 阅读 · 0 评论 -
UVA - 220 Othello
/* 这题实在是让人不由感慨一下,好的思路有多么重要!~ 起因:因为自己实在想不出来,于是百度题解。然而搜到的题解,要不看得艰难,要不一看就是200行以上的,就可能是畏难吧,于是我甚至看题解,看别人的代码都看不下去了... 但是我又实在不想放弃,接着搜搜搜,居然在百度的比较靠后的页里,找到了一份对我而言,最简洁易懂的代码,马上就理解了,于是自己借用思路手敲了一次 BTW原创 2017-08-27 07:57:27 · 186 阅读 · 0 评论 -
UVA - 253 Cube painting
/* 法一: 设所给的两个面为a、b,将b固定,对a进行颠倒、旋转的有关处理,如下: 对a,循环考虑6种情况,分别是6个面作为上面的情况 在这6种情况中,每种都要进行3次旋转,也就是考虑4种情况(固定上下面的情况下,其他4个面,都要作为正面1次) 思路来自blog: http://blog.csdn.net/qq_18738333/article/details/44原创 2017-08-27 08:08:59 · 161 阅读 · 0 评论 -
UVA - 1225 Digit Counting
//法一://收获:这题对于各位的统计,也没什么特别的技巧,不过是取余;但是,if-else从最高数位开始找,可以有效地避免取余得到的前置0被多余统计;而事实上,其实也根本不会出现多余统计的情况,因为这个选择语句,已经确定了到底有几位,无用的根本没分离,分离出的都是一定要统计的#include #include using namespace std;int main(){ int原创 2017-08-27 08:17:10 · 154 阅读 · 0 评论 -
UVA - 1586 Molar mass
//收获:运用isdigit()函数,解决了元素后面的原子个数可能有两位的情况。同时,每次遇到元素字母,计数工作都由函数完成,简化代码//值得一提的是,这题后来又被我写了一次,充分利用了数组之间的一一对应,减少了许多代码...简洁许多啦!//借鉴了下面blog的部分思路: http://blog.csdn.net/u014800748/article/details/32718177原创 2017-08-28 13:28:48 · 213 阅读 · 0 评论 -
UVA - 12100 Printer Queue
/* 法一: 这题最开始时,想到可能需要用优先队列...可是还是懵懵懂懂,不知道怎么下手,后来看到了法一的思路,发现博主就只是用到普通队列,思路如下: 任务依次入队,压入的数为其优先级 进入最外层 while(1)循环,该循环直到所关注的任务刚好位于队首,且打印结束后,退出while(1)循环 每次取出队列中第一个元素,若: 1. 如果队列中有优先级比队首更大原创 2017-09-06 11:41:18 · 218 阅读 · 0 评论 -
UVA - 10127 Ones
/*一开始没怎么想,直接就用一想就能想到的方法,果不其然,TLETLE代码:#include #include #include using namespace std;typedef long long ll;ll n;int main(){ int a, x; while (cin >> a) { ll sum = 0; for ( x = 0; ; x++原创 2017-08-28 16:45:23 · 209 阅读 · 0 评论 -
UVA - 10110 Light, more light
//本来想用数组,结果RE,后来发现只是需要判定最后一个,并不需要数组//可是,然后就,WA了.../*WA#include #include #include using namespace std;typedef long long ll;int n;int main(){ while (cin >> n) { if (!n) break; int ans =原创 2017-08-28 16:46:55 · 154 阅读 · 0 评论 -
UVA - 509 RAID!
/* 这题用了挺久才彻底明白题意...值得特别注意的一点是,输入数据中,是将同一个Disk作为一个横排输入的,但是入门经典上的表格,是将同一个Disk作为一个竖列输入的...因此用了很久才明白,为什么数据会是这样 T^T 题意的说明可参考: http://blog.csdn.net/xienaoban/article/details/52164099 我的代码是参考了题原创 2017-08-29 15:32:30 · 453 阅读 · 0 评论 -
UVA - 508 Morse Mismatches
/* 这题本来没什么思路,后来查了题解,发现如果用map来做,会很方便简洁 题解见blog: http://www.cnblogs.com/dwtfukgv/p/5572356.html*/#include #include #include #include using namespace std;map morse;map dic;con原创 2017-08-29 15:34:32 · 276 阅读 · 0 评论 -
UVA - 12108 Extraordinarily Tired Students
/* 有效使用结构体,会很简单,否则很难想 BTW,发现有个博主的写法,真是简单又易懂,他在struct中放了布置3个数据,并且还有个专门用来更新,当前时刻位于周期中哪个位置,的函数 总之是很不错的写法,于是按照他的思路,修改了自己的冗长代码,blog: http://blog.csdn.net/shannonnansen/article/details/4270原创 2017-08-29 15:35:15 · 210 阅读 · 0 评论 -
UVA - 815 Flooded!
/* 后来发现思路最为清晰简洁的,是这个博主; http://blog.csdn.net/code4101/article/details/38540759 他的代码让我感受到,只要将问题想得十分透彻,尤其是边界条件考虑得十分清楚,代码长度完全可以大大缩短,学习了,同时也照着此思路改了自己的冗长代码 碎碎念: 在vj上观察自己的程序的运行时间的时候,发现...有没有原创 2017-08-29 15:36:12 · 278 阅读 · 0 评论 -
UVA - 1590 IP Networks
/* 有时间日后应该重做***! 因为做这道题的时候,还没有学到计算机网络,查了许久关于网络地址和掩码的资料,但总觉得对这个概念并不算太清晰,所以只能暂且先用别人的思路写一次,日后学到应该重做! 代码借鉴了: http://blog.csdn.net/ronggerace/article/details/42346413 这个blog的解析较为详细: http://b原创 2017-08-29 15:36:58 · 223 阅读 · 0 评论 -
UVA - 1591 Data Mining
/* 有必要返工的一道题***!!! 这题真...我终于明白,为什么入门经典上会说:描述比较抽象,如果对本题兴趣不大,可先跳过 理解题意就用了特别特别久,好在有大佬们翻译了题目,写了详细的题解,然而,然而...还是对题意有些懵懵懂懂、一知半解的,虽然大概知道应该怎么写代码了,但是题意的理解感觉还是不到位,以及,如果晚些时候,再让我自己独立做一次,也许还是这种头大的状态...原创 2017-08-29 15:37:44 · 388 阅读 · 0 评论 -
UVA - 10041 Vito's Family
/* 这题是我想岔了,最初是死算的,当然...超时了 其实这道题不难 首先应该将输入的位置排个序,找中位数,如果总数为奇数,可以直接找到;如果总是为偶数,找中间两个中的哪个都行,到其他点的距离之和都是相等的。(这点可以在纸上画4个位置的情况,自己验证一下); 反正,其实是挺简单的一道题,之前一直没想清楚突破口是在哪,现在想明白了,就是排序后找中位数,偶数两个中位数,本来原创 2017-08-29 15:40:43 · 288 阅读 · 0 评论 -
UVA - 401 Palindromes
//程序3-7 回文词//收获://1、回文串和镜像串的判定(尤其镜像串,借用了一个常量数组)同时,用到了函数//2、同时,这题的循环控制条件是有值得推敲之处,因为镜像串即便只剩下一个元素,还需要判定它的字符镜像是否是它本身//3、此外,这题的结果输出,也是用了字符串数组,并且用到了2个变量jud1和jud2,利用两者的运算,成功地表示了所有的4种情况,十分巧妙 #includ原创 2017-08-29 15:41:30 · 247 阅读 · 0 评论 -
UVA - 10081 Tight Words
/* 这题的dp思路挺巧妙,dp[i][j]记录当长度为i时,末位为j的,并且满足题目要求的,取法...并且还除以了截至该位,占所有排列的概率(每次更新dp,都有除以(1+k) ) 解析见: http://blog.csdn.net/codebattle/article/details/38420827 http://www.cnblogs.com/scau20110726/原创 2017-08-29 15:42:25 · 283 阅读 · 0 评论 -
UVA - 230 Borrowers
/*法一: 参考博客: http://blog.csdn.net/shihongliang1993/article/details/73559187 此外,这个blog也是用集合做的,所不同的是,这个博客没用string类型的pair,而是用了两个pair元素组成的结构体: 以及,下面这个blog的解法虽也为集合,本质上一样,但是没用到C++11的那么多特性,所以更容易理解原创 2017-09-07 07:45:08 · 183 阅读 · 0 评论 -
UVA - 210 Concurrency Simulator
/* 本题借鉴了LRJ在github上放的入门经典的代码库 收获 && 总结: 1. 双端队列deque 下面这个博客总结的比较细致 2. fgets函数 http://www.cnblogs.com/aexin/p/3908003.html 3. 该题最好不要用C++的getline,也不要用string,最好还是用字符串数组 char[][],因为原创 2017-09-23 19:44:58 · 261 阅读 · 0 评论