c++
清风puts
..
展开
-
快读快写模板
快读快写模板(附O(2)优化)原创 2022-07-14 10:03:40 · 234 阅读 · 1 评论 -
c/c++ 洛谷 P1381 单词背诵
题目描述灵梦有 nn 个单词想要背,但她想通过一篇文章中的一段来记住这些单词。文章由 m 个单词构成,她想在文章中找出连续的一段,其中包含最多的她想要背的单词(重复的只算一个)。并且在背诵的单词量尽量多的情况下,还要使选出的文章段落尽量短,这样她就可以用尽量短的时间学习尽可能多的单词了。解题思路:单调队列 map代码如下:#include<cstdio>#include<cmath>#include<algorithm>#include<cstri原创 2021-10-18 06:00:00 · 347 阅读 · 0 评论 -
c/c++ 力扣(LeetCode) 282.给表达式添加运算符
题目链接力扣(LeetCode) 282.给表达式添加运算符不想戳的看下图:题目描述:样例:数据范围:解题思路:回溯。记录题目要求的 target 值。注意:1、起始位置;2、0不能作为数字开头;3、用乘法时,记录中间值,更新时先把原数删掉。代码吐下:#define ll long longclass Solution {public: vector<string> ans; char op[3]={'+','-','*'};原创 2021-10-16 15:09:53 · 243 阅读 · 0 评论 -
c/c++ 洛谷 P1616 疯狂的采药
题目LiYuxiang 是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出了一个难题。医师把他带到一个到处都是草药的山洞里对他说:“孩子,这个山洞里有一些不同种类的草药,采每一种都需要一些时间,每一种也有它自身的价值。我会给你一段时间,在这段时间里,你可以采到一些草药。如果你是一个聪明的孩子,你应该可以让采到的草药的总价值最大。”如果你是 LiYuxiang,你能完成这个任务吗?此题和原题的不同点:每种草药可以无限制地疯狂采摘。原创 2021-10-16 14:42:14 · 334 阅读 · 0 评论 -
c/c++ 奶牛晒衣服
题目在熊大妈英明的带领下,时针和他的同伴生下了许多牛宝宝。熊大妈决定给每个宝宝都穿上可爱的婴儿装。于是,为牛宝宝洗晒衣服就成了很不爽的事情。圣人王担负起了这个重任。洗完衣服后,你就要弄干衣服。衣服在自然条件下用1的时间可以晒干A点湿度。抠门的熊大妈买了1台烘衣机。使用烘衣机可以让你用1的时间使1件衣服除开自然晒干A点湿度外,还可烘干B点湿度,但在1的时间内只能对1件衣服使用。N件的衣服因为种种原因而不一样湿,现在告诉你每件衣服的湿度,要你求出弄干所有衣服的最少时间(湿度为0为干)。解题思路:循环原创 2021-10-15 20:31:12 · 574 阅读 · 0 评论 -
c/c++ 洛谷 P1030 求先序遍历
题目给出一棵二叉树的中序与后序排列。求出它的先序排列。(约定树结点用不同的大写字母表示,长度≤8)。解题思路DFS 递归,还原树形结构代码如下:#include <iostream>using namespace std;string in_str,post_str;void build(int l1,int r1,int l2,int r2){ if(l1>r1) return; cout <<原创 2021-10-15 20:24:59 · 139 阅读 · 0 评论 -
求树的直径
两遍dfs过。第一遍dfs先遍历到最远点(起点),第二遍dfs遍历到另一个最远点(终点),遍历个数就是直径。代码如下:#include<iostream>#include<algorithm>#include<cstring>using namespace std;int n,tot,t;int head[400010],vis[400010],size[400010];int ans,pos;struct node{ int to,nxt;}原创 2021-10-10 13:06:07 · 67 阅读 · 0 评论 -
c/c++ 洛谷 P1199 三国游戏 [NOIP 2010 普及组]
题目链接洛谷 P1199 三国游戏题目描述小涵很喜欢电脑游戏,这些天他正在玩一个叫做《三国》的游戏。在游戏中,小涵和计算机各执一方,组建各自的军队进行对战。游戏中共有 NN 位武将(NN为偶数且不小于44),任意两个武将之间有一个“默契值”,表示若此两位武将作为一对组合作战时,该组合的威力有多大。游戏开始前,所有武将都是自由的(称为自由武将,一旦某个自由武将被选中作为某方军队的一员,那么他就不再是自由武将了),换句话说,所谓的自由武将不属于任何一方。游戏开始,小涵和计算机要从自由武将中挑选武将组成原创 2021-10-06 13:51:38 · 522 阅读 · 0 评论 -
c/c++ 洛谷 P5035 金坷垃
题目链接金坷垃题目背景@rainheavy 原创这是一道巨(du)水(liu)题第一届中国国际博览会于2018年11.5–11.10在上海举行,特朗普统治的国家——美国带来了金坷垃。这是一种神奇的产品,肥料用了金坷垃,能吸收20米以下的氮磷钾 (这是他们的广告)。可是,在经过富土(tu)康的质检员 DevZhu质检的时候发现出了点问题,金坷垃的效果并不像广告所说的那样。毕竟植物的根只能到深度为1的位置,金坷垃的效果有限。题目描述它的效果只能如下:(以20为例)20的约数(除本身)有10、5原创 2021-10-08 06:00:00 · 276 阅读 · 0 评论 -
c/c++ 洛谷 P2669 金币
题目链接洛谷 P2669 金币题目描述国王将金币作为工资,发放给忠诚的骑士。第一天,骑士收到一枚金币;之后两天(第二天和第三天),每天收到两枚金币;之后三天(第四、五、六天),每天收到三枚金币;之后四天(第七、八、九、十天),每天收到四枚金币……;这种工资发放模式会一直这样延续下去:当连续 n 天每天收到 n 枚金币后,骑士会在之后的连续 n+1 天里,每天收到 n+1 枚金币。请计算在前 k 天里,骑士一共获得了多少金币。解题思路用一个计数器记录天数,用cnt记下总金币数。代码如下:#in原创 2021-10-07 06:00:00 · 497 阅读 · 0 评论 -
c/c++ 洛谷 P1007 独木桥
题目链接洛谷 P1007 独木桥不想戳的看下图输入输出、样例、及数据范围解题思路:仔细考虑会发现,两个人相遇无论转不转身两个人所走的 总路程 都是一样的,那么时间也都一样,所以我们大可让两个士兵相遇后继续直走。如果这样考虑,每个士兵之间就不会有影响,代码也会简单不少。注意:有一个细节要考虑到,因为每一个士兵是同时开始走,而不是一个一个走。所以max/min(向左走所走路程,向右走所走路程)还要在减去已经过去的时间,但是这有可能为负,也就是在这之前那个士兵已将走完,所以应该加0。代码如下:原创 2021-07-15 12:03:28 · 493 阅读 · 0 评论 -
c/c++ 洛谷 P1003 【NOIP2011 提高组】 铺地毯
题目链接洛谷 P1003 【NOIP2011 提高组】 铺地毯不想戳的看下图:样例及解释数据范围解题思路:从后往前找地毯,找到了我就输出并返回。代码如下:#include <iostream>#include <cstring>#include <cmath>using namespace std;const int maxn = 10000;int n,x,y;int a[maxn],b[maxn],g[maxn],k[maxn];/原创 2021-07-14 12:52:27 · 572 阅读 · 0 评论 -
c/c++ 洛谷 P1002 【NOIP2002 普及组】 过河卒
题目链接洛谷 P1002 【NOIP2002 普及组】 过河卒不想戳的看下图输入输出,样例,及数据范围解题思路:递推出状态表达式,代码如下:#include <iostream>using namespace std;const int MAXN=25;int d[8][2]={{1,2},{1,-2},{-1,2},{-1,-2},{2,1},{2,-1},{-2,1},{-2,-1}};//八个方位,这上面的点为-1表示不能走int f[MAXN][MAXN];原创 2021-07-14 12:41:31 · 324 阅读 · 0 评论 -
c/c++ 洛谷 P1167 刷题
题目链接洛谷 P1167 刷题不想戳的看下图输入输出格式及样例:解题思路:将其统一为分钟,再用贪心。废话不多说,代码奉上。代码如下:#include <iostream>#include <cstdlib>#include <cstdio>#include <cmath>#include <algorithm>#define ll long longusing namespace std;long long n,a原创 2021-07-13 12:43:20 · 385 阅读 · 1 评论 -
c/c++ 洛谷 P3397 地毯
题目链接洛谷 P3397 地毯不想戳的看下图样例:解题思路:一道典型的二维数组,将坐标范围内都加上一,轻松解决。代码如下:#include <bits/stdc++.h>using namespace std;const int maxn = 1010;int n,m,a[maxn][maxn];int main(){ int x1,x2,y1,y2; cin>>n>>m; for(int i=1;i<=m;i++){ cin原创 2021-07-12 16:59:44 · 250 阅读 · 0 评论 -
c/c++ 力扣LeetCode 274.H指数
题目链接力扣Leetcode 274.H指数不想戳的看下图解题思路根据题目的意思,找一个最大的数值t,这个数字满足在我们的数组里大于等于t的至少有t个,如果满足这个条件,t就是一个合法的数值,然后我们需要找到最大的那个t。于是我们设置外层循环为引用的次数,从1到数组元素中的最大值结束,用i表示。然后我们设置内层循环为数组元素的遍历。每次进入内层循环之前,我们都会设置一个计数器为count = 0,然后我们遍历数组,如果数组元素满足大于等于i,count就加1,然后接着对count进行判断,如果原创 2021-07-11 19:40:09 · 121 阅读 · 0 评论 -
c/c++ 洛谷 P1428 小鱼比可爱
题目链接洛谷 P1428 小鱼比可爱不想戳的看下图解题思路因为小鱼只能看见左边,所以此题我们使用倒序。代码如下:#include <iostream>//输入输出流 头文件using namespace std;//命名空间#define maxn 1000 //宏定义一个较大值int n,m,a[maxn],b[maxn];//初始化int main(){ cin>>n; for(int i=1;i<=n;i++){ cin>>原创 2021-07-10 13:09:43 · 1281 阅读 · 0 评论 -
c/c++ 洛谷 P1296 奶牛的耳语
题目链接洛谷 P1296 奶牛的耳语不想戳的看下图解题思路虽然样例中给的是有序数组,但是题目并未说明有序,所以在此处有个细节,先 sort 一遍,再进行累加。代码如下:#include <iostream> //输入输出流 头文件#include <algorithm> //因为用到了 sort ,所以加上算法头文件using namespace std; //命名空间#define maxn 100006 //宏定义一个较大值int n,m,a[maxn]原创 2021-07-10 12:18:41 · 404 阅读 · 0 评论 -
c/c++ 洛谷 P1590 失踪的7
题目链接洛谷 P1590 失踪的7不想戳的看下图解题思路:输入后,先给数组赋值,然后循环检测7,检测到就退出,判断是否为Pascal数。代码如下:#include<iostream> //输入输出流 头文件 using namespace std;//命名空间 #define maxn 10000 //宏定义一个较大值 int n,a,sum[maxn];//初始化 int main(){ cin>>n; for(int i=1;i<=原创 2021-07-09 18:06:21 · 438 阅读 · 0 评论 -
c/c++ 洛谷 P3984 高兴的津津
题目链接洛谷 P3984 高兴的津津不想戳的看下图:代码如下:#include <iostream>#include <cstdio>using namespace std;#define maxn 1000001int fuc[maxn],sum,n,t;int main(){ cin>>n>>t; for(int i=1;i<=n;++i){ cin>>fuc[i]; }原创 2021-07-08 21:34:52 · 201 阅读 · 0 评论 -
c/c++ 力扣LeetCode 645.错误的集合
题目链接力扣 645.错误的集合不想戳的看下图解题思路循环嵌套对于这道题,有很多种方法。首先想到的,应是循环嵌套。直接for循环两边寻找相同,并求得丢失的整数。代码就不展示了,想必大家都会写。但时间复杂度O(n2),是相当高的,对于这题的数据范围,不适合用这个方法。map我们想到,可以使用STL里面的map。代码如下:class Solution { public int[] findErrorNums(int[] nums) { int result[] = new原创 2021-07-05 22:21:40 · 168 阅读 · 0 评论 -
c/c++ 力扣 LeetCode 50.Pow(x,n)
题目链接力扣 50.Pow(x,n)不想戳的看下图这里,我们给出4种解法。解法一:直接返回函数值return pow(x,n);//注:pow是计算以x为底的n次方值解法二:暴力求解代码如下:class Solution {public: double myPow(double x, int n) { double result = 1; if (n < 0) x = 1 / x, n = -n; for (int i =原创 2021-07-03 17:23:58 · 157 阅读 · 0 评论 -
c/c++ 一维数组初步
概念:数组:在程序中可以使用下标变量,即说明这些变量的整体为数组,数组中的每个变量的数据类型是相同的。一维数组:当数组中每个元素都只带有一个下标时,称这样的数组为一维数组。一维数组是由数字组成的以单纯的排序结构排列的结构单一的数组。一维数组是计算机程序中最基本的数组。二维及多维数组可以看作是一维数组的多次叠加产生的。定义:一维数组的定义:在C语言中使用数组必须先进行定义。 一维数组的定义方式为:类型说明符 数组名 [常量表达式];例:int a[10];//表示int类型的数组a,有1原创 2021-07-03 12:10:35 · 97 阅读 · 0 评论 -
c/c++ 力扣 LeetCode 27.移除元素
题目链接力扣 27.移除元素不想戳的看下图:解题思想:遍历一遍,遇到相同的删除。代码如下:class Solution {public: int removeElement(vector<int>& nums, int val) { vector<int>::iterator it = nums.begin(); for(; it < nums.end();){ if(*it == val)原创 2021-07-03 12:07:31 · 94 阅读 · 0 评论 -
c/c++ 洛谷 P1046 陶陶摘苹果
题目链接洛谷 P1046 陶陶摘苹果不想戳的看下图:解题思想:将陶陶踩上板凳的高度与所有苹果的高度比较,若比苹果高,就可以摘到。代码如下:#include <iostream>using namespace std;#define maxn 11 //宏定义一个最大量,因为数组第一个是0,所以定义时最好设置大一点,避免数组越界int n, m, a[maxn], cnt;//初始化int main() { for (int i = 1; i <= 10; i+原创 2021-07-03 11:57:05 · 1578 阅读 · 0 评论 -
c/c++ const 常量
概念常量: 其值在程序运行的过程中不会发生改变,只能在定义常量的时候设置初始值。C++中使用const关键字来定义一个常量。对于常量,编译器会将其放在一个只读的内存区域,其值不能发生改变。使用常量的好处就在于灵活,程序中多次用到常量,修改其值时,只需要改变定义时候的常量值就可以。d. 注意: 定义函数时,如果在函数体中不需要修改形式参数的值,建议将形式参数的值设为常量(const),以防用户不小心修改了这个值,会出现错误消息。...原创 2021-07-02 22:16:21 · 87 阅读 · 2 评论 -
c/c++ 力扣LeetCode 752.打开转盘锁
题目链接:力扣 752.打开转盘锁不想戳的看下图:算法详解:普通BFS搜索时,每一层的搜索节点数量会爆炸级增加。假设每一次搜索都有 nn 个新的状态,并假设从起点到目标路径长为 mm,那就要搜索:n+n2+n3+…+n^mn+n2 +n3 +…+nm 个状态,状态数就是 n^{m+1}n m+1 数量级的。所以,此时,双向的BFS就派上用场了。原理:双向BFS是同时从起点和终点两个方向开始搜索,一旦搜索到另一个方向已经搜索过的位置(或者说出现某个状态被两个方向均访问到了),就意味着找到了一条原创 2021-06-25 18:22:37 · 155 阅读 · 0 评论 -
c/c++ register函数
什么是register?百度百科解释:register修饰符暗示编译程序相应的变量将被频繁地使用,如果可能的话,应将其保存在CPU的寄存器中。register函数的作用使函数运行速度更快。register函数的限制1、register变量必须是能被CPU所接受的类型。这通常意味着register变量必须是一个单个的值,并且长度应该小于或者等于整型的长度。不过,有些机器的寄存器也能存放浮点数。2、因为register变量可能不存放在内存中,所以不能用“&”来获取register变量的地址原创 2021-06-25 17:23:28 · 3301 阅读 · 0 评论 -
c/c++ inline函数
什么是inline?百度百科解释:C++关键字,在函数声明或定义中函数返回类型前加上关键字inline,即可以把函数指定为内联函数。关键字inline必须与函数定义放在一起才能使函数成为内联,仅仅将inline放在函数声明前面不起任何作用。inline是一种"用于实现的关键字",而不是一种"用于声明的关键字"。一般的,用户可以阅读函数的声明,但是看不到函数的定义。inline int Prime(int a) { if (a <= 2) { return true; } else {原创 2021-06-25 17:09:57 · 77 阅读 · 0 评论 -
c/c++ 洛谷 P3406 海底高铁
题目链接洛谷 P3406 海底高铁不想戳的看下图:就是简单的前缀和,只是有一些要注意的点要懂,没有太大的难度。代码如下:#include<bits/stdc++.h>using namespace std;#define maxn 100005 //根据题目数据范围,宏定义一个较大值 int n,m,p,c[maxn],p2,p1,a,b,c1;long long sum,ans;//初始化 int main(){ cin>>n>>m; if原创 2021-06-20 17:09:16 · 292 阅读 · 0 评论 -
c/c++ 洛谷 P2722 [USACO3.1]总分 Score Inflation
题目链接:洛谷 P2722总分不想戳的看下图:这题乍看很难, 其实是一道完全背包的模板题,没有过多的限制。这里给同学们提供一个一维数组的方法。代码如下:#include <bits/stdc++.h> using namespace std;int x,y,t[10002],p[10002],f[10002],m,n;//初始化 int main(){ cin>>m>>n; for(int i=1;i<=n;i++){原创 2021-06-20 16:47:30 · 268 阅读 · 0 评论 -
c/c++ 力扣LeetCode 1.两数之和
题目链接:力扣 1.两数之和不想戳的看下图:此题比较简单, 这里我们有两种方法:暴力枚举 和 哈希表。一、暴力求解法解析:直接循环两遍求解代码如下://c++class Solution {public: vector<int> twoSum(vector<int>& nums, int target) { int i,j; for(i=0;i<nums.size()-1;i++){ f原创 2021-06-20 16:30:22 · 224 阅读 · 0 评论 -
c/c++ 高精度算法(有ac代码)
高精度算法导语我们都知道,数据类型是有限的,只能用于存储一定的数(如图),即使是最大的也只能存储18~19位。而对于较大数字的计算,我们有另一种方法:高精度算法。高精度算法的思想:一般用一个数组来存储一个数,数组的一个元素对应于数的一位(当然,在以后的优化中为了加快计算速度,也可用数组的一个元素表示数的多位数字),表示时,由于数计算时可能要进位,因此为了方便,将数由低位到高位依次存在数组下标对应由低到高位置上。运算因子超出了整型、实型能表示的范围,肯定不能直接用一个数的形式来表示。在c++中,能原创 2021-06-19 22:06:37 · 341 阅读 · 0 评论 -
c/c++ 高精度乘法详解(有ac代码)
题目a*b,数据范围:a,b<=10的100次方代码如下:#include <bits/stdc++.h> using namespace std;#define maxn 100 //宏定义一个较大值,一般情况下不会超过100位 char a1[maxn],b1[maxn];int a[maxn],b[maxn],c[maxn],lena,lenb,lenc,i,j,x;//初始化 int main(){ gets(a1); gets(b1);//输入原创 2021-06-19 21:58:26 · 518 阅读 · 0 评论 -
c/c++ 高精度减法详解(有ac代码)
题目a-b,数据范围:a,b<=10的100次方代码如下:#include <bits/stdc++.h>using namespace std;#define maxn 100 //宏定义一个较大值,一般情况下不会超过100位 char s1[maxn],s2[maxn],tmp[maxn];int a[maxn],b[maxn],c[maxn];//初始化 int main() { cin>>s1>>s2;//输入 i原创 2021-06-19 21:46:48 · 561 阅读 · 0 评论 -
c/c++ 高精度加法详解(有ac代码)
题目:a+b,数据范围:a,b<=10的100次方代码如下:#include <bits/stdc++.h>using namespace std;#define maxn 100 //宏定义一个较大值,一般情况下不会超过100位 char s1[maxn],s2[maxn];int a[maxn],b[maxn],c[maxn],cnt;//初始化 int main() { cin>>s1>>s2;//输入 int len原创 2021-06-18 17:48:52 · 254 阅读 · 0 评论 -
c/c++ 手把手教你循环语句:for循环 、 while循环 、 do-while循环
文章目录循环语句for循环表达句格式while循环表达句格式do-while循环表达句格式例题:循环语句循环语句的定义:在不少实际问题中,有许多具有规律性的重复操作,因此在程序中就需要重复执行某些语句。循环结构是在一定条件下反复执行某段程序的流程结构,被反复执行的程序被称为循环体。循环语句是由循环体及循环的终止条件两部分组成的。for循环表达句格式for表达式:for(表达式1;表达式2;表达式3)语句:循环体表达式1:一般为赋值表达式,给控制变量赋初值;表达式2:关系表达式或逻辑表达式原创 2021-06-13 19:43:01 · 560 阅读 · 0 评论 -
c/c++循环结构例题 (力扣LeetCode 202.快乐数)
题目链接:力扣 202.快乐数不想戳的看下图:解题思路1:比较基础的思想,直接循环100得出结果,但是,时间复杂度会很高。这里不建议使用。解题思路2:使用 “快慢指针” 思想,找出循环:“快指针” 每次走两步,“慢指针” 每次走一步,当二者相等时,即为一个循环周期。此时,判断是不是因为 1 引起的循环,是的话就是快乐数,否则不是快乐数。注意:此题不建议用集合记录每次的计算结果来判断是否进入循环,因为这个集合可能大到无法存储;另外,也不建议使用递归,同理,如果递归层次较深,会直接导致调用栈崩溃。原创 2021-06-13 19:35:57 · 487 阅读 · 0 评论 -
c/c++循环结构例题 (洛谷原题P5722)
洛谷原创 2021-06-13 19:28:26 · 684 阅读 · 0 评论 -
c++图论单源最短路径(洛谷原题P4779)堆优化/优先队列
dijkstra堆优化 + 优先队列题中是有向图,求最短路径,若不能达到,便输出2的31次方-1样例分析:可以使用多种方法,但题中已经说明:不得使用SPFA所以此处使用的是dijkstra算法代码如下:#include<bits/stdc++.h>using namespace std;#define maxn 100000#define INF 0x3f3f3fstruct edge{ int u,v,w,nxt;}e[maxn];struct原创 2021-06-12 15:57:03 · 177 阅读 · 0 评论