
算法
文章平均质量分 59
一打雪碧
这个作者很懒,什么都没留下…
展开
-
2019浙江大学考研复试上机题 Ambulance Dispatch (30 分)最直观的解法
思路最直观的解法就是,建完图之后,每读入一个pick-up spots,就以它为起点,进行一次dijkstra,获得从它到所有点(包括救护车派遣中心)的最短距离、前驱。之后,从每个救护车派遣中心出发,进行dfs,得到从该救护车派遣中心到当前pick-up spots的完整路径,比较路径即可,获得最优路径。使用优先队列优化的dijkstra,第四个数据点用时200ms。(睡觉#include <bits/stdc++.h>using namespace std;struct nod原创 2022-03-20 00:30:35 · 404 阅读 · 0 评论 -
Stall Reservations POJ
原题链接经典贪心题目。思路:开结构体cow、stall分别表示牛、畜栏,其中,每个cow都有编号、开始挤奶、结束挤奶时间,每个stall都有编号、当前在该畜栏中挤奶的牛的挤奶结束时间。struct cow { int st, ed; // 牛开始、结束挤奶的时间 int cno; // 牛的编号 cow () {} cow (int s, int e) : st(s), ed(e) {} bool operator < (const cow &b原创 2022-03-12 12:54:17 · 219 阅读 · 0 评论 -
第4章-18 猴子选大王 (20 分)【约瑟夫环问题】
原题链接本题,实际上是约瑟夫环的问题。如果实打实的去模拟,那确实是有些费劲。不过该问题,有非常简单的算法。具体原理可以参考这篇文章约瑟夫环问题的公式解法本体代码如下n,pos = eval(input()),0for cnt in range(2,n+1): pos = (pos+3)%cntprint(pos+1)只要明白了公式的原理,其实代码是相当简洁的。...原创 2022-02-27 09:17:45 · 239 阅读 · 0 评论 -
最近公共祖先
二叉树的最近公共祖先我最开始是使用的笨方法,使用两个无序图分别保存结点与高度的映射、结点与父节点的映射。这样,先将两个结点通过不断往上找父节点而将高度调整到一样高。再之后不断比较是否当前两个结点是否相同。如果相同,那么就是最近父节点。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * Tr原创 2022-01-21 16:28:04 · 320 阅读 · 0 评论 -
拓扑排序以及关键路径模板
拓扑排序#include <bits/stdc++.h>using namespace std;const int maxn = 1010;int n,m; //定点数、边数vector<int> adj[maxn];//图:邻接表int indegree[maxn] = {0};//各个顶点的入度bool topSort(){ int cnt = 0; queue<int> q; for(int u = 0;u <n原创 2021-03-23 17:03:34 · 380 阅读 · 0 评论 -
2021年春季PAT甲级98分题解(附近7次pat统计数据)
0基础非科班的我,在自学数据结构之后,终于在第四次PAT考试,拿到了一个还满意的分数。将这次的题解贴一下第一题(扣了2分)题意给定两个正整数n、maxp,其中n <= 10,2 <= maxp < 100000,在maxp范围内求得一个有n个素数组成的等差序列,如果答案不唯一,输出等差最大的序列,答案还不唯一的话,输出第一个数最大的序列,如果找不到,则输出小于等于maxp的最大的素数。样例输入一5 1000输出一23 263 503 743 983输入二10 20原创 2021-03-14 22:26:46 · 931 阅读 · 0 评论 -
使用优先队列priority_queue来优化Dijkstra
代码如下:#include<bits/stdc++.h>using namespace std;struct node{ int u,dis; node(){} node(int _u,int d):u(_u),dis(d){} bool operator < (const node &b)const{ return dis > b.dis; }};const int maxn = 1000;const原创 2021-03-10 11:49:18 · 392 阅读 · 0 评论 -
对比冒泡、简单插入、归并、快速排序速度
本文使用样本大小为100000大小的随机数据进行排序算法的对比冒泡排序#include <bits/stdc++.h>using namespace std;const int maxn = 1e5;int data[maxn];int main(){ srand((unsigned)time(nullptr)); for(int i = 0;i < maxn;i++) data[i] = rand() % 30000; int st = c原创 2021-03-06 22:09:37 · 705 阅读 · 0 评论 -
PAT1063 Set Similarity(测试点4超时)set使用
原题链接1063 Set Similarity这道题挺简单的,就是给好几个数列,每个数列里面有可能有重复元素,再给定几个查询,每个查询给了两个数列编号(从1开始),问在这两个数列中都出现的数的个数nc 占 两个数组中的去掉重复数据后的数的个数nt的百分比。比如说99 87 10187 101 5 87这两个数组中,重复出现的元素为87,101,故nc = 2。而所有数据为5、87、99、101,即nt = 4,所以占比为50.0%。因为原数列中就可能包含有重复元素,所以使用unorder.原创 2021-03-05 11:35:16 · 238 阅读 · 2 评论 -
返回数据时赋值
在函数中,返回值语句可以是一条计算赋值语句发现一个以前没有注意到的地方#include <iostream>using namespace std;int getans(){ int a = 4; int b = 5; int ans; return ans = a + b;}int main(){ printf("%d",getans()); return 0;}//运行结果9挺有意思的,在main中调用了getan原创 2021-03-04 21:17:54 · 730 阅读 · 1 评论 -
PATA1145 Hashing - Average Search Time(坑点说明)
原题链接1145 Hashing - Average Search Time本题考察哈希表,往里面放置数据以及计算进行探查平均次数。数据结构题目告诉所给定的表长都是小于等于10000的,所以,使用数组pos[10010]来记录当前位置是否被占用,初始值为false,以及数组h[10010]来记录当前位置里面放置的数据,初始值全部为-1,使用vector < int > no来记录插不进哈希表中的数据,使用sum来记录总的探查次数,初始值为0。const int maxn = 10010;原创 2021-03-04 16:57:51 · 238 阅读 · 1 评论 -
sort函数
对于常规非结构体类型的数组或者是向量,可以使用sort进行排序。从小到大排序#include <iostream>#include <vector>#include <algorithm>using namespace std;void show(vector<int> &v){ for(auto n:v) printf("%d ",n);}int main(){ vector<int> v{4,8,原创 2021-02-21 15:35:30 · 137 阅读 · 0 评论 -
PAT甲级1065 A+B and C (64bit) 详细版
原题链接1065 A+B and C (64bit)无论是在pat还是在leetcode中,总是特别喜欢出一些数据取到类型边界的问题。这都涉及到计算机组成原理中的数据在计算机中存放问题。现以PAT甲级1065题为出发点总结如下。众所周知,数据在计算机中是以二进制补码的形式存放的。其中有符号数的最高位解释为符号位,无符号数的最高位仍未数据位。以64位的long long为例,一个long long类型的整数在计算机中占据64bit,即8B(字节)。并且最高位即第63位(从0开始)为符号位,取值范围为[-原创 2021-02-20 22:48:38 · 553 阅读 · 5 评论 -
PAT中的四舍五入
在pat乙级中有这么一道题目1026 程序运行时间,题目并不难,但是有一个坑点就是,不足一秒的时间要进行四舍五入,按照题意是当对时间间隔对100取余之后,观察余数与50的关系,即当余数小于50,则直接舍弃余数,但当余数大于等于50,则将秒数+1。#include <iostream>using namespace std;int main(){ int st,en; scanf("%d%d",&st,&en); int total = (en原创 2021-02-20 16:30:30 · 180 阅读 · 0 评论 -
关于unordered_map
unordered_map是非常常用也非常实用的一个建立映射的容器。当我们要用来标记某个基本类型是否出现过时,可以使用unordered_map < typename,bool >这样就建立了一个基本类型到bool型的映射,如果一开始建立之后,默认任何typename类型都是没有出现过的,即任何typename的映射结果都是false。同样可以建立unordered_map<typename,int> ,即建立基本类型到int的映射,重要的是,默认任何int型的数据的一开始的映射原创 2021-01-24 12:11:56 · 340 阅读 · 0 评论 -
查找特殊数组中某元素
开贴记录力扣里面关于特殊数组的查找元素的问题1268. Missing Number丢失的数字//原地hashclass Solution {public: int missingNumber(vector<int>& nums) { for(int i=0;i<nums.size();i++){ while(nums[i]<nums.size() && nums[i]!=i) swap(nums[i]原创 2021-01-23 22:20:34 · 112 阅读 · 0 评论 -
拍案叫绝的逻辑
开贴记录刷题过程中,遇到的令我拍案叫绝的解法。1、1071. Greatest Common Divisor of Strings求给定的两个字符串的最大的公共“公约数”。原创 2021-01-19 22:37:53 · 162 阅读 · 0 评论 -
在读入数据同时,就将数据分类
这是一个非常实用的技巧。在pat平台这种需要自己读入给定的数据时,可以边读入边将数据分类。在LeetCode这种已经将数据读入,这需要自己处理的平台,在遍历数据时,直接按照题目要求,将数据分类,可以大大减少思考量。例题937. 重新排列日志文件,这道题挺恶心的,英文题意是在是没有读懂。题意是要求将数据进行排序,数据分为两类,敏感!敏感!!数据有分类的需要,分为数字、字符两类,而且要求,原来数据中数字日志要按照原来顺序,可以在遍历给定的数据时,遇到数字日志就将数字日志保存下来,这样,数字日志就自动按照原创 2021-01-19 21:25:15 · 183 阅读 · 0 评论 -
涉及数组奇数位、偶数位的问题&&数据终极状态问题
有一类问题很巧,这类问题涉及到在原数组的奇数位、偶数位之间来回移动数据,类似题目有力扣893. Groups of Special-Equivalent Strings与力扣1217. Minimum Cost to Move Chips to The Same Position巧在什么地方呢,先看1217题,这道题说的是,每个位置上都有一些物品,而每个物品移动一个位置,代价是1,移动两个位置,代价是0。也就是说,i位置上的物品,移动到i+2或者i-2位置上时,是不需要任何代价的,当然前提是,数组不越界。原创 2021-01-19 20:20:23 · 498 阅读 · 0 评论 -
分割字符串以及istringstream提取空格分隔的string类型的单词
如何分割给定的一行string中的单词字符串算法题中经常会出现一种题型,即给定一行字符串,要分割出一整个串中的单词,当然串中是有字母、空格、标点符号。比如Bob hit a ball, the hit BALL flew far after it was hit.该串字符串,将大写字母替换为相应的小写字母后,单词有bob、hit、a、ball、the、flew、far、after、it、was。如何分割,当然了这种分割是在给的已经是一个整串,而不是在输入时分割,如果是输入时分割,则可以使用cin以原创 2021-01-19 16:58:55 · 1146 阅读 · 0 评论 -
二分查找
查找某个满足条件的元素存在与否与查找有序数组中第一个大于等于某个数或者单纯是大于某个数的元素下标的二分查找问题不同,这种查找,是在数组中查找满足某个唯一条件的元素。大体框架是相同的,但是也有不同之处。类似题目力扣852. Peak Index in a Mountain Array本题的ac代码如下。class Solution {public: int peakIndexInMountainArray(vector<int>& arr) { arr.原创 2021-01-18 18:55:10 · 197 阅读 · 0 评论 -
N皇后问题
问题表述在8×8格的国际象棋上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。是回溯算法的典型案例。原创 2021-01-16 16:22:58 · 1775 阅读 · 1 评论 -
各种序列建树
使用中序加其余序列建树时,会有多次递归,首先使用unordered_map<int,int>将值所在的数组位置保存下来,这样不用每次都去遍历数组便可以获得值所在的数组下标原创 2021-01-08 16:57:33 · 928 阅读 · 0 评论