- 博客(47)
- 收藏
- 关注
原创 C++大作业:基于Qt的数独游戏
这周一的我:还有三周就期末了,我还有C++大作业、自科论文、数电作业、英语作业、形策论文、口述历史、历史人物展示没完成,然后还有大物、数电、C++、离散、线代、高数等课的预习还未开始,我终于开始认识到时间的紧迫性,开始狂肝作业,对C++大作业,我花了两天时间看完了黑马的Qt视频除了案例的所有内容(视频链接:最新QT从入门到实战完整版|传智教育),然后没多少时间的我自知不可能做些什么复杂的了,于是就想到了数独,经过昨天晚上和今天下午的开发,我终于完成了这个简陋的游戏,因为时间紧迫,我的代码写的比较丑,功能实现
2022-05-18 19:55:02
3579
16
原创 蓝桥杯C++A组真题练习(一)
蓝桥杯C++A组真题练习糖果重复字符串子串分值修改数组糖果状压DP水题,没啥好说的。#include<iostream>#include<cstring>using namespace std;const int N = 110, M = 20, K = 1 << 20, INF = 0x3f3f3f3f;int w[N], dp[K], n, m, k;int read() {//快读板子 char ch = getchar(); int x =
2022-04-06 23:48:35
2193
1
原创 矩阵乘法+快速幂加速DP
矩阵乘法+快速幂加速DP引入求斐波那契数列第n项快速幂矩阵乘法+快速幂求斐波那契数列第n项应用斐波那契前n项和佳佳的斐波那契GT考试前段时间线代才学完矩阵,这就可以用上了!不得不说线代还是非常有用的,矩阵乘法在计算机图形学里也很有用,高斯消元求方程组也是很常用,瞬间对线代感兴趣了!引入求斐波那契数列第n项首先,我们回忆一个简单的问题:求斐波那契数列的第n项。这个问题很简单,假设我们用f[i]来表示,那么f[1]=f[2]=1f[i]=f[i-1]+f[i-2](i>=2)这应该也算
2022-03-22 20:24:20
539
1
原创 单源最短路练习(一)
单源最短路练习单源最短路的建图方式热浪信使香甜的黄油最小花费最优乘车昂贵的聘礼单源最短路的建图方式热浪题目链接:热浪分析:比较裸的一道题,直接建图再套模板,我就直接用spfa水过了。代码实现:#include<iostream>#include<queue>#include<cstring>using namespace std;const int N=2510,M=12410;int n,m,str,ed;int dist[N];int h[N
2022-02-12 20:11:13
354
1
原创 搜索(DFS与BFS)
搜索BFSFlood Fill模型池塘计数城堡问题山峰和山谷最短路模型迷宫问题武士风度的牛抓住那头牛多源BFS矩阵距离最小步数模型魔板双端队列广搜电路维修双向广搜A*DFSDFS与连通性模型DFS与搜索顺序DFS与剪枝与优化迭代加深双向DFSIDA*BFSFlood Fill模型Flood Fill模型就听起来好像很牛逼,其实我们刚学搜索应该就见过这样的题型,中文名叫泛洪算法,也叫种子填充(Seed Fill),用于确定连接到多维数组中给定节点的区域。这么说也许比较抽象,我们看例题后就知道这是个什么玩
2022-02-11 21:52:48
397
原创 单调队列优化DP
单调队列优化DP最大子序和修剪草坪旅行问题烽火传递绿色通道理想的正方形在多重背包问题3中,我们用到了单调队列优化DP,实际上,不止这个问题,很多问题我们仔细观察,就能发现它有类似的性质,我们就能用单调队列优化,我们通过几道题的练习来观察观察其中的规律。最大子序和题目链接:最大子序和修剪草坪题目链接:修剪草坪旅行问题题目链接:旅行问题烽火传递题目链接:烽火传递绿色通道题目链接:绿色通道理想的正方形题目链接:理想的正方形...
2022-02-07 18:02:58
2319
3
原创 数位DP练习
数位DP度的数量数字游戏Windy数数字游戏2不要62度的数量题目链接:度的数量分析:其实感觉数位DP这类题还是有点章法的,对于求a~b中满足一个条件的数的个数,我们可以转化为求0/1 ~b中满足的个数和0/1 ~a-1中满足的个数,前者减去后者就是答案,而求0/1 ~n中满足条件的个数时我们可以根据题目的要求进行分类讨论,最常见的就是按位讨论了。我们把n按题目要求的进制数进行每一位的拆分并存储在数组中,我们按找从高位到低位进行讨论,这里我们会用到组合数,提前处理一下就可以了。代码实现:#incl
2022-02-06 15:18:09
2382
原创 区间DP练习
区间DP练习环形石子合并能量项链加分二叉树凸多边形的划分棋盘分割环形石子合并题目链接:环形石子合并分析:和石子合并相比就多了一个条件,我们想,就算是环形的,它也是合并n-1次,最后肯定能等价为从某一点断开后的石子合并,因此我们只需把数组开为原来的两倍,也就是把所有石子的值再接在原数组后,然后对2*n长度的数组进行区间DP,从中找出长度为n的合并总分的最大值和最小值即可。代码实现:#include<iostream>using namespace std;const int N =
2022-02-05 14:17:51
327
原创 状态压缩DP练习
状态压缩DP练习小国王玉米田炮兵阵地愤怒的小鸟小国王题目链接:小国王分析:看到这题我们可能会想到N皇后问题,但是这道题用爆搜的话是会TLE的,这里我们考虑状压DP,只要我们能想出来表示如何每个表示每个状态,再考虑到细节,基本就能做出来。详细的看代码注释吧。代码实现:#include<iostream>#include<cstring>#include<algorithm>#include<vector>using namespace std;
2022-02-05 11:21:45
129
原创 状态机模型练习
状态机模型练习大盗阿福股票买卖4股票买卖5设计密码大盗阿福题目链接:大盗阿福分析:看到这个题目是比较简单的,我们直接写就能写出来。#include<iostream>using namespace std;const int N=1e5+10;int f[N];int n;int a[N];int main(){ int T; scanf("%d",&T); while(T--){ scanf("%d",&n);
2022-02-04 15:45:17
280
原创 背包模型补充与练习
背包模型的补充与练习采药Make Them Equal采药题目链接:采药分析:非常明显的01背包代码实现:#include<iostream>using namespace std;int n,m;const int N=110,M=1010;int w[N],v[N];int dp[M];int main(){ cin>>m>>n; for(int i=1;i<=n;i++){ cin>>w[i]&
2022-02-04 11:04:38
515
原创 最长上升子序列模型练习
最长上升子序列模型练习怪盗基德的滑翔翼登山友好城市最大上升子序列和拦截导弹导弹防御系统最长公共上升子序列怪盗基德的滑翔翼题目链接:怪盗基德的滑翔翼分析:这道题还是比较简单的,我们只需要求一遍最长上升子序列(倒着看就是怪盗基德从最后的一个点滑翔到最前面的一个点),再求一遍最长下降子序列,这两者中的最小值就是答案。代码实现:数据范围较小,朴素做法就能过#include<iostream>using namespace std;const int N=110;int a[N],f[N
2022-02-02 17:24:35
632
2
原创 数字三角形模型练习
数字三角形模型练习摘花生最低通行费方格取数传纸条摘花生题目链接:摘花生分析:很简单的一题,基本和数字三角形模型一样,一行一行dp就行了。代码实现:#include<iostream>#include<cstring>using namespace std;const int N=110;int T,g[N][N],n,m,dp[N][N];int main(){ cin>>T; while(T--){ cin>&g
2022-02-02 14:18:59
288
原创 动态规划基础
动态规划基础背包模型01背包完全背包多重背包1多重背包2多重背包3分组背包线性DP区间DP状态压缩DP树形DP数位DP记忆化搜索计数类DP动态规划类型的题目种类其实并不多,这里只讲简单的DP,各种DP之间划分界限也没那么明显,所以只是一个大概的划分,重要的是学会思想。我理解的动态规划:绝妙的状态表示+不重不漏的状态转移,我感觉最难的还是如何表示状态,这里简单介绍一些常用的模型,再通过刷题,应该能提高一些自己的水平。背包模型背包类问题大概就是给你一个容量有限的背包、一些有一定价值并会占用一定体积的物品
2022-01-28 23:01:21
757
原创 基础数学知识
基础数学知识质数试除法判定质数试除法分解质因数筛法求质数个数朴素的筛法埃氏筛线性筛约数试除法求一个数的所有约数求一个数的约数个数求一个数的约数之和欧几里得算法(辗转相除法)欧拉函数快速幂扩展欧几里得算法中国剩余定理高斯消元组合计数容斥原理博弈论下面有的例题可能有多组测试数据,我写的时间复杂度只是一组的时间复杂度,还请注意质数质数的定义:大于1的数中,只有1和它本身两个约数的数(小学知识)与质数相关的有一些算法试除法判定质数通过试除,判定一个数是不是质数,时间复杂度O(sqrt(n))例题:Ac
2022-01-26 16:29:33
2335
1
原创 数组模拟链表以及Trie树(字典树/单词查找树)的介绍
Trie树的介绍与练习什么是Trie树数组模拟实现链表单链表双链表循环链表Trie树的实现本人能力有限,文章如有问题欢迎指出。什么是Trie树简单地来说,Trie树是一种高效地实现字符串(学会后你会发现它不局限于此)存储与查询的数据结构。如图(本人自幼字体潦草,凑合着看吧)这就是存储给定单词的一个字典树,这里的五角星表示以这个字母结尾有一个单词,后面会讲如何标记,看到这一条又一条的链,直接讲它的存储方式你们可能会很懵,所以我就先讲一下用数组模拟链表的方法(算法竞赛中一般都是用数组模拟链表,
2022-01-21 13:22:19
902
原创 简单的排序算法
快速排序、归并排序与桶排序快速排序归并排序桶排序已经不知道多长时间没写博客了,,,,期末考完的我当然要开始继续写了(虽然期末考的很垃圾),前段时间给蓝桥杯捐了300r,寒假不学点算法感觉对不起这钱,就写写博客来记录学习历程并当作复习吧。使用C++更适合参加这类比赛,我们也不用担心要学一门新语言,因为只是学算法的话用的也就是C和C++的STL,而这些STL我们只需要一个一个积累就行了,就是用到一个就学习一个,而且也可以自己用数组实现,所以算法学习应该是不需要太多基础的,但是,请一定要熟悉递归、递推等基本内
2022-01-12 11:51:06
1313
6
原创 数据在内存中的存储
目录整型原码、反码、补码大小端字节序什么是大小端?为什么会有大小端?练习浮点型浮点数的存储规则E的存储例子的解释最后给一个神题我们都知道,C语言中有多种数据类型,虽然我们不知道它们的存储也能使用它们,但了解了底层的原理会让我们如虎添翼。之前我们学习了如下基本数据类型:char //字符数据类型short //短整型int //整形long //长整型long long //更长的整形float //单精度浮点数double //双精度浮点数今天我们就来学习下它们在内存中的存储。整型
2021-11-26 22:38:02
803
2
原创 图形化界面扫雷(C语言+easyx实现,多图教学)
扫雷前言准备工作EasyX的下载一些准备知识头文件的引用图形化界面的创建图形化界面简介鼠标操作提示框前言学了那么长时间的C语言,我们所有的一切似乎都被禁锢在黑框框(控制台)里,让人觉得很无趣,学习unity那样的平台又太过困难,那么有没有什么是适合我们这些新手使用的?答案是:有!EasyX 是针对 C/C++ 的图形库,可以帮助使用C/C++语言的程序员快速上手图形和游戏编程。这是百度百科上的解释,目前就我的理解,下载并安装Easyx就相当于为我们的VS(或者是别的)增加了一些库函数,以便我们实
2021-11-08 12:34:37
23956
37
原创 三子棋(C语言实现)
三子棋代码实现主函数菜单函数游戏函数初始化棋盘函数打印棋盘函数玩家放置棋子的函数电脑放置棋子的函数判断游戏的函数判断棋盘是否已满的函数完整代码头文件:game.h存放函数的文件:game.c存放主函数的文件:test.c最近学习了C语言数组相关的基础知识,学知识就是为了用嘛,使用知识也会让我们的学习过程更有趣。我们就用这些基础的知识写一个简单的三子棋小游戏,让我们与电脑对抗(当然,由于实力原因,这个电脑只能纯随机地放置棋子)实现效果如下图:好家伙,之前我试了多少遍来故意让电脑赢,可他就是不赢,这我一写
2021-11-07 15:55:19
12094
18
原创 数据结构之线性表
先做一个记录:这篇博客的开始写作时间是2021年11月1日22点,明天我就要英语期中考了,一点没复习的我还在这里搞博客(英语是真的无趣啊)。数据结构简介这里引用度娘的话数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。好的程序 = 合适的数据结构 + 算法,学好数据结构对程序员来说是一件重要的事。数据结构分为线性结构和非线性结构,线性表是线
2021-11-03 23:56:40
661
13
原创 Java入门之基本语法
目录学习Java前的准备变量与运算符前言:之前跟着狂神学了Java的一些基本内容,17个小时的课程断断续续看了两周,学完之后就很长时间没碰Java,基本上忘光了,现在重新跟着尚硅谷来学,有C语言基础的小伙伴欢迎来一起!学习Java前的准备这里我就不再说一遍了,请同学们看我的这篇博客:Java学习前的准备public class helloworld{ public static void main(String[] args){ System.out.print("hello
2021-10-30 21:14:15
774
11
原创 2723_蚂蚁感冒
蚂蚁感冒以5-10 8 12 25 -20这组输入为例感冒蚂蚁向左移动的情况原理相同,代码实现:#include<stdio.h>int main(){ int n, i = 0,flag=0,count=1;//flag后面会用到,判断最初右移的感冒蚂蚁的右边有没有向左移动的蚂蚁(或最初左移的感冒蚂蚁左边有没有向右移动的蚂蚁),count用来计数:即感冒蚂蚁的数量 scanf("%d", & n);//n是蚂蚁的个数 int arr1[50] = { 0 }
2021-10-25 10:37:10
177
5
原创 求两个正整数的最大公因数和最小公倍数
求两个正整数的最大公因数和最小公倍数两个正整数最大公因数和最小公倍数的关系更相减损术原理:代码实现:辗转相除法原理:代码实现:穷举法原理:代码实现:Stein算法原理:两数都为偶数两数一奇一偶两数都为奇数代码实现:今天做作业做到了一道求解两个数最大公因数的题,突然想总结一下求解的思路(目前为止自己知道的),那就开始吧。两个正整数最大公因数和最小公倍数的关系最小公倍数除以最大公因数等于两数之积直接上图:因此我们只要会求两个数的最大公因数,就可以很容易得到最小公倍数了,因此接下来我们主要求两个数的最
2021-10-25 00:15:38
6811
11
原创 几种常见的简单算法
几种常见的简单算法二分查找问题描述具体实现欧几里得算法(辗转相除法)问题描述具体实现幂运算问题描述具体实现首先祝大家1024程序员节快乐,容许我水一篇文章,这里主要介绍几种简单的算法,并结合具体事例看看它们是如何实现的二分查找问题描述给定一个按从小到大顺序排列好的数组,寻找数组里的一个数字,如果找到了,就输出该数字在数组中对应的下标,找不到,就输出"没找到"具体实现给定一个数组arr[10]={0,1,2,3,4,5,6,7,8,9},在这个数组中寻找7并输出其下标,找不到就输出"没找到"
2021-10-24 16:52:15
3870
1
原创 最大子序列和的四种算法实现(循序渐进)
ps:这是本人在武大图灵读书会上通过所读的《数据结构与算法分析——C语言描述》总结写成的,本来老师要求读的是《数学之美》,奈何我根本欣赏不了,于是果断掏出了我的这本书!题目描述给定整数数组arr[ ],用一个函数求∑k=ij\sum_{k=i}^j∑k=ijarr[k]的最大值(若最大值仍为负数则返回0),即求任一arr的子序列和的最大值(子序列可以与原序列相同)比如说一个数组{1,-2,4,5,-7,6,-4},它任一子序列和的最大值为9怎么用代码求解呢?问题求解算法一对一个问题,通常我
2021-10-21 23:16:54
2362
8
原创 2853_数位之和
感觉今天的题有点水啊,导致我没想出来骚图上题:我们知道,一个数%10得到的就是个位的数,我们再让这个数/10,就可以再次%10以得到十位上的数,当这个数只剩一位时,再/10得到0,跳出循环这样就实现了#include<stdio.h>int main(){ int n=0,sum=0; scanf("%d", &n); while(n) { sum += n % 10; n /= 10; } printf("%d", sum); return 0;}
2021-10-19 15:40:55
106
原创 2756_最长单词
每日一题第二天,我一看是很简单的一题,结果我各种犯错让我花了好多时间。上题:我们看到,它给我们了一个由四个单词组成的句子,单词间用空格隔开,那我们可以用gets(数组名);函数来接收这个句子,然后再把这个句子的单词切分并储存,最后计算每个单词的长度并比较,就能找到最长的单词了当然,我认为这是最笨的方法,但我只会这个上代码:#include<stdio.h>#include<string.h>int main(){ char arr1[10000] = { '\
2021-10-18 09:53:16
165
2
原创 2770.01字串
在学校学了几天Java,感觉我还是喜欢C语言,可能接触C++后那种感觉还会回来吧,但暂时接着学C以及数据据结构与算法进入正题,发现学校的OJ题,我争取每天做一道吧(由易到难)话不多说,上题:看到这题,有人可能会想,这也太简单了吧,我直接一直printf就完事了但我想说,那只是刚学C的新手干的事,我们要写有逼格的代码!先上代码,再分析#include<stdio.h>int main(){ int n = 0; for (n = 0; n < 32;n++) {
2021-10-17 23:20:49
132
1
原创 从零开始的Java学习教程——七:异常机制
异常机制Error和Exception捕获和抛出异常自定义异常经验小结Error和Exception捕获和抛出异常自定义异常经验小结
2021-10-17 00:00:00
102
1
原创 从零开始的Java学习教程——六:面向对象编程(三)
面向对象编程static关键字详解static修饰变量static修饰方法代码块静态导入包final抽象类接口的定义与实现对比接口的简单说明实现类接口小结N种内部类static关键字详解static修饰的方法与变量与类一同加载,而非静态的需要new一个对象才加载static修饰变量static 关键字用来声明独立于对象的静态变量,可以直接通过类名来访问,而非static修饰的变量不能直接用类名访问,只能先新建一个对象再访问static修饰方法与变量相似,静态方法可以直接调用非静态方法和静态方法
2021-10-16 12:38:57
118
原创 从零开始的Java学习教程——六:面向对象编程(二)
面向对象的特征封装public与private修饰属性get/set方法继承多态封装public与private修饰属性我们新建一个student类,并新建一个对象wqy(没错哈,就是我名字的缩写),我们可以通过wqy.name/id/sex给相关属性赋值,因为这些变量前有public的修饰,如果没有这些修饰,这些属性只能在他们所在的类中使用。如果我们用private修饰这些属性,这时再用wqy.name/id/sex将无法修改这些属性,而我们的一般做法正是这样。难道我们这样做,就不修改这些属性
2021-10-15 21:33:06
125
原创 从零开始的Java学习教程——六:面向对象编程(一)
面向对象编程(OOP)初识面向对象面向过程&面向对象面向过程思想面向对象思想什么是面向对象方法的回顾和加深方法的定义修饰符返回类型方法名参数列表异常抛出方法的调用静态方法非静态方法形参和实参值传递和引用传递this关键字对象的创建分析面向对象三大特征抽象类和接口内部类及OOP实战初识面向对象面向过程&面向对象面向过程思想步骤清晰简单,第一步做什么,第二步做什么面对过程适合处理一些较为简单的问题面向对象思想分类的思维模式,思考问题首先解决需要哪些分类的问题,然后对分类进行单
2021-10-11 23:31:13
91
原创 Java稀疏数组详解
稀疏数组为什么要稀疏数组稀疏数组介绍实现数组转换为稀疏数组及逆应用为什么要稀疏数组在五子棋游戏中,用二维数组记录棋盘,棋盘上数字0代表空,1代表玩家1的棋子,2代表玩家2的棋子,刚开始时棋盘上很多数字都是0,因此这个二维数组记录了很多无意义数据,这时就引入了稀疏数组。稀疏数组介绍当一个数组中大部分元素为0,或者为同一值时,可以用稀疏数组来保存该数组稀疏数组的处理方式是:记录数组一共有几行几列,有几个不同的值把具有不同值的元素和行列及值记录在一个小规模的数组中,从而缩小程序的规模如下两
2021-10-10 23:36:26
179
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人