2021暑假
暑假一起学算法!
我取名一般都很LOW的
一切自信皆源于自己的强大
展开
-
Wall(凸包)
WallOnce upon a time there was a greedy King who ordered his chief Architect to build a wall around the King’s castle. The King was so greedy, that he would not listen to his Architect’s proposals to build a beautiful brick wall with a perfect shape and n原创 2021-08-01 20:52:04 · 390 阅读 · 0 评论 -
Fishnet
FishnetA fisherman named Etadokah awoke in a very small island. He could see calm, beautiful and blue sea around the island. The previous night he had encountered a terrible storm and had reached this uninhabited island. Some wrecks of his ship were sprea原创 2021-08-01 20:36:35 · 190 阅读 · 0 评论 -
Building a Space Station
Building a Space StationYou are a member of the space station engineering team, and are assigned a task in the construction process of the station. You are expected to write a computer program to complete the task.The space station is made up with a numb原创 2021-08-01 20:20:17 · 204 阅读 · 0 评论 -
Big Number
Big NumberIn many applications very large integers numbers are required. Some of these applications are using keys for secure transmission of data, encryption, etc. In this problem you are given a number, you have to determine the number of digits in the原创 2021-08-01 20:02:46 · 95 阅读 · 0 评论 -
Area(几何)
AreaBeing well known for its highly innovative products, Merck would definitely be a good target for industrial espionage. To protect its brand-new research and development facility the company has installed the latest system of surveillance robots patrol原创 2021-08-01 19:55:44 · 165 阅读 · 0 评论 -
Pie(二分)
PieMy birthday is coming up and traditionally I’m serving pie. Not just one pie, no, I have a number N of them, of various tastes and of various sizes. F of my friends are coming to my party and each of them gets a piece of pie. This should be one piece o原创 2021-08-01 19:39:01 · 97 阅读 · 0 评论 -
Find them, Catch them
Find them, Catch them考察并查集,大意是说城市里有两个帮派,每个人都有特定的编号(从 1 开始),输入中 D 表示后面的两个人属于不同的帮派,若碰到 A,则要求我们根据已知的i信息判断出这两个人是否在同一个帮派,这里我们创建树,对于每一个人,初始化父节点是自己,然后开一个说明当前下标的敌对势力的数组 differ[ ],对于输入的 D 中的两个人 a 和 b,有 differ[a]=b(反之亦如此),对于所有的人(包括编号 x 与 differ[x]),进行根节点的归类(帮派归类),原创 2021-07-31 11:18:04 · 244 阅读 · 0 评论 -
Collecting Beepers
Collecting Beepers一道别样的搜索题,给你起点和几个目标点,求从起点途经所有目标点再回到起点的最短路径长度,虽然是搜索,但是我们只是需要搜索那几个目标点,因为很容易知道两个目标点之间的最短路就是abs(x1-x2)+abs(y1-y2)(题目要求一次只能左右走或者上下走一格),这样其实比一般的深搜题还水了。。://我愿称之为对指定目标的搜索(DFS),而不是胡子眉毛一把抓(逐个搜索) #include<iostream>#include<cstdio>#i原创 2021-07-30 09:29:00 · 93 阅读 · 0 评论 -
Channel Allocation
Channel Allocation经典的图着色问题的变形,其实就是换了一个情境,有“公式”可以套,但是提交时没有通过,显示 Wrong Answer,但是样例是过了,时间问题就不再深究了,这里我只要求明白算法的思想://经典着色问题#include<iostream>#include<cstdio>#include<cstring>#include<string>#define inf 1000//对 color 数组初始化为“无穷大”u原创 2021-07-28 20:45:20 · 147 阅读 · 0 评论 -
Image Perimeters(真让人无语。。)
Image Perimeters求连通块的周长,这里用的深搜实现,做了一些深搜的题了,还是感觉深搜没有广搜那么自然,因为涉及到递归,理解起来更加困难一些,还是需要加强该方面的训练!这一道题卡了不少时间,先看代码://深搜;求连通块的周长(输入保证没有“空心”)#include<iostream>#include<cstdio>#include<cstring>using namespace std;int n, m, a, b;struct g {//原创 2021-07-28 16:34:45 · 255 阅读 · 0 评论 -
Road Construction(转载)
Road Construction卡了一天多,我决定先放一放,主要是对 Tarjan 的代码实现还不是很理解,所以这道题只能转载一个讲得清楚的题解了:【图的连通性】建造道路Road Construction然后下面是里面的 AC 代码(自己写了一遍):#include<iostream>#include<cstdio>#include<cstring>using namespace std;int head[1200], cnt, index1, ans;转载 2021-07-28 09:38:08 · 375 阅读 · 0 评论 -
【转载优质文章】强连通算法--Tarjan个人理解+详解
原文传送入口转载 2021-07-27 15:54:06 · 87 阅读 · 0 评论 -
分割垃圾文
分割线来啦!!——————————————————————————入坑图了,好多好多我不知道的东西,不过好消息是我的假期又有新的东西可以捣鼓了~先一点一点入门吧,加油!!...原创 2021-07-27 15:02:46 · 85 阅读 · 0 评论 -
Knight Moves
Knight Moves依葫芦画瓢,葫芦在这里:Dungeon Master代码几乎一样的套路吧~再注意两点:注意行列与自己设的 x y 坐标的关系!!(竖 x 横 y)注意每一次循环将队列清空:while(!q.empty()) q.pop();否则会报错:Runtime error!//比葫芦画瓢 (高仿 Dungeon Master) //还是注意分清坐标与行列的关系!! #include<iostream>#include<cstdio>#inclu原创 2021-07-26 20:20:10 · 96 阅读 · 0 评论 -
Dungeon Master
Dungeon Master经典!经典!!经典!!!广搜题,一开始自己尝试解决没能成功,后来看了题解我大为震撼,包含了不少我需要具备的思想,值得细细品味这道题://我愿意称之为搜索的典型例题!!!(太经典了) //认真吸收里面的思想!! //广搜解法 #include<iostream>#include<cstdio>#include<cstring>#include<queue>using namespace std;int l, r原创 2021-07-26 19:33:43 · 167 阅读 · 0 评论 -
Prime Path
Prime Path题目大意:每次输入两个四位素数m,n,求由 m 变到 n 需要的最少变化次数,规定每次变化一位数,并且经过的数都为素数,我们用广度优先搜索来求最小次数(最短路径)://以结构体为节点的队列(类比链表)#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<queue>using namespace std;int t原创 2021-07-26 10:07:26 · 84 阅读 · 0 评论 -
Find The Multiple
Find The Multiple一道搜索题,首先我们得搞明白几种长整型:long long:[-2^63 ,2^63-1],也就是 -9223372036854775808~9223372036854775807(19位)usigned long long:[0,2^64-1]:0~18446744073709551615(20位),这一道题用搜索来做,设置成 long long 过不了,ull 却可以了,卡的那么死么??正好复习一下搜索:dfs:#include<iostream&原创 2021-07-25 20:24:09 · 94 阅读 · 0 评论 -
Parencodings
Parencodings有一段时间没有接触模拟题了,之前也没怎么做过,理解题干并且用代码实现罢了,这一道题的大致思路:理解两个数值数组的含义,已经给出的表示从左到右看右括号左边的左括号的总数,需要输出的是每一对配对的括号中间会有多少个左括号(包括该括号对的左括号)(难点),然后我们根据题意写代码就行了,考验的是代码实现能力://不是那么好想的模拟 #include<iostream>#include<cstdio>#include<cstring>using原创 2021-07-24 18:48:06 · 126 阅读 · 0 评论 -
Crashing Robots
Crashing RobotsSample Input:一道比较复杂的模拟题,一句话:细节决定成败!我还是没有对结构体太敏感,以后还是要多用,提高代码的效率!代码注释说明一切:(我很长,请你忍一下~)://麻烦的模拟题 #include<iostream>#include<cstdio>#include<Cstring>using namespace std;//使用结构体更加简洁!(一开始用的数组,菜菜~) struct Robot {原创 2021-07-25 10:46:46 · 114 阅读 · 0 评论 -
Robot Motion
Robot Motion一开始还以为是模拟,没想到是搜索,考察递归的使用://还是感觉不够深刻:递归实现移动(搜索)#include<iostream>#include<cstdio>#include<cstring>using namespace std;int Y, X, start;char map[15][15];int steps[15][15];//记录对应下标的格子用的步数 void move(int step, int x, int原创 2021-07-25 15:22:59 · 91 阅读 · 0 评论 -
Tautology
Tautology对我来说不好想,但是看了一些题解还是挺好理解的,算是第一次做关于栈的题吧,思路我就白嫖了:这道题的表格倒是挺有意思的,需要翻译成相应的运算符,还是有一定的趣味性与挑战性的~:#include<iostream>#include<cstdio>#include<cstring>#include<stack>//栈的头文件 using namespace std;int pp, qq, rr, ss, tt;char wff原创 2021-07-24 10:24:47 · 123 阅读 · 0 评论 -
钉子和小球
钉子和小球又是动态规划,而且又是不会~其实这道题再仔细想一想还是可以做的,比之前的简单一些,大致的思路:假设从 dp[i][j] 开始,如果这里有钉子,那么可以落到下一行的两边可能性各为二分之一,也即 dp[i + 1][j] += (dp[i][j] / 2) 和 dp[i + 1][j + 1] += (dp[i][j] / 2),如果是空的呢,就是直接落在正下方了,注意 i 和 j 的变化就好啦:dp[i+2][j+1]+=dp[i][j],然后抓住细节就不难了(细节写在注释中了~)://动态原创 2021-07-22 09:47:20 · 157 阅读 · 0 评论 -
最大公因数与最小公倍数(递归)
主要是考虑到在一些题目中会用到,就不用在这块边角料上浪费时间了!原创 2021-07-22 08:57:27 · 95 阅读 · 0 评论 -
P1255 数楼梯
突然发现洛谷上的题还挺有意思的~主要是可以巩固知识点还不算复杂(适合我这种菜鸡。。),这一道题,递推,实质是斐波那契数列,新颖的地方就是换作了高精度的加法了。。//数楼梯:高精度加法+递推 #include<iostream>#include<cstdio>#include<cstring>using namespace std;int a[5050], b[5050], c[5050];//开数组进行高精度加法运算,c 存放(计算)当前第 i 个,a 存.原创 2021-07-21 21:11:21 · 68 阅读 · 0 评论 -
P1303 A*B Problem
非负整数的高精度乘法问题://高精度乘法(非负整数) (和加法变化并不大) #include<iostream>#include<cstring> #include<cstdio>using namespace std;int a[5000], b[5000], c[5000];string x, y;int main() { cin >> x >> y; int la = x.length(); int lb = y.le.原创 2021-07-21 20:11:57 · 85 阅读 · 0 评论 -
P2142 高精度减法
在高精度加法的基础上增加一些细节即可~//高精度正数减法(体会与加法的异同) #include<iostream>#include<cstdio>#include<cstring>using namespace std;int a[10100], b[10100], c[10100];string x, y;int main() { cin >> x >> y; int la = x.length(); int lb = y.原创 2021-07-21 19:36:24 · 77 阅读 · 0 评论 -
P1601 A+B Problem(高精)
P1601 A+B Problem(高精)(这只是高精度的加法哦~)开始接触一下高精度计算,起码没有动态规划那么复杂~,思想含在代码了://高精度算法 #include<iostream>#include<cstdio>#include<cstring> //字符串处理 using namespace std;int x[510], y[510], c[510];//x,y 将字符串转化为数值(一个下标一位数),c 用来存放结果 string a,原创 2021-07-21 19:02:23 · 75 阅读 · 0 评论 -
Moo Volume
Moo Volume忍不住吐槽:他喵的动态规划考的都是思维题吗嘤嘤嘤,而且我都不会~训练吧。。发现动态规划的大致特点,关键在于思维,找关系式子,代码倒是简单,主要是过思维关!思路一:从动态规划的角度入手首先我们要知道这道题是让求一组数的所有的数的差的绝对值的和(双向的),也就是单向最后乘以二就好了,可能一开始就想到这特么还不简单,直接暴力二层 for 循环!没错,如我所愿超时了,哪能那么容易呢?下面先说说动态规划怎么想,哎!我可怜我的脑细胞啊,我们将输入的一组位置按从小到大排序(还记得 algo原创 2021-07-21 16:31:02 · 147 阅读 · 0 评论 -
Sumsets
Sumsets还是没有想到是动态规划,一旦不告诉你这是动态规划了,我们应该具备这种这种嗅觉了!这是求方案数的,难点在于找到子问题与母问题的关系方程,我没有找到~还是太嫩了,参考了别人的思路,如下:因此翻越了这道坎儿就好写代码了://动态规划,但我不太可能归纳出那么简洁的结论,需要不断练习积累!! #include<iostream>#include<cstdio>using namespace std;int n;int dp[1000010];int main原创 2021-07-21 14:47:57 · 79 阅读 · 0 评论 -
To Bet or Not To Bet
To Bet or Not To Bet又是一道细节满满的题,一个不留神就不能通过。。。找 bug 找好长时间,这是一道动态规划的题,我们将输入的指令全部转化为数值命令,便于我们操作,下面我重点解释一下概率的计算的循环过程,其余的已经写在注释里了,关于代码:for (int i = 0;i <= t;i++) {//注意下标,i=0 表示从 0 步开始计步,j=0 表示从起点开始 for (int j = 0;j <= m;j++) {//这一段循环我在外面说明哦~ if (原创 2021-07-20 21:12:58 · 499 阅读 · 0 评论 -
存在型动态规划——跳一跳
//存在型动态规划#include<iostream>#include<cstdio>using namespace std;int n, step[100];//n:最大距离,step[i]:在 i 处的最大步数 int main() { cin >> n; int f[100]; //f[i]:是否可以来到 i 处 for (int i = 0;i < n;i++) cin >> step[i]; f[0] = 1;//初始化(.原创 2021-07-20 19:13:20 · 125 阅读 · 0 评论 -
计数动态规划——所有路径数
//计数型动态规划 #include<iostream>#include<cstdio>using namespace std;int m, n;//m 行 n 列 int f[100][100];//走到(i,j)的路径总数 int main() { cin >> m >> n; for (int i = 0;i < m;i++) { for (int j = 0;j < n;j++) { if (i == 0 || .原创 2021-07-20 17:27:43 · 169 阅读 · 0 评论 -
最值动态规划——最少硬币组合
#include<iostream>#include<cstdio>#include<cstring>//本来想用 memset 函数来着,后来除了岔子!除了赋值为 0,赋值为其它就不要用了! using namespace std;int sorts, coin[10];//sorts:硬币种类数,coin[]:硬币面值(从小到大) int target;//目标总值 int ans[30];//ans[i] 表示找到的配成 i 时最少硬币数 int .原创 2021-07-20 16:44:37 · 238 阅读 · 0 评论 -
Tree Recovery
Tree Recovery进军二叉树啦!之前也在《大话数据结构》一书中了解了一些,这道题考二叉树的重建,知道了前序遍历与中序遍历的结果,从而构建二叉树并且输出后序遍历的结果,大致思路使用递归,递归的最小单位呢?就是我们知道我们每遇到前序遍历结果的一个字母都会是一个根,然后我们在中序遍历的结果中寻找这个根,而根据中序遍历的特点知道根左侧为其左子树,右侧为其右子树,以此递归就能知道整个树的结构了,最后根据后序遍历的要求输出即可!#include<iostream>#include<原创 2021-07-20 10:34:53 · 137 阅读 · 0 评论 -
Cable master
Cable master这道题不算太难,二分的思想,只是拓展到了浮点数领域而已~况且还给出了二分的上下限(0-100000),注意细节就好了://二分搜索 or 二分查找 #include<iostream>#include<cstdio>#include<cmath>using namespace std;int n, k;double length[10010];//接下来的函数判断所选长度是长了还是短了,为二分提供依据 int check(do原创 2021-07-19 20:15:52 · 120 阅读 · 0 评论 -
Ultra-QuickSort
Ultra-QuickSort参考:逆序数算法//归并排序+逆序数的数量(相邻逆序数)#include<iostream>#include<cstdio>using namespace std;typedef long long ll;const int N=5e5+10; ll n,ans;ll a[N], aux[N];void merge(ll a[], ll l, ll r, ll mid) { ll i, j, k; for (k = l;k &原创 2021-07-19 18:43:24 · 273 阅读 · 0 评论 -
归并排序(转载)
归并排序 详解转载 2021-07-19 10:54:12 · 110 阅读 · 0 评论 -
全排列问题
//#include<bits/stdc++.h>//可恶的VS不让用万能头呜呜呜~#include<iostream>#include<cstdio>using namespace std;void prin();void dfs(int x);int n;bool done[20];//记录当前数是否被选到了int a[20];//记录当前层的数void prin() { for (int i = 1;i <= n;i++) printf.原创 2021-06-05 23:38:47 · 74 阅读 · 0 评论 -
The Castle
题目说明哎~花了一下午加半个晚上,终于可以自己写出来 AC 代码并且成功通过了!不容易,还是自己太菜了有木有,毕竟刚入门。。下面解释一下该题,也加深一下我的理解:首先这道题这些古怪的数字让我头疼,一下子摸不着头脑了,这些数字(从 0 到 15)唯一对应一组墙,就比如说 11 只能对应 1+2+8,也就是只有西墙、北墙和南墙,依照这样的规律,我们创建方向数组,用 0 到 15 做下标,同时 0 到 15 也具有加和意义,比如说北墙下标 10 (2+8)时,由于 10 对应南墙和北墙,包含北墙,所以记录原创 2021-07-18 20:24:21 · 90 阅读 · 0 评论 -
P1162 填涂颜色
思路我们运用BFS(广度优先搜索)来解决此问题,关键一步是在原来矩阵的基础上在外层加一层 0,目的是让外层的 0 形成连通,然后利用广度优先搜索将所有的外层 0 标记,内层 0 不会被标记,从而达到区分不同的 0 而进行填涂的目的~#include<iostream>#include<cstdio>#include<queue>using namespace std;//两个数组控制移动的方向(上下左右)int xx[] = { 1,-1,0,0 };i.原创 2021-07-18 15:53:00 · 152 阅读 · 0 评论