自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 AOAPC I: Beginning Algorithm Contests (Rujia Liu)

Volume 0. Getting StartedVolume 1. Elementary Problem SolvingVolume 2. Data StructuresVolume 3. Brute ForceVolume 4. Algorithm DesignVolume 5. Dynamic ProgrammingVolume 6. Mathematical Concepts...

2019-10-06 20:08:08 198

原创 2022浙大CS考研

碎碎念对于这篇博客原本是有些纠结的,但最终还是把自己的一些心得感悟写了出来,希望后来者可以少走弯路,在有限的时间内,尽量得到更高的分数。纵观个人的整个考研历程,并没有某个环节表现得特别出彩,相反不论是初试(384,计专70名左右)还是机试(超级拉跨,前所未有的低)或是复试(80左右,排名100+),都有许多令人不满意的地方。但尽管有这么这么多的不足,最后也依然能够上岸,并录取到海宁找到自己心仪的导师,所以在这里也请各位路过考研er相信:有志者,事竟成,破釜沉舟百二秦关终属楚;苦心人,天不负,三千越甲可吞吴

2022-03-29 00:10:04 1291

原创 C++大数模板

const int MAXSIZE=1000;struct bign{ int len,s[MAXSIZE]; bool sign; bign() {memset(s,0,sizeof(s));len=1;sign=1;} bign(const char *num) {*this=num;} bign(int num) {*this=num;} string toStr() const { string res;

2021-04-22 10:43:50 145

原创 2021年春季PAT甲级考试

作为一个绩点不高、牌子不硬的退役ACMer,去年冬天在npy的鼓励下,决定先试试PAT为考研做准备,于是认认真真把所有20分的题目过了一遍。放寒假以后,就开始练习所有25分的题目,并且每道题做完以后都总结了博客,供别人学习,也供自己复习。结果时间安排上出现了问题,导致后面没有太多时间写程序,整个2月份到今天,没写过一行代码(大家参与程序设计考试一定要避免这种行为)考试竟是第一次打开编译器写程序。。。最后没能把PAT题库刷一遍,然后将每道题的高质量题解做出来也是PAT考试中的一个遗憾吧。根据个人做PAT题库

2021-03-13 17:22:16 3113 13

原创 1040 Longest Symmetric String (25分)

题目大意:求给出字符串的最大回文子串。思路:最大回文子串是可以通过区间dp来求解,但是题目中数据并不大,可以直接暴力求。在此只给出dp的状态转移方程(其中dp[i][j]表示字符串从i到j是否是回文):dp[i][j] = (s[i]==s[j])? dp[i+1][j-1] : 0代码:#include <iostream>#include <cstdio>#include <cstring>using namespace std;string s;

2021-01-30 23:01:52 106

原创 1039 Course List for Student (25分)

题目大意:给出k个课程的选课学生,再给出n个查询课程的学生。按照输入顺序,将每个学生的选课数、所选课程编号(课程按照编号递增)输出。思路:用set数组来储存每一个学生所选课程的课程号。所以需要一个map根据学生姓名来映射set数组中的下标。代码:#include <iostream>#include <cstdio>#include <cstring>#include <set>#include <map>using namesp

2021-01-30 22:34:54 82

原创 1037 Magic Coupon (25分)

题目大意:nc个优惠券,np个商品。若用价格为a的优惠券购买价格为b的商品,则用户可以得到a*b的返现,求用户能够得到的最大返现额。每种商品最多可以购买一次,每种优惠券最多使用一次。思路:通过将优惠券和商品排序后,使用正值优惠券购买正值商品,负值优惠券购买负值商品,且尽量让绝对值大的优惠券去购买绝对值大的商品,这样可以保证返现额最高,且返现额最低为0。代码:#include <iostream>#include <cstdio>#include <cstring&gt

2021-01-30 21:37:52 89

原创 1036 Boys vs Girls (25分)

题目大意:给出n个学生的姓名、性别、ID和成绩。求取得最高分的女生和最低分的男生。分别输出两人的姓名、ID,以及女生成绩减去男生成绩的差。思路:此处给出两种解法。使用两个优先队列分别来维护男生和女生的信息。男生队列中成绩低者位于队首,女生队列中成绩高者位于队首。使用一个vector来存储学生信息,最后按照性别升序、成绩降序进行排序,这样第一个就是女生成绩最高者,最后一个就是男生成绩最低者。代码:优先队列#include <iostream>#include <cstdio

2021-01-29 20:53:35 107

原创 1033 To Fill or Not to Fill (25分)

题目大意:给出车辆油箱容量、始末位置距离、一单位油可行驶距离以及n个加油站。接下来分别给出n个加油站的油价和与起点的距离。思路:一道相对较为繁琐的贪心。首先按照距离递增将加油站进行排序。如果起点没有加油站,车辆将无法启动。从当前点出发,找到车辆能够到达最远距离中第一个油价低于它的点,那么车辆在当前点只需加用光油箱刚好可以抵达该点的油即可。那么该点将作为新的起点再次执行算法,并将此时的油箱清空。如果在当前点所能到达的最远距离中,不存在油价低于当前点的加油站,则要在当前点将油箱加满,并到达后面油价最低

2021-01-28 20:48:20 71

原创 1032 Sharing (25分)

题目大意:给出两个用链表储存的单词,问这两个链表公共后缀的首地址,若没有相同后缀,输出-1。思路:虽然题目给出是链表,但是并不需要使用链表,只需要通过一个数组来映射这种当前结点与其后继的关系。如果使用map每次查询会需要log(n)的时间,而直接用数组则是O(1)的查询时间。代码:#include <iostream>#include <cstdio>#include <cstring>#include <map>using namespace

2021-01-28 11:29:52 109

原创 1029 Median (25分)

题目大意:将两个数列合并成一个数列后,若数列长度为奇数,则求其中位数,若数列长度为偶数,求中间两数中的前者。思路:以为是个王者,没想到是个青铜。合成后的数列长度最大为4e5,因此直接sort就行。最终结果为(len-1)/2,此处len为合成后的数列长度,下标从0开始储存。如果数列长度能够达到1e7的话,根据题意,两个数列均为升序,那么应该借助归并排序的思想来实现代码:#include <iostream>#include <cstdio>#include <cst

2021-01-27 18:52:48 79

原创 1028 List Sorting (25分)

题目大意:给出n个学生的信息(包括学号、姓名和成绩)。若c为1,则按照学号升序排序;若c为2,则按照姓名字典序升序排序;若c为3,则按照成绩升序排序。若姓名或成绩相同时,则按照学号升序排序。思路:直接sort,有手就行。代码:#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int N=1e5

2021-01-27 18:45:34 117

原创 1025 PAT Ranking (25分)

题目大意:给出各个赛点的成绩单,求总的排行榜。给出n表示赛点个数,每个赛点给出k表示该赛点的选手人数,接下来k组数据,每组包含选手注册号和成绩。总的排行榜按照成绩降序,若成绩相同则注册号小的排在前面。每个选手在排行榜中的信息包括该选手的总排名、赛点号和赛点排名。思路:总排名只需将所有人按照成绩和注册号统一排序即可得到。给各个赛点依次进行排序,再将赛点排名更新到总排行榜中显然会超时,因此对于赛点排序需要特殊处理。在总排行榜中,每个人的赛点号是易得到的,那么对于每个赛点都去维护一个rk,代表该赛点在当

2021-01-27 18:20:21 107

原创 1024 Palindromic Number (25分)

题目大意:给出一个数n和次数k,每次将n中各位数字颠倒后再加到n上,直到n为回文数字结束,输出此时的回文数字n和所用次数。若在k次内无法使得n为回文数字,则输出第k次运算结束后的n和k本身。思路:由于数字范围较大,需要使用string来计算。对于模拟加法中的两个加数,长度相同,且为另一个数中各位数字倒置后的结果,所以直接进行运算即可实现从低位到高位运算,而不需要将两个数倒置。代码:#include <iostream>#include <cstdio>#include &l

2021-01-27 11:29:48 99

原创 1021 Deepest Root (25分)

题目大意:给出n个点,n-1条双向边,求这个图是否是一棵树,若是一棵树,按照序号递增输出能够使该树最高的树根,否则输出该图有几个连通块。思路:首先通过并查集来判断该图是否连通若连通,则以1号节点为根进行一次dfs,找到当前树中最深的子节点,那么可以保证这些节点一定存在于结果中。从第二步得到的节点中任选一个,再进行一次dfs,再找到该树中最深的子节点。这些节点也属于最终的结果中。排序、去重后输出答案。(这里使用STL中的unique函数只能拿到21分,玄学问题)代码:#include &lt

2021-01-26 22:08:07 107 1

原创 1020 Tree Traversals (25分)

题目大意:给出一棵二叉树的后序和中序遍历,求其层序遍历。思路:无需建树,按照根据后序、中序求前序的思路进行即可。通过一个下标来映射出层序遍历的结果,即根节点为i,则左儿子为i<<1,右儿子为i<<1|1(树根为1)。代码:#include <iostream>#include <cstdio>#include <cstring>#include <map>using namespace std;const int N

2021-01-26 17:54:54 92

原创 1007 Maximum Subsequence Sum (25分)

题目大意:给出一个长度为k的数列,求数列中的最大子段和。思路:对于形如-1、0、0、-1、-1这样的数列来说,结果应该是0 0 0。即只有全为负数时,才会输出0和该数列的首位两个数。代码:#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int N=1e4+5;int a[N];int main(){ int n; sca

2021-01-26 11:24:46 88 1

原创 1009 Product of Polynomials (25分)

题目大意:分别给出两个多项式非零项的项数,对应每个非零项的指数和系数。求这两个多项式的乘积。思路:PAT日常坑点多。结果要按照指数递减的顺序进行输出,因此对map中根据key值排序的规则进行重定义。对于结果只关注非零项的情况。代码:#include <iostream>#include <cstdio>#include <cstring>#include <map>using namespace std;map<int,dou

2021-01-26 10:57:28 102

原创 1010 Radix (25分)

题目大意:给出两个数N1、N2,再给出一个tag和radix,若tag为1,表示N1为radix进制数,否则N2为radix进制数。求对于另一个数,是否存在某一进制使得两数相等。思路:题目本身并不难,但是坑点巨多。题目所给的数中,每位上最小为0,最大为z表示35,但是进制可能会非常大,所以需要通过long long来存数,同时通过二分来判断是否有正确的答案存在。代码:#include <iostream>#include <cstdio>#include <cstri

2021-01-26 10:51:08 174

原创 1013 Battle Over Cities (25分)

题目大意:n个城市,m条双向路径,k个询问。对于每个询问,将所给出城市和与其相关的路径去除后,剩余城市能够连通需要添加路径的条数。思路:对于每个询问通过dfs来求连通块的个数即可,每次需要添加路径的条数为连通块个数-1。代码:#include <iostream>#include <cstdio>#include <cstring>#include <vector>using namespace std;const int N=1e3+5;

2021-01-26 10:45:50 85

原创 1016 Phone Bills (25分)

题目大意:给出一天24个时间段的电话收费安排(美分/每小时),再给出n条电话记录,每条记录包含该记录的用户姓名、时间和状态(on-line与off-line),求每个用户该月需要缴纳多少话费。思路:首先将n条电话记录按照用户姓名的字母序递增,时间递增进行排序。对于同一用户,记录其每一对相邻且状态匹配的记录(即两条记录时间上是紧挨着,同时前一条记录状态为on-line,后一条记录状态为off-line)。对于每个用户计算其通话时长和通话费用。对于计算两个时间之间的花费,可以转化为两个时间相对于0时刻

2021-01-26 10:38:44 118

原创 1014 Waiting in Line (30分)

题目大意:银行有n个窗口,每个窗口前最多可排m个客户,其余客户将在大厅等待,直到某一窗口前的客户业务办理结束后排到该队伍中。题目给出k个客户办理其业务所需的时间,每个客户会根据输入顺序提交业务处理的请求,并有q个询问,输出每个询问中的客户业务办理结束的时间,若其在17:00前没有开始进行办理,将输出Sorry。思路:每个窗口前都维护一个队列,并将每个队列的队首放在一个优先队列中来维护。通过优先队列可以得出当前完成业务办理的窗口,并由此让所等待的客户进入该窗口的队尾。代码:#include <io

2021-01-26 10:25:00 113

原创 1017 Queueing at Bank (25分)

题目大意:一个银行有K个窗口,可同时为K个客户办理业务,其余客户将在大厅等待,直到某一窗口的客户业务办理结束。求每位客户等待时长的平均值。其中,在17:00:00以后到达的客户将无法办理业务,也不会计算等待时间,8:00:00前到达的客户将一直等到8:00:00再进行业务办理。且题目中保证不会有两个客户同时到达。思路:将所有客户的时间转换为秒进行计算。通过优先队列来维护每个窗口的业务办理进程。代码:#include <iostream>#include <cstdio>#i

2021-01-26 10:12:14 72

原创 基于Qt实现的算法可视化(旅行商)

接上篇基于Qt实现的算法可视化(棋盘覆盖、汉诺塔、旅行商),本篇主要给出旅行商问题的具体实现。旅行商问题作为一个NP难问题,我们并不要求解决太过庞大的数据,因此本篇通过可视化技术来展示贪心实现的过程。同时,我们选择一个固定形态的无向图,只支持用户修改起点和各条路径的权值,这样实现起来就简单了许多。具体见代码注释。头文件:#ifndef TSP_H#define TSP_H#include <QWidget>#include <QPushButton>#include

2020-12-10 18:31:17 1437 2

原创 基于Qt实现的算法可视化(汉诺塔)

接上篇基于Qt实现的算法可视化(棋盘覆盖、汉诺塔、旅行商),本篇主要给出汉诺塔问题的具体实现。本篇给出汉诺塔移动的动态实现。虽然Qt有动画类,但是无奈太菜了,短时间内根本学不会,于是通过绘画类,即在短时间内不断重绘矩形,以此来实现动态的移动效果。另外,汉诺塔是一个递归问题,如果边递归边绘制,会出现绘制速度与递归速度不匹配的情况,从而让计数器发生混乱。所以最终思路与棋盘覆盖问题相近,即初始将汉诺塔问题中每一步的移动状态记录下来,然后再一步步动态实现这些移动。具体见代码注释。头文件:#ifndef HAN

2020-12-10 18:23:07 1931 8

原创 基于Qt实现的算法可视化(棋盘覆盖)

接上篇基于Qt实现的算法可视化(棋盘覆盖、汉诺塔、旅行商),本篇主要给出棋盘覆盖问题的具体实现。该篇代码给出了棋盘覆盖分治算法的动态实现过程,先是通过DAC来生成染色顺序的序列,然后通过计时器来依次将每个方格染色,并不断的更新棋盘。具体见代码注释。头文件:#ifndef CHESSCOVER_H#define CHESSCOVER_H#include <QWidget>#include <QPushButton>#include <QPixmap>#in

2020-12-10 18:07:46 2092 8

原创 基于Qt实现的算法可视化(棋盘覆盖、汉诺塔、旅行商)

学校开设了相关的课程,要做算法可视化。由于之前只接触过C系列和一点点Python,就选了Qt+C来实现。实际上,Qt的ui界面设计是非常方便的,但是课设时间短,任务重,直接自己手敲了,没有对ui设计进行深入的学习。自己根据难易程度选择了棋盘覆盖、汉诺塔和旅行商三个问题,实现的算法分别是分治、递归还有贪心。棋盘覆盖篇:汉诺塔篇:旅行商篇:此篇给出主界面的实现:直接给出代码,思路见代码注释。头文件:#ifndef MAINWIDGET_H#define MAINWIDGET_H#includ

2020-12-10 17:54:27 1489

原创 CCF201712-3 Crontab(100分)

非常细节的一道题目,需要有一定的耐心和时间。同时,在写代码的时候也要注意实现方式,虽然题目给了10s的时间,但是依然需要程序足够高效。事实上,求解大型模拟题目一定要将题目需求捋清楚,一步一步处理,保持头脑冷静,不要心态爆炸。下面直接上代码:#include <iostream>#include <cstdio>#include <cstring>#include <map>#include <set>#include <cct

2020-12-09 15:30:34 286

原创 【Stoer_Wagner】算法学习

Stoer_Wagner算法用于求解全图最小割。复杂度为O(n3n^{3}n3),其思路为:1、 固定一个点P,定义mincut为inf。2、 从点P出发,类似Prim扩展出“最大生成树”(事实上不是最大生成树,我们把这个树命名为“XJB树”,这里的最大“边”是一种累加的权值)。注:3、 记录最后一次扩展的两点,将扩展的最后一点的割“边”与mincut比较取最小。4、 合并最后扩展的两点(最后一次扩展的点为t,倒数第二次扩展的点为s,将t合并到s中)。5、 回到第2步,合并n-1次,即只剩下两点

2020-10-19 12:56:45 919 2

原创 Adventure of Super Mario UVA - 10269(Floyd、Dijkstra)

题目链接:Adventure of Super Mario UVA - 10269题目大意:n个地点,前A个为村庄,后B个为城堡,马里奥要从第B个城堡到第A个村庄。另外马里奥有一双魔法靴,可以不耗费时间的走最多L长度,但是靴子的起始位置都必须是村庄或城堡且中途不能经过城堡。魔法靴最多可以使用K次。先用Floyd求一个多源最短路,但是要保证每条最短路不会中途经过城堡。再用Dijkstra求出从第B个城堡到第A个村庄的最短路。#include <iostream>#include <c

2020-09-14 11:52:20 170

原创 LCIS HDU - 3308、The LCIS on the Tree HDU - 4718(树剖、线段树、区间合并)

LCIS是The LCIS on the Tree的简易版。3308是一道简单的线段树+区间和并。4718是将LCIS在树上运行,因此,就需要在LCIS的基础上再加一个树链剖分。LCIS的代码:#include <iostream>#include <cstdio>#include <cstring>using namespace std;c...

2020-03-14 16:25:09 209

原创 Marks Distribution UVA - 10910(组合计数)

题目链接:Marks Distribution UVA - 10910题目大意:n个科目,及格分数为p,一个人总分为t。求该人所有课程及格时各门课得分可能有多少种情况。可以将该问题看作是有n个不同的盒子,允许盒子为空,且每个盒子至少有p个球,则先在每个盒子中放入p个球,剩下t-n*p个球,将剩下的球再放入这n个不同的盒子,有多少种不同的方法?设tem=t-n*p,则将tem个小球分成n组需要...

2019-10-15 19:32:02 136

原创 A Graph Problem UVA - 11069(规律)

题目链接:A Graph Problem UVA - 11069题目大意:从按照升序排列的n个节点中取出m个,使得这m个节点间的绝对值为2或3。问有多少种取法?对于第n个元素来说,可以和之前的n-2个元素构成的集合构成新集合,也可以和之前的n-3个元素构成的集合构成集合。故:ans[n]=ans[n-2]+ans[n-3]#include <iostream>#include...

2019-10-15 19:23:38 167

原创 Tri Tiling UVA - 10918(规律)

题目链接:Tri Tiling UVA - 10918题目大意:求有多少种方法可以用1x2的骨牌铺满3xN的矩形程序中给出了递推关系,事实上,化简后的公式为ans[n]=4*ans[n-2]-ans[n-4]#include <stdio.h>#define N 30int fib[N+1];void setfib(void){ int i,sum=1;...

2019-10-15 19:16:57 168

原创 !! Really Strange !! UVA - 10519(大数、规律)

题目链接:!! Really Strange !! UVA - 10519题目大意:求n个圆最多可以将一个平面分成几块儿注:ans[0]=1#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int N=1e2+5;struct b...

2019-10-14 19:34:04 134

原创 Tiling UVA - 10359(大数、规律)

题目链接:Tiling UVA - 10359题目大意:有1x2和2x2两种瓷砖,问有多少种方法可以将2xN的地面铺满。递推关系:ans[i]=ans[i-1]+2*ans[i-2]#include <stdio.h>#include <string.h>char s[251][101];void setfib(void){ int i,j,len...

2019-10-14 19:24:52 169

原创 Throwing cards away II UVA - 10940(规律)

题目链接:Throwing cards away II UVA - 10940题目大意:给出一个1~n的序列表示一堆牌,1在牌顶,n在牌底。每次从牌顶取两张,第一张弃掉,第二张放到牌低,求最后剩下的牌。ans[2n+k]=2*k(1<=k<2n)注:ans[1]=1#include <iostream>#include <cstdio>using ...

2019-10-14 19:20:11 147

原创 Pizza Cutting UVA - 10079(规律)

题目链接:Pizza Cutting UVA - 10079题目大意:一个披萨,切n刀,最多可以切几块。ans[n]=1+((1+n)*n)/2#include <iostream>#include <cstdio>using namespace std;int main(){ int n; while(~scanf("%d",&n...

2019-10-14 19:14:47 239

原创 Safe Salutations UVA - 991(卡特兰数)

题目链接:Safe Salutations UVA - 991题目大意:圆上有2n个点,将这2n个点成对相连后,要求所连线段都不重合,求有多少种连接的方法。卡特兰数的几种典型应用:1、 括号化问题。n个左括号和n个右括号组成的合法括号序列的数量?矩阵链乘:P=a1×a2×a3×……×an,依据乘法结合律,不改变其顺序,用括号表示成对的乘积,试问有几种括号化的方案?2、 出栈次序问题...

2019-10-14 19:12:10 162

原创 Overflow UVA - 465(借助double实现的大数比较)

题目链接:Overflow UVA - 465题目没有卡精度,可以使用double类型水过。float:3.40282e+038 ~ 1.17549e-038double:1.79769e+308 ~ 2.22507e-308long double:1.18973e+4932 ~ 3.3621e-4932#include <iostream>#include <cst...

2019-10-12 20:29:07 130

空空如也

空空如也

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

TA关注的人

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