![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
Jason_Wcz
这个作者很懒,什么都没留下…
展开
-
16进制转8进制(java)
16进制转8进制的题,提交好几次全超时后,终于改到通过,题目如下并记录下过程。问题描述 给定n个十六进制正整数,输出它们对应的八进制数。输入格式 输入的第一行为一个正整数n (1 接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。输出格式 输出n行,每行为输入对应的八进制正整数。原创 2016-12-02 23:44:53 · 2252 阅读 · 4 评论 -
PAT (Advanced Level) 1051 Pop Sequence (模拟栈的操作)
一开始忘了栈空的时候也要push,结果一堆段错误,我以为是读入数字计数不对,改用vector先存发现没卵用,仔细看了看代码才突然意识到。。。模拟这串数字的出入栈,如果当前读到的数字是7,那么7之前的数字肯定是在栈中或者在前一波中已经出栈了。其中low就是来记录当前这一波入栈最小的值,然后每次入栈都判断下size是不是超过了m,超过即失败;以及如果当前的数字比low小,说明这个数字在前面已经...原创 2018-08-30 11:24:23 · 136 阅读 · 0 评论 -
PAT (Advanced Level) 1063 Set Similarity (set应用)
观察下会发现两个set的长度和减去他们合并后的长度,差值就是相同的数量也就是Nc,合并后的长度就是Nt。因此用set来进行操作就很方便了。此外要打表。否则最后个case会超时。 用不着结构体的,一开始是觉得可能还要记录一些东西,所以写了个结构体,其实根本用不到,也懒得改了#include<iostream>#include<cstdio>#include&...原创 2018-09-03 11:08:14 · 97 阅读 · 0 评论 -
PAT (Advanced Level) 1145 Hashing - Average Search Time (Hash+Quadratic Probing)
纯哈希+平方探测,这里的平方探测很诡异啊,增量的范围最大居然是到表长,没明白怎么回事(猜想大概是采取单纯增长),导致一开始算ASL一直对不上 。#include<iostream>#include<cstdio>#include<vector>#include<cmath>using namespace std;int msize,...原创 2018-09-05 20:19:02 · 147 阅读 · 0 评论 -
PAT (Advanced Level) 1146 Topological Order (拓扑排序)
写的时候太不仔细了,找到错误的序列,每个case居然push完序列号后直接break,然后接下来的数没读完,导致一堆WA,怀疑人生了都。。。#include<iostream>#include<cstdio>#include<vector>using namespace std;int n,m,k;vector<int> g[10...原创 2018-09-05 20:53:45 · 132 阅读 · 0 评论 -
PAT (Advanced Level) 1147 Heaps
我真的是心态崩了,今晚是什么情况,十分钟敲完代码,只对了1个case,我以为是判断最大还是最小堆有问题,一直找,一直改,还是不行,后来去网上看了别人的代码,改了先遍历整个堆确定是什么堆,再后序遍历一次输出,结果还是只对一个???当时我就黑人问号脸,最后发现,"Not Heap"少打了个't',鼓捣了40分钟???最后我把第一遍的代码交了一遍AC了。WTF!!!下次再这种情况,倒立喝水。...原创 2018-09-05 21:57:18 · 88 阅读 · 0 评论 -
PAT (Advanced Level) 1064 Complete Binary Search Tree (二叉搜索树性质利用)
一开始只想着建树,然后想像AVL树那样通过建树过程中的变换,来整棵树最后成为一颗完全二叉树,但是推了半天没找到规律。就去网上看了下别人的思路。。真是一看就明白了,好简单。利用二叉搜索树的一个性质:中序遍历BST,得到的就是升序的序列。把思路转变下,已知存在了一颗完全二叉树,那么如果它还是一颗BST,那它的中序遍历结果一定是升序的,因此,先将输入的数字序列升序排列,再中序遍历完全二叉树,得到...原创 2018-09-03 20:20:51 · 108 阅读 · 0 评论 -
PAT (Advanced Level) 1142 Maximal Clique (判断最大团)
定一个临时统计数组tmp,假如每检查一组序列的时候,遍历每个点它所相邻的点,被扫描到的相邻点在tmp相应下标的位置+1,表示这个点被扫到了一次, 通过题目给的样例,可以推出这样一种规律:假如最后tmp中计数等于k(即给定序列中数字个数)的个数等于k(这里有点绕,手动模拟下就好理解),那么这个图就是最大团;假如计数等于k的个数大于k则是团,但不是最大团;剩下的假如小于的就不是团。上面的这个规律可...原创 2018-09-06 21:34:16 · 204 阅读 · 0 评论 -
PAT(甲)2018年秋季考试题目记录
7-1 Werewolf - Simple Version 这是道逻辑题,没太做过类似这种的题目,所以不是很擅长,这题卡了我四十分钟,而且是过掉2,3之后回头才过掉这题的,但其实想来这题还是很简单的。看题目数据不大,而且狼人和人类中分别必有一人说谎,因此两重循环,每轮假设两个狼人其他均为人类,然后看他们说的话与对应角色的假设身份是否冲突,如果冲突,那么就用掉一次该角色阵营的说谎次数,由于...原创 2018-09-11 10:19:25 · 1428 阅读 · 1 评论 -
PAT (Advanced Level) 1074 Reversing Linked List
最初没仔细读题,case1、5没过,仔细看了看题,真正的题意是:把整个链表以k个结点为一个单位进行reverse。如果剩下结点不足k个,就不用。#include<bits/stdc++.h>using namespace std;typedef struct Node * PtrNode;struct Node{ int add, data, nadd; PtrNod...原创 2018-10-09 21:51:39 · 97 阅读 · 0 评论 -
PAT (Advanced Level) 1078 Hashing (哈希、平方探测冲突处理Quadratic probing)
记录下这题是因为注意平方探测的公式是:,其中i = 0,1,2...TableSize而非先对key取模再加平方。这题质数范围不大,不用二分直接扫也不会T。#include<bits/stdc++.h>using namespace std;int m,n;int cnt;int prime[1300];void init(){ cnt = 0; fo...原创 2018-11-11 18:01:33 · 198 阅读 · 0 评论 -
PAT (Advanced Level) 1081 Rational Sum (gcd+lcm)
这题看起来应该是gcd+lcm,但是不用lcm也能过。还是记录下lcm的代码吧。int lcm(int a, int b){ return a / gcd(a, b) * b;}本题代码: #include<bits/stdc++.h>using namespace std;typedef long long ll;int n;long x,...原创 2018-11-13 21:38:58 · 164 阅读 · 0 评论 -
PAT (Advanced Level) 1086 Tree Traversals Again (二叉树构造及遍历)
这题巨巨巨巨坑。一直以为Push结点就是从1至n的顺序来的,交了之后只错了一个case,而且报的是段错误,查了好久都不觉得什么地方会有段错误啊,栈可能空的情况我已经检查了,其余的地方不可能会错啊,最后改来改去错误还是定位在Push操作那段代码里,既然栈不可能出错,那剩下只可能是各个结点,而root和tmp结点都malloc过,而且全都确保会赋值,因此只有pre会有问题,最后想到万一第一个Push...原创 2018-11-18 20:12:54 · 200 阅读 · 0 评论 -
PAT (Advanced Level) 1057 Stack (树状数组+二分)
第一遍理解错了题意,以为是找栈中间位置那个元素。。。然后兴高采烈手写了个栈以及各种操作权当复习数据结构,结果样例都过不了。。。仔细查了查数据才意识到是找中位数=_=这题找中位数,范围1e5,树状数组就可以,然后由于数据可能比较稀疏,全扫一遍肯定TLE,因此加个二分。顺便这题发现个问题,不知道是不是PAT字符串数组不能用char * s;来初始化,一旦用就是段错误,C++的字符和字符串的原...原创 2018-09-01 14:11:00 · 169 阅读 · 0 评论 -
PAT (Advanced Level) 1039 Course List for Student (字符串哈希)
本来用map来映射名字的,但是超时了。由于名字只有四位,改用哈希。顺便把数据结构字符串哈希那一部分翻出来重看了一遍。#include<iostream>#include<cstdio>#include<cstring>#include<map>#include<vector>#include<queue>...原创 2018-08-25 17:36:25 · 104 阅读 · 0 评论 -
一道坑爹的选牌题目
选牌题目描述:一天,小A和小B在箱子找玩具。他们在箱子的深处发现了一些扑克牌,他们把扑克牌都拿了出来数了数,发现已经凑不成一副扑克了。A,2,4,5,6,7,8,9分别有3,3,3,2,1,3,3,2张,其他的都一张都没有。他们决定拿这些扑克做一个游戏:他们两人轮流(从小A开始)从这些扑克中拿一张出来,然后计算所有拿出来的扑克上数的和(A当做1来计算)。让一人拿完计算的原创 2017-03-20 22:46:21 · 299 阅读 · 0 评论 -
UVA816 Abbott's Revenge
vj上的题目链接:点击打开链接最近在看刘汝佳的书,这题折腾了很久才理解#include#include#include#include#includeusing namespace std;int r0,c0,dir,rs,cs,r2,c2;string mazeName;const char* dirs="NESW";const char* turns="FLR";原创 2017-07-18 13:24:21 · 225 阅读 · 0 评论 -
NYOJ 1316 Interval
这题又用了两个之前不怎么用的函数,以及方法之前也没怎么用过,自己想的时候很挣扎,知道自己想的肯定会超时,然后看了别人的代码才明白,故记录。题目:http://acm.nyist.net/JudgeOnline/problem.php?pid=1316以及题中用到的两个vector函数的详细链接:点击打开链接 代码:#include#include#include#inclu原创 2017-08-18 13:57:12 · 258 阅读 · 1 评论 -
UVA 1601 The Morning after Halloween (优化BFS)
思路就是抽出可以走的路来形成一张新的图,因为题目保证了所有空格连通,否则就超时。还有这题一次可以移动所有字母,这在移动的时候,就类似于FILL那题的倒水,用n层循环来组合所有的可能。其次,如果不用以上的办法,用双向BFS也可以(书上是这么讲的,但我不确定不经过建新图的优化,双向BFS是否会超时,我没有验证过),还有A*算法也可以(这玩意以前听说过,这次趁机学一波)#include#i原创 2017-09-05 12:43:05 · 193 阅读 · 0 评论 -
UVA11212 Editing a Book (IDA*)
对于可以用回溯法求解但解答树的深度没有明显上限的题目,可以考虑用迭代加深搜索(iterative deepening)。如果设计出以一个乐观估价函数,预测从当前结点至少还要扩展基层结点才能得到解,则迭代加神搜索编程了IDA*算法。——《算法竞赛入门经典》p207讲真看书里第一个埃及分数问题,看得我是一脸懵逼。感觉好像是这么个道理,但是没懂到底什么意思。接着就跳过先看了下面那道例题,也就是Edi原创 2017-09-10 16:55:26 · 206 阅读 · 0 评论 -
POJ 1612 The Geodetic Set Problem (Floyd)
VJ题目链接题目大意:给出一张无向图,再给出几组点集,问每组点集中,所有点到点的最短路径,是否走过了所有的点。该题分两个部分:1.用Floyd算法,记录整个图的任意两点间最短路径的距离。然后再通过上述的二维数组来判断任意两点间到底经过了哪些点。代码解释: floyd记录的->map[i][j] 记录从i到j经过多少点的三位数组->set[i][j][k] 由原创 2017-11-13 20:03:41 · 223 阅读 · 0 评论 -
POJ 1456 Supermarket
VJ题目地址题意:n种商品,每种都有一个限定卖出的时间,如果在限定时间内没有卖出,则无法再卖出。每个单位时间内,只允许卖出一件商品。求给出的这组商品利润最高多少。解题思路是用并查集来处理区间,这题的区间是卖出时间的限制。首先取得最大的商品时间,然后在这个最大区间内,初始化dad数组,使每个时间都指向自己,这表明这个时间没有被使用。当这个时间有商品卖出时,则需要把这个时间 t 指向原创 2017-11-16 11:17:37 · 130 阅读 · 0 评论 -
HOJ 1868 八数码 双广搜
用《算法竞赛入门经典》里的两种判重映射都超时,最后网上搜才知道,数据严的时候应该用双向BFSpo下网上找的代码#include #include #include #include #include #include #include using namespace std; #define Maxn 400000 #define原创 2017-08-30 18:01:03 · 189 阅读 · 0 评论 -
PAT (Advanced Level) 1053 Path of Equal Weight (dfs)
这题很简单,没有坑点。记录这题的原因是,第一次提交最后一个case报了段错误,我从上到下代码读了个遍,并不觉得哪里有问题,后来就在网上找,找到个跟我一样,在比较函数里,如果两个path相同,返回的值是true,导致了段错误。查了下大概意思是:只有严格的大于,才应该返回true,小于和等于都归于false详细解释:调用sort段错误问题#include<iostream>...原创 2018-08-31 11:46:19 · 89 阅读 · 0 评论 -
PAT (Advanced Level) 1055 The World's Richest (多关键字排序)
记录下,第一遍string有个case超时,然后我把每次遍历的代码改成基于年龄设置200个桶,这样就可以在年龄段间遍历,这样确实可以过掉原来超时的那个case,但是另一个本来能过的case居然超时了。。。从最后全过的时间对比来看,我猜想大概是后面超时那个case的输出比较集中在worth值高的那部分里,而用桶来遍历,反而更耗时间。最后,第一遍没过还是因为string比较慢,这其实跟我第一次猜...原创 2018-08-31 20:49:45 · 105 阅读 · 0 评论 -
PAT (Advanced Level) 1066 Root of AVL Tree (AVL树构造)
完全考察AVL树的建树,光看书感觉已经掌握了,结果敲的时候发现总会漏一些细节#include<cstdio>#include<iostream>#include<algorithm>using namespace std;typedef struct AVLNode * Position;typedef Position AVLTree;ty...原创 2018-09-04 10:22:17 · 134 阅读 · 0 评论 -
PAT (Advanced Level) 1056 Mice and Rice (模拟)
模拟每轮的结果,每小组的第一进入下一轮,即将对应的id放入下轮的order中,在这轮停止的则放入栈中,这样直到最后order中仅一个人表示已经选出最大的,结束模拟,然后从栈中全部取出(此时已经是有序的了),只需根据round值更新排名信息,最后按0-Np的顺序输出即可。题目简单没有坑,只是有点繁琐。#include<iostream>#include<cstdio&...原创 2018-09-01 11:58:18 · 107 阅读 · 0 评论 -
PAT (Advanced Level) 1079 Total Sales of Supply Chain (树的层序遍历)
简单的层序遍历题,层序扫一遍整棵树,每层个数统计下最后计算即可。#include<bits/stdc++.h>using namespace std;int n;double p, r;vector<int> t[100005];int mark[100005];int level[100005];int max_level;void solv...原创 2018-11-12 19:56:34 · 112 阅读 · 0 评论