- 博客(103)
- 收藏
- 关注
原创 数据结构之并查集
并查集是什么并查集是一种用来管理元素分组情况的数据结构。并查集可以高效地进行如下操作。不过需要注意并查集虽然可以进行合并操作,但是却无法进行分割操作。查询元素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
203
原创 C语言游戏开发闪屏解决办法--双缓冲技术
问题引入基于C语言的游戏开发的动态画面往往是不断的刷新显示区来实现的,即不断地输入和清空。因为计算机的计算速度很快,所以在画面较小的情况下我不会觉得有闪屏或不流畅的体验。 但一旦要刷新的画面较大,是会闪瞎开发者的眼的! 比如下面这段代码int main(){ while(1){ for(int i=1;i<=50;i++) { for(int j=1;j<=50;j++) { printf("*");
2020-05-19 12:41:56
11094
6
原创 指针数组--行指针动态分配,指针与数组的sizeof
在用行指针的动态分配中,常见的有两种情况行指针分配内存行数和列数都是输入后分配如果要用a[1]开始使用,需要在分配行数的时候×(x+1) int **a; int x,y; scanf("%d%d",&x,&y); a=(char **)malloc(sizeof(char *)*x); for(int i=0;i<x;i++) { a[i]=(char *)malloc(sizeof(char)*y);
2020-05-16 11:38:08
447
原创 双向链表简单排序(三个坑)
输入n个学生的信息:学号,姓名,三课成绩按照总成绩排序后以学号,姓名,三课成绩,平均分,总成绩的形式输出最不容易错的就是将struct中的信息交换,这也是在数据较少的情况下推荐使用的,但如果数据比较多,用这种就会显得很傻,因为我们可以用调整链表顺序的方法来实现。但有三个容易错的地方我们采用遍历的方式来排序,用p当前节点,q当作后节点判断q的next是否为空。 如果不做这一步判断,q->next->last=p会REif(q->next!=NULL) q->
2020-05-11 15:38:32
450
原创 C++强化版01背包
01背包强化版01背包是DP的经典题型->01背包DP的常规方法时间复杂度为O(n*m)强化版的01背包题目和普通01背包一样,但在数据范围进行了改动原数据1<=n<=1001<=wi,vi<=1001<=m<=10000加强数据1<=n<=1001<=wi<=1e71<=vi<=1001<...
2020-05-10 23:36:09
318
原创 动态维护最大值--守望者的逃离
洛谷P1095本来是DP的一个题目,不过也可以用动态维护的方法做。一秒一次循环,每次循环s1,s2。s2表示只是用闪现能到达的距离,s1是这个时间能达到的最远距离,每次s1+17(走路),再用s2更新s1。#include <bits/stdc++.h>using namespace std;int main(){ int m,s,t; scanf("%d%d%d",&m,&s,&t); int time=0,s1=0,s2=0;
2020-05-09 14:58:20
352
原创 C语言获取目前电脑时间
time函数会获取西方时间,如果涉及跨日跨越跨年就不好操作所以我们用localtime会方便一些void Gettime(){ struct tm* p_tm; time_t seconds = time(NULL); p_tm = localtime(&seconds); printf("%04d-%02d-%02d %02d:%02d:%02d\n...
2020-05-01 00:52:43
1213
原创 图dfs--形成的区域 Shaping Regions
不知道这种题目算不算图的题目今天是做dp不会,做深搜也不会思路是记录好每一块的deep,然后找deep上面没有被覆盖的面积加起来就是color的面积洛谷6432#include <bits/stdc++.h>using namespace std;int flag[1005][10];int a,b,n;int sum[1005];void work(int x1,i...
2020-04-27 17:51:21
273
原创 动态规划--类背包问题-乌龟棋
洛谷1541题目的成败在于能否写出转移方程我们用dp[i][j][k][z]表示分别用了i j k z 张 1 2 3 4后得到的最高分使用完i j k z 张1 2 3 4后走到的格子P是确定的,分数也是确定的我们就要找出之前的最高分而我们走到P时出的最后一张牌是不知道的所以就分别枚举4种情况(因为只有4张牌)选择最大的一种即可#include <bits/stdc++.h...
2020-04-26 19:42:28
226
原创 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
602
原创 动态规划--二进制背包/多重背包
之前有过一篇多重背包判断是否能凑一个整数的问题->传送门如果我们不是判断是否能凑成这个数,而是计算这个数内的背包最大值,就不能用这个写法了(也可能是我太菜了,一直WA)于是就有了二进制背包的方式在多重背包中如果每个背包被选择的次数maxi都比较小我们可以把他拆违maxi个相同的背包但如果maxi可能比较大,那么最后的背包总数就可能会超时怎么把这个maxi用一些更小的数字来组合而成...
2020-04-23 19:05:48
340
原创 单调队列&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
263
原创 c++双端队列应用:单调队列
c++单调队列一道经典题目(讲到单调队列必定会讲的一个题目)滑动窗口讲单调队列前先来一个需要用到的数据结构:双端队列/deque(也可以用数组进行模拟),我们需要用到的函数有这些(因为我只学我要用到的0.0)创建deque<int>que队列为空que.empty()队列清零que.clear()队尾元素que.back()队首元素que.front(...
2020-04-19 20:15:07
570
原创 c++数论:同余方程
洛谷P1082谜之ac前置知识:(a*x)%mod=((a%mod)*x)%mod#include <bits/stdc++.h>using namespace std;long long work(long long a,long long b)//求同余方程的函数{ if(a>b) a%=b;//一定要有,不然会一直运行这个 if(...
2020-04-16 12:24:04
1701
原创 区间贪心题目:区间覆盖&覆盖的区域长度
区间覆盖传送门:山东理工2074#include <bits/stdc++.h>using namespace std;int main(){ int n,m; int line[205]; while(cin >> n >> m) { memset(line,0,sizeof(line)); ...
2020-04-15 00:20:04
373
原创 高精度(补充):大数和小数的相乘
补充一个高精度,比较有用#include <bits/stdc++.h>using namespace std;char ans[105];char *mul(int n,char num[]){ int s[105]; memset(s,0,sizeof(s)); memset(ans,0,sizeof(ans)); int len=strl...
2020-04-10 16:59:57
360
原创 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
207
原创 递归/深搜:表示幂次方
洛谷1010注意有三种特判#include <bits/stdc++.h>using namespace std;void work(int n){ if(n==1) { cout << "2(0)"; return ; } if(n==2) { cout << "...
2020-04-07 21:48:18
170
原创 C++:组合数问题--买水果
题目:nefu:林大超市买水果-搜索原以为C(30,8)太大,会超时,就一直用dp做,结果循环大,又计算了一下C(30,8)不到6e6,所以并不会超时。基本思想:不降原则。#include <bits/stdc++.h>using namespace std;int a[35];int vis[35];int sum=0;int ok=0;int all=0;voi...
2020-04-07 17:50:27
2088
原创 C++ :DP多重部分和问题
多重部分和问题.给你n个数字,每个数字为ai,再给你n个数mi,第i个m表示ai能使用mi次。最后给一个数k,判断能否相加得到k。imput:33 5 83 2 217outputyeshit:3+3+3+8=17如果此类题目的n和m都比较小,可以直接一个三次循环#include <bits/stdc++.h>using namespace std;int ...
2020-04-05 15:54:14
292
原创 c++简单数论:求n^n的最大位上的数字和个位上的数字
求个位上的数字比较简单,就是单独拿个位的数字来快速幂取模#include <bits/stdc++.h>using namespace std;int ksm(long long x,int y,int m)//快速幂取模{ int t; if(y==0) t=1; else { t=ksm(x*x%m,y/2...
2020-04-01 00:12:05
589
原创 DP划分数类型问题
划分数今天真是DP的一天.题目:有N个无区别的东西,要分为不超过M份,共有几种分法这道题用常规的打表(前面几个的和)没法做出来。我们来试试用DP首先我们定dp[i][j]是表示n=i,m=j的答案。简单分析一下题目我们可以知道:dp[i][j]=dp[i][j-1]+X,其中X为将i恰好分为j份的分法。何如来得到X呢?n个物品恰好分为m分,我们可以看做先拿出m个物品,每个物品为一份...
2020-03-21 23:20:44
252
原创 C++入门DP--动态规划
动态规划-DP本篇为入门级,dalao绕道(捂脸)DP最经典题目-01背包问题思路简单清晰,将物品和价值都遍历,进行选择 for(int i=1;i<=n;i++)//从第一个物品到最后一个物品遍历 { for(int j=1;j<=m;j++)//将重量遍历 { if(w[i]>j) ...
2020-03-21 16:00:44
2349
原创 2^64内的任意进制转换
本篇code为2^64内10进制数转化为10以下进制,若需要转换为大于10的数可以加一个判断来用字母表示一个十进制的数n,需要转换为k进制我们可以把n看作以k为底的多项幂相加即 n=ak(0)+bk(1)+ck(2)…xk(y)(a,b,c…为常数,a,b,c<k)我们对k取余得到的就是a,也就是k进制下的第一位若n对k取整 得到 n=bk(0)+ck(1)…xk(y-1),再对...
2020-03-19 18:12:27
738
原创 图像广搜之队列BFS
迷宫问题加强版–BFS这次采用队列搜索,因为没用过…给定NxM的迷宫,1是墙,0是路,求起点到终点的最短距离并输出一条路线先后走过的路的坐标,如果无法到达,则输出QAQ#include <bits/stdc++.h>using namespace std;int a[105][105];int vis[105][105];int nowi,nowj;int toi,t...
2020-03-10 18:37:23
208
原创 关于c语言字符串的小细节char/gets
主要分为两个部分第一部分:char[]字符串的初始化第二部分:gets和%[^\n]输入的区别.第一部分char[]字符串的初始化 // char ch[25]="abcd\";会编译出错 char ch[25]="abcd\ "; cout << strlen(ch) << endl ; // 5 \ 不算单个字符 printf...
2020-03-10 16:23:07
296
原创 结合dfs的记忆搜索
记忆搜索在一些图形问题中,我们会重复用到同一个点的值,我们不需要每次都去递归出这个值是多少,我们用一个数组将这个值保存下来,实现记忆P1434这个题直接用dfs会有一组数组TLE,一定要用记忆搜索#include <bits/stdc++.h>using namespace std;int a[105][105];//高度地图int maxx=0;//输出的最大值in...
2020-02-29 17:05:16
164
原创 二维负下标数组创建模板
创建一个下标可以为负数的二维数组 int a[105][105]; int *b[105]; for(int i=1;i<=100;i++) { for(int j=1;j<=100;j++) { a[i][j]=i+j; } } for(int i=1;i<=...
2020-02-28 21:37:34
292
原创 数组下标为负的安全解决方法及优缺点
在码农疯狂刷题的路上,我们会碰上一些题我们需要使用下标为负数的数组(比如作为标记数组),我们该怎么办呢前引我们知道,数组其实就是一个指针,数组的下标代表的位置就是和这个数组指针的相对位置,如我们定义了一个数组aint a[100];此时这个数组就是一个指向了第一个元素a[0]的的指针,即我们也可以直接定义*a,是一个意思,只是这样就不能确定a的可用大小了。如果我们使用a[-1],显然,...
2020-02-27 23:59:06
2140
原创 图形广搜--填涂颜色
刚学广搜,dalao勿喷题目:洛谷P1162题目是闭合线圈,但线圈可能很粗,即有以下情况1 1 1 1 1 11 1 1 1 1 11 1 1 0 1 11 1 1 1 1 11 1 1 1 1 1所以我们不能简单的搜索到1就止步思路:将输入存入a[ ][ ]的数组里,广搜的起始点从a[0][0]的位置开始,搜索到没有新的地标为止。我们将我们搜索过的点用二维数组vis来标记,防止...
2020-02-25 15:02:13
260
原创 求一个N的阶乘后面有多少个0
N!后面有多少个0前置知识:质因数分解思路:对N!进行质因数分解(是对阶乘分解不是对N分解),N!后面有多少个0就是看这些质因数相乘能产生多少个0,而能相乘产生0的两个质数只有2,5,而N!分解后2的指数一定比5的指数大(关键,因为只要是偶数都能分解出2,而5要每隔5个数才能分解出一个),所以我们就看一看N!能分解出几个5就行了。操作:质因数能分解出5的整数每隔5会出现一次,我们把这个数除以...
2020-02-23 11:34:50
397
原创 求一个整数的因子个数
求因子的个数公式:以上内容来自fuzhihongP537#include <bits/stdc++.h>using namespace std;const int N=1e5;int vis[N+5];int ans[N+5];int flag=0;void ss(int n);int yzs(long long n);int main(){ lon...
2020-02-23 11:04:17
1123
1
原创 大一集训--考试--综合
综合考试鄙人能力有眼,先附上已AC题目,其他题目会陆续更新目前更新(5/8)题目一:P2122#include <bits/stdc++.h>using namespace std;struct b{ int x; int y; friend bool operator<(b x,b y) { if(x.x!=y.x)...
2020-02-23 10:44:37
225
原创 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
1771
原创 大一集训--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
311
原创 C++--取尺法/前缀和
取尺法题目->NEFU OJ 2124列举两种方法,都需要用到前缀和方法一:遍历前缀和#include <bits/stdc++.h>using namespace std;int a[100005];int s[100005];int main(){ int n,k; scanf("%d%d",&n,&k); //pri...
2020-02-19 20:17:35
442
原创 大一集训--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
242
原创 大一集训--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
668
1
原创 大一集训--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
325
原创 map的删除在有序查找中的删除方式
我们知道,要在map中删除东西我们需要用到eraseerase()中要写一个迭送器,删除后这个迭送器后,我们还可以对他++的方式来取得下一个迭送器吗我们来写一个代码试一下我们有5个值,我们现在要用遍历来输出一个的key和value然后就删除它我们发现,第一个值没有问题,但从第二个开始就出现了错误看来,删除一个迭送器后,不能再对它进行++来取得下一个迭送器正确的代码应该是这样我们在...
2020-02-17 13:07:15
322
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅