- 博客(17)
- 收藏
- 关注
原创 周练3,题解
非男非女思路 :输入处理时先把女生标记为-1,那么女生和男生配对和就是0 ,那么利用前缀和就好找到一个连续的和为0 的长区间了#include<iostream>using namespace std;const int N = 100010;int n;int s[N];int main() { int max = 0; cin >> n; for (int i = 1; i <= n; i++) { sc
2021-04-11 12:55:01 217
原创 最小生成树
两种方式Prim (稠密图)Kruskal(疏密图)Prim (稠密图)S:当前已经在联通块中的所有点的集合1. dist[i] = INF2. for n 次 t<-S外离S最近的点 利用t更新S外点到S的距离 st[t] = truen次迭代之后所有点都已加入到S中Dijkstra算法是更新到起始点的距离,Prim是更新到集合S的距离所以Dijkstra算法迭代n-1次, Prim迭代n次;#include <iostream>#includ
2021-02-25 17:51:05 1132 2
原创 最短路问题(初步实现)
最短路的思维图朴素Dijkstra O(n^2)dijkstra堆优化版 O(mlogn)Floyd求最短路一个一个来;朴素Dijkstra O(n^2)主要用在稠密图(用邻接矩阵来存)思路:1.先初始化距离 dist[1] =0 ;dist[i] = 0x3f3f3f3f;定义一个集合S 来存已经确定最短距离的点;2.for(int i=1;i<=n;i++) t 是不在S中,距离最短的点; 把t存入S 再用t来更新其他点的距离;例题链接:https://www.ac
2021-02-25 15:08:17 235
原创 哈希表两种基础方法
下面展示一些 内联代码片。//开放寻址法#include<iostream>#include<cstring>using namespace std;const int N =200003;//多开2~3倍int h[N],null = 0x3f3f3f3f;int find(int x){ int k = (x%N + N )% N; while(h[k] != null && h[k] != x){
2021-02-24 17:49:27 144
原创 找比大于等于i 的第一个质数
下面展示一些 内联代码片。// A code blockvar foo = 'bar';int main(){ for(int i =100000;;i++){ bool flag = true; for(int j =2;j*j <=i ;j++){ if(i%j== 0){ flag = false ; break; }
2021-02-24 17:22:32 274
原创 并查集基础版
基础版。条件:给定一个包含n个点(编号为1~n)的无向图,初始时图中没有边。现在要进行m个操作,操作共有三种:“C a b”,在点a和点b之间连一条边,a和b可能相等;“Q1 a b”,询问点a和点b是否在同一个连通块中,a和b可能相等;“Q2 a”,询问点a所在连通块中点的数量;输入格式第一行输入整数n和m。接下来m行,每行包含一个操作指令,指令为“C a b”,“Q1 a b”或“Q2 a”中的一种。输出格式对于每个询问指令”Q1 a b”,如果a和b在同一个连通块中,则输
2021-02-23 20:03:38 104
原创 并查集(牛客网2021寒假3 糖果)
下面展示一些 内联代码片。哎会超时#include<iostream>#include<cstring> using namespace std; const int MAX = 1000000+5; int max(int a,int b){ return a>b ? a : b;} int father[MAX]; int people[MAX]; int rankw[MAX]; int a[MAX];int res[MAX
2021-02-05 19:27:02 100
原创 2021牛客网寒假训练1(题解)(更新中)(接下来的题目完全是知识盲区了,等2天,明天还有第二场)
下面展示一些 题解`。括号#include<bits/stdc++.h>using namespace std;int main(){ cin.tie(0); ios::sync_with_stdio(0); int k,i; cin>>k; if (k == 0) {//非空 cout << ")(" << endl; } else {//
2021-02-02 22:16:26 116
原创 KMP字符串
下面展示一些 内联代码片。#include<iostream>using namespace std;const int N =100100,M=1000010;int n,m;char p[N],s[M];int ne[M];//if(ne[M]==j) 表示以M为终点前j个位子长的和1~j-1一样int main(){ cin.tie(0); ios::sync_with_stdio(0); cin&g
2021-02-02 17:50:40 83
原创 154.滑动窗口(单调队列)
下面展示一些 内联代码片。题目见acwing154#include<iostream>//单调队列using namespace std;const int N =1e+6 +10;int n,k;int a[N],q[N];int main(){ cin.tie(0); ios::sync_with_stdio(0); cin>>n>>k; for(int i=0;i<
2021-02-02 15:10:03 79
原创 830.单调栈
下面展示一些 内联代码片。注意理解用双指针理解栈;再想优化;#include<iostream>using namespace std;const int N =100010;int stk[N],tt;int main(){ cin.tie(0);//cin省时间 ios::sync_with_stdio(0);//闪屏省时间 int n; cin>>n; for(int i=
2021-02-02 12:03:13 76
原创 6378.删除数组中的元素(用数组模拟链表 链表)
这题如果用数组模拟链表,一定要用双链表!!!先看看用单链表会出现什么问题下面展示一些 内联代码片。单链表的删除//删除第k点的下一个点void remove(int k){ ne[k] =ne [ne[k]];}比如链表是:2->1->3->3->5->70 1 2 3 4 5(节点)如果删除元素3先remove(1);此时会出现 1号节点指向3号节点,2号节点指向3号节点下一步 remove(2)此时会出现 2号节点指
2021-01-30 19:00:00 625
原创 用数组来模拟单链表和双链表(有注释)
单链表下面展示一些 内联代码片。来自acwing,826号题#include<iostream>using namespace std;const int N =100010;// head 表示头结点的下标// e[i] 表示节点i的值// ne[i] 表示节点i的next指针是多少// idx 存储当前已经用到了哪个点int head ,e[N] ,ne[N] ,idx;//初始化void inti(){ head =-1; idx=0
2021-01-29 18:08:01 109
原创 反转单词 ,单词只有一个空格
下面展示一些 内联代码片。// A code blockvar foo = 'bar';#include<iostream>#include<algorithm>#include<cstring>using namespace std;string m;int main(){ string a[300],b; int i=0; while(cin>>b) { int q=b.size();
2021-01-27 15:44:58 96
原创 字符串的最大跨距
字符串的最大跨距 这题教了我对字符串的输入,以及指针的应用,部分是看过他人的题解后想出来的,上代码。下面展示一些 内联代码片。有三个字符串S,S1,S2,其中,S长度不超过300,S1和S2的长度不超过10。想检测S1和S2是否同时在S中出现,且S1位于S2的左边,并在S中互不交叉(即,S1的右边界点在S2的左边界点的左侧)。计算满足上述条件的最大跨距(即,最大间隔距离:最右边的S2的起始点与最左边的S1的终止点之间的字符数目)。如果没有满足条件的S1,S2存在,则输出-1。 例如,S = "a
2021-01-27 15:18:37 429
原创 022:角谷猜想(不超时)
下面展示一些 内联代码片。// A code blockvar foo = 'bar';下面展示一些 内联代码片。// A code blockvar foo = 'bar';// An highlighted blockvar foo = 'bar';```#include<iostream>#include<bits/stdc++.h>using namespace std;int main(){unsigned long int n,t;cin
2020-12-24 19:56:15 398 1
原创 求一元二次方程的根(含虚部)
`在这里插入代码**#include <stdio.h>#include <math.h>#includeusing namespace std;int main(){double a, b, c, x1, x2, t=0,delta;scanf("%lf %lf %lf", &a, &b, &c);delta = bb-4ac;if(delta >= 0){x1 = (-b + sqrt(delta)) / (2a);x2 =
2020-12-24 19:20:22 1228 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人