eoj
rd142857
这个作者很懒,什么都没留下…
展开
-
2021秋季《数据结构》_ EOJ 1096.Building Roads
题目Farmer John had just acquired several new farms! He wants to connect the farms with roads so that he can travel from any farm to any other farm via a sequence of roads; roads already connect some of the farms.思路将已经连接上的点放进同一个并查集中,再用kruskal生成MST,判断条件由一般原创 2021-12-20 21:49:49 · 592 阅读 · 0 评论 -
2021秋季《数据结构》_EOJ 1095.公路村村通
题目思路代码prim#include<bits/stdc++.h>using namespace std;#define MAXN 1001#define INF 999999int cost[MAXN][MAXN]; // 存权值int prim(int cost[][MAXN], int n, int u)// 选定u在U里{ int res = 0; int lowcost[MAXN]; // 从U到V-U的各条边代价 int closest[MAX原创 2021-12-19 21:55:42 · 462 阅读 · 0 评论 -
2021秋季《数据结构》_EOJ 1071.平衡二叉树
题目思路搜到了template但已经忘了怎么用了…(好罪恶照着书上的代码大概复原了一下代码#include<bits/stdc++.h>using namespace std;int a[201] = { 0 };typedef struct AVLTree{ int data; struct AVLTree* lchild; struct AVLTree* rchild; int height;}AVLNode;int Height(AVLNode* r原创 2021-12-15 16:33:16 · 435 阅读 · 0 评论 -
2021秋季《数据结构》_EOJ 1091.六度空间
题目“六度空间”理论又称作“六度分隔(Six Degrees of Separation)”理论。这个理论可以通俗地阐述为:“你和任何一个陌生人之间所间隔的人不会超过六个,也就是说,最多通过五个人你就能够认识任何一个陌生人。”如图所示。“六度空间”理论虽然得到广泛的认同,并且正在得到越来越多的应用。但是数十年来,试图验证这个理论始终是许多社会学家努力追求的目标。然而由于历史的原因,这样的研究具有太大的局限性和困难。随着当代人的联络主要依赖于电话、短信、微信以及因特网上即时通信等工具,能够体现社交网络关系原创 2021-12-15 14:40:45 · 1441 阅读 · 0 评论 -
2021秋季《数据结构》_EOJ 1087.地下迷宫探索
题目假设有一个地下通道迷宫,它的通道都是直的,而通道所有交叉点(包括通道的端点)上都有一盏灯和一个开关。请问你如何从某个起点开始在迷宫中点亮所有的灯并回到起点?思路相较于一般dfs,原创 2021-12-15 14:35:35 · 398 阅读 · 0 评论 -
2021秋季《数据结构》_EOJ 1075.最优二叉搜索树
题目思路参考这篇博客和这篇博客大体思路见注释。代码#include<bits/stdc++.h>using namespace std;#define MAXN 1002#define INFIN 5000double p[MAXN] = { 0 }; // 结点查找概率double q[MAXN] = { 0 }; // 伪关键字查找概率double e[MAXN][MAXN] = { {0} };// e[i][j]表示从结点i到结点j构成的最有查找树的概率期原创 2021-12-09 17:56:05 · 427 阅读 · 0 评论 -
2021秋季《数据结构》_EOJ 1074. 寻找EMB富豪
题目胡润百富是追踪记录中国企业家群体变化的权威机构,是由出生于欧洲卢森堡的英国注册会计师胡润先生于1999年创立的。是中国推出第一份财富排行榜,也是现在国内财经榜单里影响最大的一个榜单。1999年,胡润首创“百富榜”,此后编制了一系列具有突破性意义的排行榜。旗下拥有《胡润百富》杂志,及系列论坛和活动。2004年首创“胡润慈善榜”,慈善募捐已连续发布了十年,它旨在倡导企业家们关注慈善,积极回报社会。不可否认,富豪榜确实是胡润的一个研究产品,而且通过这个产品也使胡润成为了千万富翁。但是,富豪榜的积极意义远原创 2021-12-07 20:56:21 · 635 阅读 · 0 评论 -
2021秋季《数据结构》_EOJ 1086.哥尼斯堡的七桥问题
题目哥尼斯堡是位于普累格河上的一座城市,它包含两个岛屿及连接它们的七座桥,如图所示。可否走过这样的七座桥,而且每桥只走过一次?瑞士数学家欧拉(Leonhard Euler,1707-1783)最终解决了这个问题,并由此创立了拓扑学。这个问题如今可以描述为判断欧拉回路是否存在的问题。欧拉回路是指不令笔离开纸面,可画过图中每条边仅一次,且可以回到起点的一条回路。现给定一个无向图,问是否存在欧拉回路?思路由于要求遍历每一条边,所以对于每一个点,进入这个点的边和离开这个点的边的数目必定相等。要求满原创 2021-12-01 14:11:55 · 804 阅读 · 0 评论 -
2021秋季《数据结构》_EOJ 1085.华师大卫星照片
题目jim 通过 Google 得到了华师大WH像素的卫星照片(1≤W≤80,1≤H≤10001\leq W\leq 80,1\leq H\leq 10001≤W≤80,1≤H≤1000 ,希望找出最大的 ” 连续的 “(互相连接的) 建筑。对于一个建筑的任何一对像素,其中一个像素如果能横向的或纵向的与属于这个建筑的另一个像素相连,这样的建筑称作是连续的。每一张照片都数字化了,建筑区显示为 ““, 非建筑区显示为 “.”。下面是一个 10 × 5 的卫星照片样例 :…*…**.…***.………*原创 2021-12-01 12:58:49 · 534 阅读 · 0 评论 -
2021秋季《数据结构》_EOJ. 1078 Huffman树的最小外部加权值(不构造树直接求解)
题目我们大家都学习了 Huffman 算法,给出每一个点的权值,它可以求出一个具有最小加权外部路径的二叉树,也就是使造价 (树枝长度为根结点到叶结点边数) 最小的二叉树。现在由你来完成这项工作。思路方法一不构造哈夫曼树,类似于特纳法则,非叶子结点权值之和即为外部加权值。递归一个数组,先对数组升序排序,然后每次取a[0]+a[1]为一个新的结点权值,即构造一个非叶子结点tmp,再将tmp接入数组,重复这个过程即可。方法二构造哈夫曼树,太麻烦了等等再说(…代码方法一#include <原创 2021-11-19 14:22:50 · 1318 阅读 · 0 评论 -
2021秋季《数据结构》_ EOJ.1109二分插入排序
题目思路正常二分代码#include<bits/stdc++.h>using namespace std;int res[10001] = { 0 };void BSort(int a[], int n){ for (int i = 1; i < n; i++) { int x = a[i]; int left = 0; int right = i - 1; int mid; //cout << "i=" << i &原创 2021-11-14 15:45:49 · 776 阅读 · 0 评论 -
2021秋季《数据结构》_EOJ 1083.小强的烦恼
题目思路不得不说这个题干实在是蚌埠住了)敌人的敌人是朋友开俩数组,一个记朋友一个记敌人压缩路径可以大大提高效率代码#include<bits/stdc++.h>using namespace std;int a[100001];int b[100001];int findFriend(int a[], int x){ int k = x; while(a[k]!=k) k=a[k]; while(x!=k) {原创 2021-11-07 22:36:49 · 264 阅读 · 0 评论 -
2021秋季《数据结构》_EOJ 1082. Virtual Friends
题目These days, you can do all sorts of things online. For example, you can use various websites to make virtual friends. For some people, growing their social network (their friends, their friends’ friends, their friends’ friends’ friends, and so on), has原创 2021-11-05 15:52:10 · 240 阅读 · 0 评论 -
2021秋季《数据结构》_EOJ1065.树的相关操作
题目树的双亲表示输入格式第一行输入n表示结点个数,接下来n行,每行输入一个index和parent,index表示当前结点编号(同时该结点的data值等于index),parent表示index这个结点的双亲结点编号。如果parent为-1,表示index为根节点。保证0<n<1000,index在[1,n]范围内,但根节点编号不一定为1.输入例1:33 21 22 -1输出格式输出包含7行,每一行的信息分别为:树的前序遍历序列,用空格分隔树的后序遍历序列,用空格分隔树原创 2021-10-30 17:18:10 · 341 阅读 · 0 评论 -
2021秋季《数据结构》_EOJ1064. 树的层号表示法
题目根据树的层号表示建树,打印树的后序遍历序列。A/ \B C/ \D E可以表示为(0,A) (1,B) (2,D) (2,E) (1,C)。思路为了依照输入唯一确定一棵树,struct中还需要加入parent和child属性可以利用cin对输入进行简化处理如果仅使用pcNode而不使用levelNode,在构建树的过程中,例如在定义pcNode* root时,需要将a[0]中的信息拷贝进root,而child为一个数组,如果使用手动拷贝,则操作较为繁琐;如果定义拷贝构造原创 2021-10-30 16:19:02 · 819 阅读 · 0 评论 -
2021秋季《数据结构》_ EOJ.1061 二维数组排序
题目有一个 n 行组成的两维整数数组 (每行有m 个元素,),对数组的行按以下顺序排序:按每行所有元素值的和从小到大排序。行的和相同时比较行内第 1 个元素的值,小的排在前面,若第 1 个元素的值也相等,则比较第 2 个元素,以此类推。只需按要求写出函数定义,并使用给定的测试程序测试你所定义函数的正确性。不要改动测试程序。测试正确后,将测试程序和函数定义一起提交。#define M 100//********** Specification of SortLines**********voi原创 2021-10-29 11:02:47 · 370 阅读 · 0 评论 -
2021秋季《数据结构》_EOJ 1049.三元组稀疏矩阵相加
题目思路简单的遍历和条件判断。一直出现tls的问题,在看了谢哥博客之后才理解提示中“注意输入输出上的优化”指的是用scanf和printf,这俩比cin和cout快,替换了之后1.2s不到过了。代码#include<bits/stdc++.h>using namespace std;#define MAX 2000000typedef struct{ int rowIdx; int colIdx; int val;}Tuple;typedef struct{原创 2021-10-29 10:23:07 · 296 阅读 · 0 评论 -
2021秋季《数据结构》_EOJ 1063.树的双亲存储法(parent+child / parent)
题目前面介绍了树的链式存储结构,那么如何用顺序存储来存储一棵树呢?在顺序存储时,我们除了存储每个结点值外,还要存储树中结点与结点之间的逻辑关系(即双亲与孩子结点之间的关系)。下面介绍树的双亲存储法。编号,从根结点(它的编号为 0)开始,按从上到下的层次顺序,每一层按从左到右的顺序,递增地依次给每一个结点一个编号,图1上标出了各个结点的编号。存储,如果用一维数组 tree[n] 来存储图1中的这棵树,则树中每个结点存储在 tree[n] 中的下标等于它的编号值,而且在数组 tree[n] 中, 每个元素原创 2021-10-29 09:53:10 · 1382 阅读 · 0 评论 -
2021秋季《数据结构》_EOJ 1060.数组排序
题目给定一个长度为 N 的整数数组,按如下规则排序并输出。首先,输出重复出现次数最多的元素;出现次数相同时,按元素值由小到大输出。例如对于数组 1 2 3 3 4 2 3 1 5 7 排序后输出 3 3 3 1 1 2 2 4 5 7。思路简单的桶排序。由于要求重复输出,所以用个struct。代码#include<bits/stdc++.h>using namespace std;struct MyStruct{ int val; int time=0;};bool原创 2021-10-24 22:25:13 · 399 阅读 · 4 评论 -
2021秋季《数据结构》_EOJ 1057. 排名汇总
题目程序设计能力实训是华东师范大学计软院让学生非常头痛的一门课程,课程考试旨在通过统一组织的在线考试及自动评测方法客观地评判考生的算法设计与程序设计实现能力,每次考试会有多个考场同时进行考试,假设每个考场会在考试结束后产生一份学生成绩,之后将各个考场的成绩汇总为一份总的成绩单,现在请你对这张总的成绩单进行排名。思路实训,我的痛苦面具简单的做法是用库函数sort,由于二维数组行分布并不均匀,处理起来有点麻烦(其实是太菜处理不好),所以将排好序的二维数组拷贝进一个一维数组重新排序。需要注意的是,同分原创 2021-10-22 13:11:59 · 297 阅读 · 0 评论 -
2021秋季《数据结构》_EOJ 1056.统计工龄
题目华东师范大学有 NNN 名老师,某年某月某日,学校想要给老师发福利,按照工龄的多少来决定福利的金额。请按照要求按工龄增序输出每个工龄段有多少老师。思路基础桶排序代码#include<bits/stdc++.h>using namespace std;#define N 100000int main(){ int n; cin >> n; int* a = new int[N]; memset(a, 0, N * sizeof(int)); int原创 2021-10-22 13:07:23 · 207 阅读 · 0 评论 -
2021秋季《数据结构》_EOJ 1055.快速排序的优化
题目我们可以优化快速排序的Pivot的选择。随机选择?随机选择的开销也不小。可以考虑用三取样切分,序列的头、尾、当中各取一个元素,用大小居中的元素切分Pivot的不同取法对运行速度有多大影响?对于小规模的数据,例如N不到100,快速排序的效率可能还不如插入排序所以可以设置一个CutOff的阈值,当递归的数据规模充分小,则停止递归,直接调用简单排序试比较不同的CutOff对效率的影响思路采用三数中值分割法,将a[eft],a[center],a[right]中的最小值放在a[left],中原创 2021-10-20 14:49:47 · 349 阅读 · 0 评论 -
2021秋季《数据结构》_EOJ 1054.快速排序
题目取pivot为a[left]思路正常快排,由于要求的输出格式,记得判断相等情况代码#include<bits/stdc++.h>using namespace std;void quickSort(int* a, int left, int right, int n){ //if (left >= right) return; if (left < right) { int pivot = a[left]; int i = left, j = ri原创 2021-10-20 11:43:36 · 187 阅读 · 0 评论 -
2021秋季《数据结构》_EOJ 1052.选择排序
题目略思路找到最小值后再交换,而不是找到一个交换一个代码#include<bits/stdc++.h>using namespace std;void selectionSort(int* a, int n){ for (int i = 0; i < n - 1; i++) { int tmp = a[i]; int tmpidx = i; for (int j = i + 1; j < n; j++) { if (a[j] < tm原创 2021-10-20 10:19:38 · 324 阅读 · 0 评论 -
2021秋季《数据结构》_EOJ 1051.插入排序
题目略思路正常插入排序,需要注意在每一趟比较中a[j - 1] > tmp需要写进for循环判断语句,以获取目标j的位置代码#include<bits/stdc++.h>using namespace std;void insertionSort(int* a, int n){ for (int p = 1; p < n; p++) { int tmp = a[p]; int j = p; for (; j >= 0 && a[原创 2021-10-20 09:59:27 · 158 阅读 · 0 评论 -
2021秋季《数据结构》_EOJ 1050.冒泡排序
题目思路注意递归终止条件判断不再发生交换最后发生交换的元素为第0,1个元素代码#include<bits/stdc++.h>using namespace std;int aa = 0; // 比较次数int bb = 0; // 交换次数int cc = 0; // 冒泡排序的最小次序void bubbleSort_quick(int* a, int left, int right){ int flag = 1; // 是否需要交换 int j =原创 2021-10-19 14:16:09 · 181 阅读 · 0 评论 -
2021秋季《数据结构》_EOJ. 1048稀疏矩阵三元组转化
题目利用原稀疏矩阵的三元数组 aaa,求转置矩阵的三元数组 bbb,并将其规格化,即按行号递增,若行号相同则按照列号递增的顺序。思路方法1简单排序方法2快速稀疏矩阵三元组转置法由于输入按行标升序,而输出事实上是按转置后的行标升序(即转置前的列标升序),用数组num记录每一列有多少个非零元素,数组pos记录每一列的第一个非零元素是所有非零元素(按列升序)中的第几个,存入转置后的矩阵。在提交代码过程中遇到了rte的问题,经助教指出,错因在于将大数组定义在了main函数中。经查阅资料,局部变量在原创 2021-10-19 13:56:35 · 304 阅读 · 0 评论 -
2021秋季《数据结构》_EOJ 1059. 恢复古诗
题目jxtxzzw和好朋友去探险,在山洞里jxtxzzw发现了许多古诗,他很兴奋地呼唤同伴过来,用相机把这些古诗拍下来。每个人都选了一部分进行拍照。回到学校以后,所有人把相机中的照片导出,保存在电脑。这时jxtxzzw发现,竟然当时没有让伙伴们按照顺序拍照。现在这些照片根本就不是有序的,所以这些古代诗歌的碎片完全连不成一个整体。好在现在有一个线索,在相邻的两张照片中,一定有一句是重复的。分别出现在两张碎片的头和尾。例如上图是完整的原文,被拍成了 2 张照片,两张照片各保存了 4 行,如下图。原创 2021-10-16 15:14:43 · 125 阅读 · 0 评论 -
2021秋季《数据结构》_EOJ 1045.口令
题目思路提示的剔除对理解题意来说很重要,否则没完全理解题意的做法就会导致如下惨剧代码#include<bits/stdc++.h>using namespace std;int tt[130] = { 0 };int tp[130] = { 0 };int main(){ int r1 = 0, r2 = 0; string t, p; cin >> t >> p; for (int i = 0; i < 4; i++) {原创 2021-10-15 14:53:04 · 134 阅读 · 0 评论 -
2021秋季《数据结构》_EOJ 1042.字符串模式匹配KMP算法
代码#include<bits/stdc++.h>using namespace std;int Next[100001] = { 0 };void getNext(string p, int* Next){ Next[0] = -1; int len = p.length(); int k = -1; // 前缀 int j = 0; // 后缀 while (j < len - 1) { if (k =原创 2021-10-14 20:23:43 · 130 阅读 · 0 评论 -
2021秋季《数据结构》_EOJ.1040 最长回文子串
题目一个字符串如果从左往右和从右往左读的结果是一样的,则称为回文字符串。写程序找出给定字符串的最长回文子串。例如字符串 abcbabcb,有多个回文字串 bcb,bab,cbabc,bcbabcb 等,其中最长回文子串为 bcbabcb。思路方法1二维数组dp,a[i][j]表示s[i]~s[j]是否为回文串,状态转移方程a[i][j]={0,s[i]!=s[j]a[i+1][j−1],s[i]==s[j]a[i][j] = \begin{cases}0, & s[i]!=s[j]原创 2021-10-11 22:56:22 · 151 阅读 · 0 评论 -
2021秋季《数据结构》_EOJ 1039.最长公共子序列
题目单点时限: 2.0 sec内存限制: 256 MB给你 2 个字符串(可能包括数字以及标点),长度不超过50124 ,请你求出最长的连续的公共子序列。思路构造len1*len2的二维数组不过这样会爆内存,正尝试利用滚动数组解决。(AC后附详解留作学习)代码#include<bits/stdc++.h>using namespace std;int main(){ string s1, s2; cin>>s1>>s2; i原创 2021-10-10 19:48:53 · 324 阅读 · 0 评论 -
2021秋季《数据结构》_EOJ 1037.字符串消除
题目思路暴力遍历代码#include<bits/stdc++.h>using namespace std;char a[3] = {'A', 'B', 'C'};int flag = 0;string eraseString(string s){ // cout<<s<<endl; int len = s.length(); int i = 0; string tmp = ""; while (i<le原创 2021-10-08 11:29:37 · 263 阅读 · 0 评论 -
2021秋季《数据结构》_EOJ 1027.皇后问题(SPJ)
题目还是皇后问题现在需要你求出一共有多少种可能的摆放并且输出任意一种摆放1≤n≤131\leq n\leq 131≤n≤13思路由于问题规模很小,考虑dfs可行开一个数组row[N],row[i]=j表示第i行的皇后在第j列,再开一个数组book[N+1],book[i]=1表示第i列已经有皇后。如此一来,行列方向上的皇后对冲不再需要考虑,只需要考虑对角线方向。逐行测试,将当前行标pos传入dfs。先考虑第pos行的皇后在列上是否与前pos-1行的皇后冲突,这一步通过遍历book[]找到还没原创 2021-10-07 20:05:45 · 213 阅读 · 0 评论 -
2021年秋季《数据结构》_EOJ 1020.铁路调度
。原创 2021-09-29 15:02:33 · 237 阅读 · 0 评论 -
2021年秋季《数据结构》_EOJ 1021.可旋栈
题目思路直接用栈颠来倒去容易超时用队列front和rear的交换实现栈的转置代码#include<bits/stdc++.h>using namespace std;#define N 300003int a[N] = {0};int main(){ int q; cin>>q; int front = N/2-1, rear = N/2; for(int i = 0; i < q; i++) { in原创 2021-09-29 17:36:23 · 181 阅读 · 0 评论 -
2021秋季《数据结构》_EOJ 1025. 迷宫
题目思路dfs bfs复习代码dfs// dfs#include<bits/stdc++.h>using namespace std;int a[101][101] = {{0}};int n, startx, starty, endx, endy;int flag = 0;void dfs(int x, int y){ // cout<<"x,y="<<x<<' '<<y<<endl;原创 2021-10-01 14:13:35 · 151 阅读 · 0 评论 -
2021秋季《数据结构》_EOJ 1018.玩具谜题
题目小南有一套可爱的玩具小人,它们各有不同的职业。有一天,这些玩具小人把小南的眼镜藏了起来。小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的面朝圈外。这时 singer 告诉小南一个谜题:“眼镜藏在我左数第 3 个玩具小人的右数第 1 个玩具小人的左数第 2 个玩具小人那里。”小南发现,这个谜题中玩具小人的朝向非常关键,因为朝内和朝外的玩具小人的左右方向是相反的:面朝圈内的玩具小人,它的左边是顺时针方向,右边是逆时针方向;而面向圈外的玩具小人,它的左边是逆时针方向,右边是顺时针方向。小南一边原创 2021-10-02 21:19:35 · 290 阅读 · 0 评论 -
2021秋季《数据结构》_EOJ 1030.方言翻译(stl/开放地址/邻接链表)
题目你刚从你的家乡搬到上海。这里的人们说着一种难以理解的上海方言。幸运的是,你有一本字典来帮助你理解它们。输入格式输入最多由100000个字典条目组成,后面是一个空行,后面是一个最多100000个词语的消息。空行前面的若干行,每个字典条目是一行,包含普通话词语、后面跟着一个空格、空格后面是一个方言。每一个方言都有唯一确定的普通话与之对应,也就是说在字典里没有任何一个方言出现不止一次。空行后面的若干行,表示你需要查询的词语。每一行有一个词语。题目中说的词语,都是最长10个小写字母的序列。输出原创 2021-10-03 23:38:58 · 386 阅读 · 0 评论 -
2021秋季《数据结构》_EOJ 1026.皇后问题
问题八皇后问题是一个以国际象棋为背景的问题:如何能够在8×88\times 88×8的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。八皇后问题可以推广为更一般的 n×nn\times nn×n 皇后摆放问题:这时棋盘的大小变为 n×nn\times nn×n,而皇后个数也变成nnn 。现在给你 n(1≤n≤105)n(1\leq n\leq 10^5)n(1≤n≤105)个皇后的位置座标,问总共有多少对皇后互相冲突。原创 2021-10-06 13:27:53 · 314 阅读 · 0 评论