自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(33)
  • 收藏
  • 关注

原创 P2440 木材加工

二分查找这道题就是在二分模板上加了一个check()函数,由于查找特定的答案#include<bits/stdc++.h>using namespace std;const int N=1e5+7;int a[N];int n,k;int check(int x){ long long t=0; for(int i=1;i<=n;i++) { t+=a[i]/x; if(t>=k) return 1; } return 0;}int m

2022-04-02 11:16:59 188

原创 洛谷_逛画展

https://www.luogu.com.cn/problem/P1638双指针解法:首先,先找到满足条件的第一个区间(第一个while循环),然后根据求出的第一个区间,判断左端点 b[a[l]]>1 ,大于1时 b[a[l]]–,l++,同时将满足条件的答案记录下来,最后输出答案。#include<iostream>#include<algorithm>using namespace std;const int INF=0x3f3f3f3f;const in

2022-03-26 20:35:17 332

原创 一元稀疏多项式

#include<stdio.h>#include<stdlib.h>#include<iostream>using namespace std;typedef struct PNode{ float coef; int expn; struct PNode *next;}PNode,*Polynomial;void CreatePolyn(Polynomial &p,int n){ p = new PNode; PNode *s

2022-03-18 21:13:35 298

原创 Trie 最大异或对

#include<bits/stdc++.h>// 异或 又称为 不进位加法 1^1=0 1^0=1 using namespace std;const int N=100010,M=31*N;int n;int a[N];int son[M][2],idx;void insert(int x){ int p=0; for(int i=30;i>=0;i--) { int u=x>>i&1;//取出来x的

2022-03-13 20:17:25 90

原创 图书管理系统

图书管理系统数据的增删改查,排序,数据的导入与保存#include<stdio.h>#include<stdlib.h>#include<string.h>#include<iostream> #define OK 1#define ERROR 0#define INITSIZE 100#define INCREMENT 10using namespace std;typedef int status;typedef struc

2022-03-06 20:36:34 142

原创 P5318 【深基18.例3】查找文献

这是洛谷上的一个图遍历的题,对于结果分别使用dfs和bfs输出,对于每一层要求从最小的开始,所以我们需要先排序刚开始是一边搜索,一边排序,不出意外,TLE四个点代码如下:#include<bits/stdc++.h>using namespace std;const int N=1000010;int h[N],ne[N],e[N],idx;int n,m;int q[N],d[N],du[N];int Q[N],T=-1;bool st[N];int ans1[N],

2021-11-30 21:49:38 189

原创 最短路的应用

//P3371 【模板】单源最短路径(弱化版)#include<bits/stdc++.h>using namespace std;const int N=1000010;int dist[N],h[N],e[N],ne[N],w[N],idx;bool st[N];int n,m,s;void add(int a,int b,int c){ e[idx]=b,ne[idx]=h[a],w[idx]=c,h[a]=idx++;}void dijkstra(){ m

2021-11-28 13:13:29 541

原创 字符串哈希

字符串哈希实质上就是把每个不同的字符串转成不同的整数。通过比较它们映射出的数字来代替比较字符串字符串哈希_求子串#include<iostream>// 字符串求子串的哈希值 using namespace std;typedef unsigned long long ull;//自然溢出const int N=100010,P=131;//或者13331int n,m;char str[N];ull h[N],p[N];// 字符串 str [l,r] 哈希值 ,我

2021-11-21 09:00:52 354

原创 最短路问题 - Dijkstra,Bellman_ford,SPFA与SPFA判断负环,Floyd

Dijkstra//朴素Dijkstra#include<bits/stdc++.h>//朴素版Dijkstra适合稀疏图//稠密图:邻接矩阵using namespace std;const int N=510;int n,m;int g[N][N];int dist[N];bool st[N];//初始为 false int dijkstra(){ memset(dist,0x3f3f3f3f,sizeof dist); dist[1]=0; for(

2021-11-14 12:50:35 676

原创 约数相关知识

算术基本定理:任何一个大于1的自然数N,如果N不为质数,那么N可以唯一分解成有限个质数的乘积.则:,其中 p 为素数(质数)。约数的个数:约数的和 :欧几里得算法(辗转相除法)//最大公约数int gcd(int a, int b){ return b ? gcd(b,a%b):a; }//约数个数#include<bits/stdc++.h>using namespace std;typedef long long ll;const int mo

2021-09-26 20:19:48 61

原创 C++高精度计算

1.高精度加法#include<iostream>#include<vector>using namespace std;vector<int> add(vector<int> &A,vector<int> &B)//&提高传递效率{ vector<int> c; int t=0; for(int i=0;i<A.size()||i<B.size();i++)

2021-06-01 20:38:23 612

原创 C++函数传参 与 for(auto a:b)

for(auto &a:b) , for(auto a:b) , for(const auto &a:b)b为数组或容器,是被遍历的对象#include <iostream>using namespace std;int main(){ /*b为数组或容器,是被遍历的对象for(auto &a:b),循环体中修改a,b中对应内容也会修改for(auto a:b),循环体中修改a,b中内容不受影响for(const auto &a:b

2021-05-29 08:45:40 601

原创 质数

1.试除法判定质数https://www.acwing.com/problem/content/868/#include<iostream>using namespace std;int p(int a){ if(a<2) return 1; for(int i=2;i<=a/i;i++) { if(a%i==0) return 1; } return 0;}int main(){ int n; cin>>n; while(n--

2021-05-12 08:19:48 75

原创 模拟栈与队列

栈与队列均没有 begin,end等操作栈与模拟栈栈(先进后出)//栈#include<iostream>#include<stack>using namespace std;int main(){ stack<int> stk; stk.push(9); stk.push(6); stk.push(3);//向栈中插入元素 stk.pop(); //弹出栈顶元素,类似于删除 cout<<stk.top()<&l.

2021-04-24 16:45:23 88

原创 bfs.1

宽度优先搜索(bfs)我们在使用宽度优先搜索的时候,主要有以下几点1.确定队列的类型struct node{ int x,y,step;}aa; queue<node> q;/*typedef pair<int,int> PII; queue<PII> q;...*/2.初始化队列 queue<node> q; aa.x=1,aa.y=1,aa.step=0; q.push(aa);3.while循环, 判断队列是否为空

2021-04-23 20:55:50 59

原创 最大子序列的和与最大子矩阵的和

最大子序列的和样例:1 -3 5 -3 8 9 4 6 -4 9 9 -9 -7 9 6#include<iostream>using namespace std;int main(){ int n=15,sum=0,tmp=0; int a[n+1]; for(int i=1;i<=n;i++) cin>>a[i]; for(int i=1;i<=n;i++) { tmp+=a[i]; if(tmp<0) tmp=0; su

2021-04-22 09:15:03 84

原创 并查集.1

并查集是一种树型的数据结构,用于处理一些不相交集合(disjoint sets)的合并及查询问题。常常在使用中以森林来表示。并查集:1.将两个集合合并2.询问两个元素是否在一个集合中基本原理:每个集合用一棵树来表示。树根的编号就是整个集合的编号。每个节点存储它的父节点,p[x]表示x的父节点。主要用途有以下两点:1、维护无向图的连通性(判断两个点是否在同一连通块内,或增加一条边后是否会产生环)2、用在求解最小生成树的Kruskal算法里。并查集的讲解推荐看这个:https://b

2021-04-20 16:47:51 72

原创 vector.1

vector(动态数组)所有的容器都可以视作一个“前闭后开”的结构vector是动态数组,元素的增删一般应该在末尾进行。 声明 #include <vector> 头文件 vector<int> a; 相当于一个长度动态变化的int数组 vector<int> b[233]; 相当于第一维长233,第二位长度动态变化的int数组 struct rec{…}; vector<rec> c; 自定义的结构体类型也可以保存在vector中 v

2021-04-15 16:37:11 143

原创 String.1

一,string中的的字符串输入#include<iostream>#include<cstring>using namespace std;int main(){ string ss; getline(cin,ss);//空格也读入,遇到换行符结束 for(int i=0;i<ss.length();i++) cout<<ss[i]; for(int i=0;i<ss.size();i++) cout<<ss[i]; //s

2021-04-12 22:15:09 156

原创 dfs.2

蓝桥杯-剪邮票(连通块问题)题在这里http://oj.ecustacm.cn/problem.php?id=1286#include<iostream>#include<cmath>#include<cstring>using namespace std;const int N=6;int a[N][N];int b[N][N];int sum;int ss[10000];void dfs(int x,int y,int s){ if(x

2021-04-10 20:30:40 107 1

原创 dfs.1

在我刚开始学习dfs(深度优先搜索) 的时候,我遇到的第一个问题是排列数字,而第二个问题就是n-皇后问题。n-皇后问题第一种解法第一种解法是dfs中最朴素的做法#include<iostream>using namespace std;const int N=100;int n;char g[N][N]; bool col[N],row[N],dg[N],udg[N];//dg[]与udg[]/* 对角线与反对角线 对于任何一个对角线都有一个截距b 对于在同一条线

2021-04-01 16:43:37 145 1

原创 map.1

Max and Mextime limit per test1 secondmemory limit per test256 megabytesinputstandard inputoutputstandard outputYou are given a multiset S initially consisting of n distinct non-negative integers. A multiset is a set, that can contain some elements mu

2021-03-22 18:10:08 232 3

原创 小技巧

一,关于字符串的输入1.cin.getline();#include<iostream>using namespace std;int main(){ char s[1000]; cin.getline(s,1000); //当读入换行符的时候,结束; return 0; }#include<iostream>using namespace std;int main(){ int t; char s[1000]; c

2021-03-21 10:24:04 168

原创 kmp

给定一个模式串 S,以及一个模板串 P,所有字符串中只包含大小写英文字母以及阿拉伯数字。模板串 P 在模式串 S 中多次作为子串出现。求出模板串 P 在模式串 S 中所有出现的位置的起始下标。这里的意思是说,我们要找到 主串S 中是否存在 子串P,并输出主串的第一个下标所以我们要找到 子串P 的next的数组输入格式第一行输入整数 N,表示字符串 P 的长度。第二行输入字符串 P。第三行输入整数 M,表示字符串 S 的长度。第四行输入字符串 S。输出格式共一行,输出所有出现位置的起始

2021-03-21 09:19:59 77

原创 第二周总结

周总结1.读入一行字符串这一周在做(1494A)的时候,其中有一块是要求输入一行字符串,但是之前我一直不知道要怎么输入,因此我根据字符数组的性质一个一个地进行输入,当然了是使用for循环,并且让它在读入换行符的时候终止循环,代码如下:char s[51];for(int i=1;;i++) { s[i]=getchar(); if(i!=1&&s[i]=='\n') break; n=i;//n记录字符串的长度 }在做题的时候,用这种方法个人感觉比较麻烦后来我

2021-03-14 16:16:10 79

原创 禁用笔记本自带电脑键盘

首先打开 开始菜单,找到 Windows系统-右击命令提示符-更多-以管理员身份运行然后输入以下命令,回车sc config i8042prt start= disabled重启电脑就好啦恢复键盘使用命令:sc config i8042prt start= auto

2021-03-04 16:53:02 203 1

原创 离散化

离散化离散化是一个非常常用的技巧,它可以有效的降低时间复杂度。其本质就是在我们所枚举的所有情况中找出我们所要操作的值在我们遇到一个需要开辟很大空间的问题时,如果我们真的这样去做,我们就会发现这会造成时间超限等问题,但是实际上操作的个数却是比较少的,我们将这些分散的数字映射到一个较小的空间内,这个过程就叫做离散化。对于可离散化数据我们通常只考虑数据中的大小关系。进行离散化之前有两大问题1.原数组中的重复元素(去重)2.离散过后的数组下标(二分查找)进行去重我们可以选择C++中的uniqueu

2021-01-29 21:05:30 105

原创 二 分 查 找

二分二分分为整数二分和浮点数二分1.整数二分涉及到向下取整的问题,所以有两种模板对于L~R区间的值,我们询问最前面的值时第一种L+R可以理解为向下取整我们询问最后面的值时第二种L+R+1理解为向上取整例题:蒜头君手上有个长度为 n 的数组 A。由于数组实在太大了,所以蒜头君也不知道数组里面有什么数字,所以蒜头君会经常询问整数 x 是否在数组 A 中。输入格式第一行输入两个整数 n 和 m,分别表示数组的长度和查询的次数。接下来一行有 n 个整数 ai。接下来 m 行,每行有

2021-01-27 11:11:43 89

原创 双指针思想

双指针思想双指针并不是真正意义上的指针它是指:第一种类型的双指针:两个序列,两个指针(归并排序)第二种类型的双指针:一个序列,两个指针(维护区间)/*输入一串被星号隔开的字符串输出每个被隔开的单词样例输入abc*def*ghi----------------样例输出abcdefghi*/#include<bits/stdc++.h>using namespace std ;int main(){ char str[1000]; // st

2021-01-25 22:58:31 200

原创 位运算

1.二进制最高位称为“符号位”。1表示该数为负值,0表示为正值2.正数的原码,反码和补码是一样的3.负数的反码为符号位不变其他位取相反负数的补码为 反码+1运算符& 按位与 | 按位或^ 按位异或~ 取反<< 左移 >> 右移int lowbit(int x){return x&(-x);}//lowbit(x)是x的二进制表达式中最低位的1所对应的值。比如,6的二进制是110,—1 1 0(取

2021-01-21 21:25:36 251

原创 一维差分 与 二维差分

一维差分数组int a[5]={1,3,7,5,2}前缀和数组a[i]+=a[i-1]; 差分数组 d[i]=a[i]-a[i-1]; 差分数组前缀和d[i]+=d[i-1];差分数组和原数组的关系:对 差分数组 进行 求 前缀和 得到 原数组1 3 7 5 2 a[i]1 2 4 -2 -3 d[i]1 3 7 5 2 d[i] (sum)对区间[0,2]+1[1,3]-3[2,4]+5一般的方法我们是进行for循环,找到特定的位置然后进行运算,但是这样会浪费太多的时间

2021-01-20 13:57:14 87

原创 一维前缀和 与 二维前缀和

一维前缀和有一串长度为n的数列an,如果要求我们访问**[j,k]**里的数的和。我们一般的方法是分别求出Sj和Sk的值然后让他们相减。如果我们了解到前缀和,我们就可以使用下面这种方法for(int i=1;i<=n;i++) a[i]+=a[i-1]; //a[i]相当于Si(前i项和)前缀和就是前面i个数的总和接下来,我们只需要分别找到a[j-1] 和 a[k],sum=a[k]-a[j-1] (包括a[k]和a[j])二维前缀和规定:i为行数,j为列数如果我们想要去求得

2021-01-18 15:45:15 100

原创 算法和算法竞赛

首先,算法是指用来操作数据、解决程序问题的一组方法。算法有很多的特征:有穷性,确切性,输入项,输出项,可行性等。算法代表着用系统的方法描述解决问题的策略机制。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间、空间或效率来完成同样的任务。据我所知,一个算法的优劣可以用空间复杂度与时间复杂度来衡量。然后,算法竞赛是参赛选手通过算法完成任务,在比赛期间,每一位参赛选手都可以通过自己的理解使用不同的算法,这就需要发挥我们的抽象思维和逻辑思维等去更好更快的完成任务。

2021-01-17 16:31:56 1231 2

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除