
杭电第十一页题目笔记
Greatljc
这个作者很懒,什么都没留下…
展开
-
HDOJ 2050 折线分割平面
problem descripion我们看到过很多直线分割平面的题目,今天的这个题目稍微有些变化,我们要求的是n条折线分割平面的最大数目。比如,一条折线可以将平面分成两部分,两条折线最多可以将平面分成7部分。做题的思考的过程:开始时,思路错误,将问题想复杂,将一条折线变成两条直线,想着用直线和面数是否有关系来达成一个函数关系,没想到可以是递推关系。***现在有个问题很严峻,如果在那里没有写递推...原创 2019-01-24 21:24:30 · 260 阅读 · 0 评论 -
HDOJ2061 Treasure the new start, freshmen!笔记
题目地址这道题和字符串处理没有一点关系,还想着能练一下string,需要注意的就是格式#include <cstdio>#include <algorithm>using namespace std;int main(void) { int N; while(scanf("%d", &N) != EOF) { char a[100][30]; ...原创 2019-02-25 21:24:56 · 341 阅读 · 0 评论 -
HDOJ2060——Snooker
题目地址如果在TX玩的Snooker的规则是国际规则的话,那么在打入红球之后再打入其他颜色的球应该要放回去的,就不应该是简单的红球的分数加上其他颜色球的分数。只能按照题目来#include <cstdio>#include <algorithm>using namespace std;int main(void) { int n; while(s...原创 2019-02-25 21:03:09 · 381 阅读 · 0 评论 -
HDOJ2053——Switch Game笔记
题目地址这道题有点提示太多了,好像题意并没有说进行几次的操作,可是后面的例子给如果超出n了就不用测试了,因为超过n,n就不可能是某个数的倍数了,这就给了提示。贴上代码#include <stdio.h>int main(void) { int n; while(scanf("%d", &n) != EOF) { int condion =...原创 2019-02-25 20:49:41 · 227 阅读 · 0 评论 -
HDOJ2049不容易系列之(4)——考新郎笔记——组合数和错排公式的应用
题目地址就是一个组合数公式的运用和错排公式的运用#include <cstdio>#include <algorithm>using namespace std;int main(void) { int C; long long a[20 + 1] = {0}; a[2] = 1; for(int i = 3; i <= 20; i++) { a...原创 2019-02-25 20:05:06 · 295 阅读 · 0 评论 -
关于计算组合数的笔记
需要熟悉组合数的代码,可以快速做出来,所以先做个笔记。有两种代码实现代码1;直接按照C(n, m) = (m * m - 1 * m - 2 * m - 3 * m - 4 * … * m - n + 1) / n!因为从m到m - n + 1, 共需要进行m - m + n - 1 = n - 1次的加,而从1加到n,也需要n - 1次加,所以一个循环就可以。//依托公式:C(n, m...原创 2019-02-25 19:52:37 · 275 阅读 · 0 评论 -
HDOJ2048神,上帝及老天爷笔记—关于递推的一些心得
题目地址这道题是一道递推题,关于错排的递推题,思考错排的递推式时出现了一个思考的误区。如f[n] 时n个元素错排的可能,那么先把n- 1个元素错排,n - 1个元素错排时,可以分成两部分,第一部分是第n个元素错排了,第二部分是不错排,这个想法是错的。这样实际解决的是n个元素错排。心得:设定Pn为某个状态,如果要达到某个状态,那么需要什么状态来达到。例如就这道题错排的公式推导要想达到n个元素...原创 2019-02-25 18:54:14 · 291 阅读 · 0 评论 -
HDOj2073无限的路笔记
题目地址这道题,开始用着自己方法做不出来,看了discuss,发现有人打表,又想着用打表,可是头又铁,硬硬用着自己方法逻辑来判断,终究还是做了出来想法是这样:对于输入的点,并没有说输入的点是哪个是始点哪个终点,要判断。看了discuss,原来自己判断的方法错了,应该x 和 y加起来比较,判断出始点和终点。这个时候始点的话,有问题,那就是如果始点是零点,那么需要先加上一,然后将(0,1)变成始点...原创 2019-02-13 21:08:28 · 234 阅读 · 0 评论 -
HDOJ2047阿牛的EOF牛肉串——重点是关于递推题的一些总结
题目地址递推题感觉就是一般给出了一些进行下一步的约束条件,所以第n个和前面的项存在关系。突然间感觉好奇妙,可是想描述出来又力不从心。是由这道题的递推推导得到一些感觉,写一下这道题的递推过程,以及看了别人的推导过程后顿悟。开始做这种题目时,总是想通过排列或者组合来做,可是因为有了约束条件,所以并不是简单的排列组合,抑或不是排列组合。进行下一步时总是有约束条件,这就当前步与下一步存在关系了。对于...原创 2019-02-23 21:12:23 · 231 阅读 · 0 评论 -
HDOJ2018母牛的故事笔记
题目地址一开始做这道题,实在难受,题意都不太懂。题意应该是母牛年初生一头小牛,然后第四个年头,成长成母牛,就是包括自己被生出来的那一年,就是第n年生出来,第n + 3年自己成长成母牛还生了一头小牛。了解了题意,应该就简单了。第n年牛数量的增加取决于母牛的数量,而母牛的数量又取决与到第n年有多少头母牛,也就是第n - 3年的牛的数量。所以递推式是f[n] = f[n - 1] + f[n ...原创 2019-03-05 09:17:30 · 241 阅读 · 0 评论 -
HDOJ2058The sum problem笔记
题目地址** 在等差数列下,对于某数s,在某个长度下的和相等,那么有且只有一个。**代码#include <iostream>#include <cstdio>//事实上,每个长度如果可以相等,那么有且只有一个可能使该长度的值与M是相等的。 using namespace std;int main() { int N, M; while(sca...原创 2019-03-05 21:12:36 · 286 阅读 · 0 评论 -
HDOJ2036改革春风吹满地笔记——任意多边形求面积
题目地址学习了任意多边形的计算,通过向量叉乘来进行计算。计算公式 S = 1 / 2 * (∑(xiy(i + 1) - x(i + 1) yi) + (xky0 - x0yk)如果逆时针给出坐标,求得是正的,就是答案。如果顺时针给出坐标,求得是负,需要变正具体推导过程博客地址1还学了海伦公式求三角形面积S = abs(p * (p - a) * (p - b) * (p - c))...原创 2019-03-04 20:41:57 · 308 阅读 · 0 评论 -
HDOJ2095find your present (2) 笔记——关于有用的位操作
题目地址题目的意思就是找到一个只有唯一一个数字的,如果搜索,时间复杂度是O(n ^ 2), n < 1000000,(一百万), 超时。看了discuss, 发现位操作太巧妙了,所以做下笔记提醒自己。位操作异或: 单纯的位而言0 ^ 1 = 1;1 ^ 1 = 0;0 ^ 0 = 0;贴上代码#include <cstdio>int main() { int ...原创 2019-03-04 17:11:15 · 294 阅读 · 0 评论 -
HDOJ2092整数解笔记
题目地址解决的方法很简单就是判定。要做笔记的地方就是是不是一定需要用双重循环?在第二次做的时候想到的时二重循环,就是复杂度为O(n ^ 2), 有20000 - 2个数,起码要算接近20000 * 20000 次,肯定超时。回去看第一次解决的代码,只用了一重循环,因为已经知道了和 同 积,这个就很重要了,就少算很多那些和不等的数了,直切要害。厉害。***是不是一定要二重循环?先想一下这...原创 2019-03-04 16:12:14 · 355 阅读 · 0 评论 -
HDOJ2077汉诺塔IV笔记———与汉诺塔三得一些不同
题目地址思维过程:与汉诺塔三的不同就是允许最大得盘子叠放在最上面,考虑有n个盘子次数设为f(n),最大的是第n个,所以只需要把n - 1个盘子从左边移到中间,然后第n个盘子就可以移动两次+2,然后就可以从最左边移到最右边了,然后再把中间的n - 1个盘子移到右边,好像就是直接f(n) = f(n - 1) + 2?后来一想,不对,只允许最大的在上面,而f(n - 1)是有n - 1个盘子时的次数...原创 2019-02-27 10:52:43 · 291 阅读 · 0 评论 -
HDOJ2064汉诺塔III笔记-推导过程
题目地址思路过程:要想所有盘子从最左边移到最右边,肯定要先把最大的盘子移动好,所以就要先把除了最大盘子的所有盘子移到最右边,这样,最大的盘子才可以开始移到中间,然后最右边的盘子要移到最左边,这样才可以将最大的盘子从中间移到右边,然后就是将其他盘子移到右边了。最重要的就是将除了最大盘子以外的所有盘子从最左边移到最右边和从最右边移到最左边是一样的步骤比如有n个盘子设次数为f(n),最大的为第n个盘...原创 2019-02-27 09:16:39 · 420 阅读 · 0 评论 -
HDOJ2063过山车笔记——匈牙利算法(最大匹配)
题目地址我在做这道题时距离我写这篇博客已经有一个多月了,当时看到这道题,以为是贪心题,先让最少选择的先上,因为多选择意味着尽量多,现在仔细想了想,是错的,要看怎么错,可以这样想,如果不是最少选择的先上,会不会增加匹配数。看了discuss,啊!匈牙利算法,厉害。匈牙利算法博客趣写算法写一下基本概念增加印象。交错路:从未匹配点出发,经过未匹配边,匹配边,未匹配边,匹配边…如此循环增广路...原创 2019-02-26 22:56:55 · 310 阅读 · 0 评论 -
HDOJ2050折线分割平面笔记——与对于分割平面的一些小体会
题目地址思维过程:第一次做的时候,并没有抱着解决一类题的观念去做,美其名曰抱着解决问题的观念。然后还看了下面的递推求解练习,知道是递推题,所以只想着画出来当n=3时的面数。原本的想法是尽量切割更多的平面,连对于直线切割平面怎么获得最大的平面数都不晓得。可是这个“更多的平面”很是模糊,将递推变成了模拟,并且是毫无根据的模拟,没法做。然后就是今天回顾了,发现漏下许多知识,包括直线切割平面如果获得最...原创 2019-02-26 21:40:55 · 256 阅读 · 0 评论 -
HDOJ2066一个人的旅行笔记——dijkstr算法
题目地址dijkstr算法:将dijkstr算法实现时一些问题。首先,每一次都寻找权最小的边,这个要通过一次循环,假如有n个点需要进行考虑,那么需要进行n次循环。因为每一次循环之后都需要进行寻找最小权边,直到第n个点,所以是一个二重循环。之后的松弛就可以了。参考博客博客地址ac代码#include <iostream>#include <cstring>#i...原创 2019-03-03 10:34:37 · 323 阅读 · 0 评论 -
HDOJ2079选课时间笔记
题目地址涉及母函数的题目,普通母函数讲母函数讲的比较好的blog讲母函数的博客贴上代码#include <iostream>using namespace std;int main() { int t; cin >> t; while(t--) { int n, k; cin >> n >> k; int all[10...原创 2019-02-12 23:13:19 · 244 阅读 · 0 评论 -
HDOJ2046骨牌铺方格笔记
题目地址和前面的超级楼梯,蜜蜂走蜂房类似的。对于2 * n个格子,要铺满2 * n个,首先要铺满2 * (n - 1)或者铺满2 * (n - 2),当铺满了2 * (n - 1), 剩下的一个只能竖放,当铺满了2 * (n - 2),如果竖放,2 * (n - 1)已经包含了这些可能,所以只能横放。所以也有dp的思想在里面所以递推方程是d[n] = d[n - 1] + d[n - 2]...原创 2019-02-23 15:34:05 · 230 阅读 · 0 评论 -
HDOJ2045不容易系列之(3)—— LELE的RPG难题笔记
题目地址这道题还是很有意思,如果不去考虑首尾的不能相同,那么对于n来说,会有3 * 2 ^ (n - 1)项(n &gt;= 3)。考虑n == 3,第n - 1个格子是都不同于第n - 2个格子,所以第n 个格子可以涂2种颜色。这两种颜色某一种颜色与第一个格子的颜色是相同的,当考虑了首尾不能相同,那就第n个格子可以涂1种颜色。可以得出一个结论d[n]=3 * 2 ^ (n - 1) -...原创 2019-02-23 14:40:08 · 211 阅读 · 0 评论 -
HDOJ2091空心三角新(坑)笔记
这题实在坑,没必要做。疑问空白处填充空格没有阐明,如果不需要空格,可以直接字符宽度做事实上直接动态决定字符宽度也可以AC。每行的最后一个字符不需要空格没有阐明从第二组数据开始,先输出一个换行符没有阐明输入空格的AC代码#include <cstdio>int main() { int n; char c; bool flag = 0; while(scanf(...原创 2019-02-11 14:27:11 · 255 阅读 · 0 评论 -
HDOJ 2087剪花布条 笔记
题目地址开始认为用stringstream,然后读取等宽的,可是想到流读取是一直读取下去的,否决这个想法。因为要熟悉string,所以在discuss中参考了别人的代码贴上代码#include &lt;iostream&gt;#include &lt;sstream&gt;#include &lt;string&gt;using namespace std;int main() {原创 2019-02-10 23:30:41 · 168 阅读 · 0 评论 -
HDOJ2037笔记今年暑假不AC(贪心题目)
题目地址重要的是如何贪心。贪心只是一个思想,并不是解决一个问题的特定解法,是一个思想。思维过程,又要选择开始早的,结束时间也早的,时间跨度还要小最好时间互不相交。最好就0-1-2-3-4-5-6-7-8-9-10-…-24,(总需要一个算法开始的地方,自然的选择了0为开始,如果选择了开始时间,0-7时间跨度太大,里面有其他的节目,如果选择开始时间,并不能决定结束时间。而时间的跨度是由开始时间和...原创 2019-02-22 11:34:40 · 281 阅读 · 0 评论 -
HDOJ2084数塔(简单动态规划)
题目地址关于数字三角形,很容易找到其中的状态方程。参考《竞赛入门》中第九章动态规划第一节。状态方程为的d[i][j] = max(d[i+1][j], d[i + 1][j + 1];用一个二维数组来存储数字三角形,就可以了。贴上源代码,这道题只是初始看了动态规划#include <cstdio>#include <algorithm>#include <...原创 2019-02-22 10:10:57 · 265 阅读 · 0 评论 -
HDOJ2093考试排名笔记
2093 考试排名思考过程:在储存数据这一步出现了问题,因为对vector和string实在是不熟悉,然后一心想着用它们,忽略了问题。用什么数据结构来储存数据这是一个大问题,它直接影响处理数据的有效性。学到的东西:结构体sort()函数的自定义比较函数getline()和stringstream()引用,还是没从c转到cpp有利用结构体,sort()函数中的自定义比较函数,如果用g...原创 2019-02-10 19:51:30 · 429 阅读 · 0 评论 -
HDOJ2054A==B?笔记
题目地址这道题是大数比较的题,第一次做的时候,傻乎乎的直接比较是不是相等,当然WA,然后第二次有了字符串的概念,用了字符串来做,想了很多种情况,如果输入的数不是同一进制的怎么办,发现如果这样想这道题没法做了,就当成了相同进制,通过字符串来比较。因为要字符串判断,所以要判断有没有无谓的东西使得两个相等的数不一样,例如000.001000和0.001这两个数是相等的,可是字符串却会判断不相等。两...原创 2019-02-14 23:06:00 · 323 阅读 · 0 评论 -
HDOJ2089不要62笔记加一些关于疑问(已解决)
题目地址疑问关于打表的疑问,如果我不打表,而是直接判断,会TE,如果打表了,则AC,问题是我打表和直接判断采用的算法都是一样的,换言之我打表至少需要算1000000个数(0-999999),直接算的话至多也就是算1000000个数。(疑问的解答):想通了,输入不止一组数据,所以打表只需要算一次,不打表就要输入一组数据算一次,所以会TE。两份打表AC代码通过sum数组直接相减,但是需要判...原创 2019-02-11 15:29:02 · 188 阅读 · 0 评论 -
HDOJ2040亲和数笔记
题目地址判断是不是约数简单,判断的时候循环的退出条件应该要小于该数。真约数百度说不包括1和自身,可是题目示例包括了1,只能按照题目来。想法很简单,可是很久之前做的,现在想的时候竟然想的是用一个数组来存储约数真的是一言难尽啊,而之前的源代码是只需要一个变量,如果是约数就加一些。汗颜#include <stdio.h>#include <math.h>int mai...原创 2019-02-22 19:55:24 · 241 阅读 · 0 评论 -
HDOJ 2086 A1=? 笔记
题目地址这道题真的是一言难尽啊。主要就是找到A1 和第0项和最后一项的关系,列几项出来算,就能发现式子和n的规律。!!!要看清楚题目才行。把后面的Ci看成是一个常数,历经千辛万苦终于把式子推出来后,才发现是Ci,又重新算一遍,费神又费力,教训啊。贴上AC代码#include &lt;iostream&gt;#include &lt;cstdio&gt;#include &lt;cma...原创 2019-02-12 16:58:40 · 222 阅读 · 0 评论 -
HDOJ2045勤劳的蜜蜂笔记
题目地址这道题和前面的超级楼梯有相像的地方,但题目的描述有问题,看了discuss才知道原来是只能爬向比当前蜂房数字大的蜂房,也就是说可以走一格或两格,和超级楼梯像,不过超级楼梯固定了起点,而这道题通过的是两个蜂房之间的距离,还是dp的思想。int会WA#include <iostream>#include <algorithm>#include <cmath...原创 2019-02-23 10:42:07 · 259 阅读 · 0 评论 -
HDOJ2094产生冠军笔记
题目地址这道题给我的启示是,对于逻辑判断能否找到等价的逻辑判断。直接或者间接打败所有人,相当于只存在一个人没有输过。间接打败:每一个被被打败的人中,打败他的都是冠军或者不是冠军,如果存在冠军,那必然只有一个人没有输过,如果不存在冠军,至少两个人没被击败过。代码#include <cstdio>#include <set>#include <string&...原创 2019-02-12 14:25:37 · 278 阅读 · 0 评论 -
HDOJ2042不容易系列之二笔记
题目地址个个都说递归,可是我有点抗拒递归。好像递归和递推的差别一个是自顶向下,一个是自下向顶,这道递归不难,可是这个递归,还是要递归到最底,和递推的差别是什么呢,递推需要打表这个差别?递归代码#include <iostream>using namespace std;int Recurse(int n) { if(n == 1) { return 4; } el...原创 2019-02-22 22:38:56 · 284 阅读 · 0 评论 -
HDOJ2041超级楼梯笔记-对于dfs的第一尝试
题目地址n为1时答案是1,从第一级踏上第一级,只能上一级或二级,不应该是0?开始的时候用了dfs来做,但是我这样写的时间复杂度应该为O(2 ^ n),如果没估算错,毕竟新手,很可能是错的。当n为40,2 ^ 40太大了,肯定超时,也不出所料,TL。#include &lt;cstdio&gt;#include &lt;algorithm&gt;#include &lt;ctime&g.原创 2019-02-22 21:48:34 · 366 阅读 · 0 评论 -
HDOJ2057A+B Again笔记
题目:A + B AgainProblem Description给出两个十六进制的数,求他们的和关键:理解十六进制在计算机如何存储,然后用printf函数是如何显示出来的。无论什么进制的数,在计算机都是以二进制的补码形式存储的,而格式转换符决定了以什么格式读取数据,和输出数据。十六进制,八进制和十进制的不同地方,如果要输出的负数,十六进制和八进制是不会有负号的,只会输出补码,例如十六进制...原创 2019-01-22 22:25:29 · 320 阅读 · 0 评论 -
HDOJ 2028求n个数的最小公倍数
题目:求n个数的最小公倍数。对于这个简单的关于数论的题目时,首先需要学会的是求两个数的最大公约数求最大公约数的方法有辗转相除法,更像减损术辗转相除法(循环)得到两个数,将小数除大数,如果得到的余数不为0,则将除数付给被除数,余数赋给除数,再相除求余,判断余数是否为0。int a, b; while(scanf(&amp;amp;quot;%d %d&amp;amp;quot;, &amp;amp;amp;amp;a, &原创 2019-01-21 11:02:57 · 268 阅读 · 0 评论 -
HDOJ2083简易版之最短距离笔记
题目地址看到所有数据都<= 10000,也就是所暴力枚举也就是O(n ^ 2),最多100000000次,可以做,然后尝试了,没有想到中位数。#include <cstdio>#include <cmath>#include <algorithm>#include <cstring>using namespace std;int ...原创 2019-02-11 23:07:45 · 192 阅读 · 0 评论 -
HDOJ2074叠筐笔记
题目地址看着题目描述,实在是云里雾里,后来看了示例和discuss才懂什么意思。最外层的字符并不是由输入的外框字符决定的,这个就很扯蛋了,输入的外框字符很让我认为最外层的就是这个字符。而中心字符才是由输入的中心字符决定的,并且最外层字符是由(n - 1) / 2 是偶数还是奇数决定,扯淡啊。知道题意,就不难了。#include <iostream>#include <c...原创 2019-02-14 19:39:40 · 283 阅读 · 0 评论