数据结构
数据结构
nefukadia
菜且不学
展开
-
智算之道初赛第二场--情报站
并查集题目,有两个小细节type2的时候输入的x和y的一样的,那么就是知道了某个数的2倍,所以可以当作type1的情况来求解type2输入的x和y来自同一个并查集,那么就不要mix他们,不然qua(并查集中元素的数量)会出错。/* * @Description: * @Autor: Kadia * @Date: 2020-07-19 19:43:47 * @LastEditors: Kadia * @Connect: vx:ccz1354 qq:544692713 * @LastEd原创 2020-07-19 21:58:39 · 244 阅读 · 0 评论 -
入门入门入门线段树模板
先写模板,日后填坑本模板实现数组中对一个区间中每一个的值加减操作和一个区间的和的计算题目:洛谷P3372线段树struct _tree{ int l; int r; long long tag; long long sum;} tree[500005];数组long long a[100005];建立线段树void build(int p, int l, int r){ tree[p].l = l; tree[p].r =原创 2020-06-27 18:13:09 · 125 阅读 · 0 评论 -
POJ1182-食物链并查集解法详情
题目链接Description动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形。A吃B, B吃C,C吃A。现有N个动物,以1-N编号。每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种。有人用两种说法对这N个动物所构成的食物链关系进行描述:第一种说法是"1 X Y",表示X和Y是同类。第二种说法是"2 X Y",表示X吃Y。此人对N个动物,用上述两种说法,一句接一句地说出K句话,这K句话有的是真的,有的是假的。当一句话满足下列三条之一时,这句话就是假话,否则就原创 2020-06-06 16:06:38 · 298 阅读 · 0 评论 -
数据结构之并查集
并查集是什么并查集是一种用来管理元素分组情况的数据结构。并查集可以高效地进行如下操作。不过需要注意并查集虽然可以进行合并操作,但是却无法进行分割操作。查询元素a和元素b是否属于同组。合并元素a和元素b所在的组。并查集的简单案例n个城市中(编号1~n),有一些城市间会有无向的通路。现在小明想从a城市到b城市,判断是否能实现?即a和b是否有直接或间接的道路连通起来。如有4个城市,其中1和2有道路,3和4有道路。那么1 2可以相通,3 4可以相通,其他情况均不行。简单的思考可以发现,如果我们原创 2020-06-01 20:09:04 · 160 阅读 · 0 评论 -
双向链表简单排序(三个坑)
输入n个学生的信息:学号,姓名,三课成绩按照总成绩排序后以学号,姓名,三课成绩,平均分,总成绩的形式输出最不容易错的就是将struct中的信息交换,这也是在数据较少的情况下推荐使用的,但如果数据比较多,用这种就会显得很傻,因为我们可以用调整链表顺序的方法来实现。但有三个容易错的地方我们采用遍历的方式来排序,用p当前节点,q当作后节点判断q的next是否为空。 如果不做这一步判断,q->next->last=p会REif(q->next!=NULL) q->原创 2020-05-11 15:38:32 · 394 阅读 · 0 评论 -
C语言双向链表题目:猴子选大王/夏令营骑手
猴子选大王 2166成圈的链表#include <stdio.h>#include <stdlib.h>#include <string.h>#include <math.h>//struct _line{ int num; struct _line *last; struct _line *next;};...原创 2020-04-24 13:59:59 · 518 阅读 · 0 评论 -
单调队列&DP&前缀和--琪露诺/切蛋糕
P1725主要是思路一边进行单调队列一边进行动态规划用ans[i]表示第i格开始能获得的最大值#include <bits/stdc++.h>using namespace std;int a[400005];int ans[400005];//防止i+l越界int main(){ int n,l,r; cin >> n >> ...原创 2020-04-22 18:50:13 · 197 阅读 · 0 评论 -
c++双端队列应用:单调队列
c++单调队列一道经典题目(讲到单调队列必定会讲的一个题目)滑动窗口讲单调队列前先来一个需要用到的数据结构:双端队列/deque(也可以用数组进行模拟),我们需要用到的函数有这些(因为我只学我要用到的0.0)创建deque<int>que队列为空que.empty()队列清零que.clear()队尾元素que.back()队首元素que.front(...原创 2020-04-19 20:15:07 · 450 阅读 · 0 评论 -
c语言:(复杂的0.0)单向链表排序
毫无意义的一遍bk,可能这东西以后有用?(又复杂又佣长)一道为了链表而链表的c语言题目cc-test08-1链表的输入与输出#include <stdio.h>#include <stdlib.h>#include <string.h>#include <math.h>struct student{ int num; ...原创 2020-04-10 15:50:19 · 163 阅读 · 0 评论 -
c++链表经典题目--为学生排队
什么是链表?A-BA-B-CA-C-B-D把不同的元素用一定的办法连接起来的东西这个连接的线我们一般用指针来做,即将前一个或下一个元素的地址放入目前元素的结构体中,来实现不同结构体(元素)之间产生联系这种联系是可以改变的A-C我们把A,C连接后,如果要把B连在他们中间(第三者),我们就需要先A-B再B-C,最后形成A-B-C(在下面的代码中有展示)题目来自洛谷点击查看题目#...原创 2020-02-11 15:56:05 · 439 阅读 · 1 评论 -
大一集训--考试--队列 / 优先队列 / 线性筛
队列 / 优先队列 / 线性筛题目一:P1295#include <bits/stdc++.h>using namespace std;struct num{ int x; long long change;};struct cmp1{ bool operator ()(num a,num b) { return a.c...原创 2020-02-15 20:28:14 · 175 阅读 · 0 评论 -
大一集训--c++线性筛/素数筛
线性筛/素数筛题目一:P586#include <bits/stdc++.h>using namespace std;const int MAXX=1e6+1;int ans[MAXX];int vis[MAXX];int viss[MAXX]={0};int flag=0;void sss(int n);int main(){ int n; s...原创 2020-02-14 23:52:32 · 247 阅读 · 0 评论 -
大一集训--c++优先队列priority_queue
优先队列题目一:P1537#include <bits/stdc++.h>using namespace std;struct _people{ int num; int t;};struct cmp1{ bool operator()(_people a,_people b) { if(a.t!=b.t) ...原创 2020-02-13 15:26:28 · 127 阅读 · 0 评论 -
大一集训--c++队列queue
队列queue题目一:P1634#include <bits/stdc++.h>using namespace std;int main(){ int n,m; while(cin >> n >> m) { queue<int>people; for(int i=1;i<=n;...原创 2020-02-12 15:06:14 · 209 阅读 · 0 评论 -
acm大一寒假集训--初识栈(可测试代码)
题目来源于东北林业大学OJ东北林业大学OJ,点击进入????????????今天新生acn比赛排名19,有一点点失望吧,继续加油!!!题目一:栈-程序员输入问题点击这里测试代码Description程序员输入程序出现差错时,可以采取以下的补救措施:按错了一个键时,可以补按一个退格符“#”,以表示前一个字符无效;发现当前一行有错,可以按一个退行符“@”,以表示“@”与前一个换行符之间的字符全部无效。I...原创 2020-01-06 21:34:41 · 579 阅读 · 0 评论 -
upper_bound函数在数组,vector,set中的用法差别
本篇谈论upper_bound函数的差别,lower_bound函数可同理。一、数组我们通常需要查找一个数组里第一个比x大的是多少会这样写 int a[25]={3,1,5,6}; int t; sort(a,a+4);//1 3 5 6 int x=2; t=upper_bound(a,a+4,x)-a; //查找下标 cout <<...原创 2020-02-21 22:25:03 · 1569 阅读 · 0 评论 -
大一集训--c++string字符串
String字符串题目一:P#include <bits/stdc++.h>using namespace std;int main(){ string s1,s2; while(cin >> s1 >> s2) { s1+=s2; cout << s1 << endl ;...原创 2020-02-20 19:04:07 · 242 阅读 · 0 评论 -
大一集训--c++vector容器
vector容器题目一:P1675#include <bits/stdc++.h>using namespace std;int main(){ int x; vector<int>ve; while(cin >> x&&x) { ve.push_back(x); } if...原创 2020-02-19 16:43:34 · 185 阅读 · 0 评论 -
大一集训--c++ set集合
set集合题目一:P743#include <bits/stdc++.h>using namespace std;int main(){ int n; while(cin >> n) { int x; set<int>s; for(int i=1;i<=n;i++) ...原创 2020-02-18 14:19:38 · 499 阅读 · 1 评论 -
自定义结构体在map中的排序方式
在sort中,我们可以写一个cmp的排序bool函数,再加入sort中如sort(a,a+n,cmp)在map中,如果key是int或string,这个map会自动进行排序,如果key是一个定义的结构体,这时我们就需要一个排序规则,所以我们这样写试试map<people,int,cmp>m;果然,编译不过去。看来,写一个cmp函数的办法是行不通的那我们怎么对key是结构...原创 2020-02-16 23:09:35 · 876 阅读 · 1 评论 -
map的删除在有序查找中的删除方式
我们知道,要在map中删除东西我们需要用到eraseerase()中要写一个迭送器,删除后这个迭送器后,我们还可以对他++的方式来取得下一个迭送器吗我们来写一个代码试一下我们有5个值,我们现在要用遍历来输出一个的key和value然后就删除它我们发现,第一个值没有问题,但从第二个开始就出现了错误看来,删除一个迭送器后,不能再对它进行++来取得下一个迭送器正确的代码应该是这样我们在...原创 2020-02-17 13:07:15 · 263 阅读 · 0 评论 -
大一集训--c++ map
map题目一:P1687#include <bits/stdc++.h>using namespace std;int main(){ int n; map<int,int>vis; scanf("%d",&n); int x; for(int i=1;i<=n;i++) { scanf...原创 2020-02-17 14:30:51 · 220 阅读 · 0 评论