![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c++入门2
文章平均质量分 50
c++入门2
{∞}
自然选择,前进四!
展开
-
usaco铜组【2023.1月赛】
1.29,第一次打usaco,成功晋级。原创 2023-02-04 17:55:43 · 593 阅读 · 4 评论 -
atcoder11-16日刷题总结
4.abc270-D 设f_i表示剩下i颗石头时Takahashi可以获得的最大石子数,那么如果我们这次拿走了a_j颗石子,然后对方最多获得f_i-aj颗石子,剩下的i-f_(i-a_j)颗石子就是Takahashi的了。第一次是二分目标点x的位置,对于中点mid,如果矩阵[(1,1),(mid,n)]的棋子数量等于mid,那么就是l移动,否则就是移动r。二分一个x,表示对于每一个篮子i,都拿出min(ai,x)个苹果的情况,显然我们需要的答案时最大的x。注意:存的时候不能把>n的存了,否则会re。原创 2023-01-17 21:18:47 · 685 阅读 · 0 评论 -
Acwing第77场周赛
简单的题,暴力一点可以直接用map,但是其中只有2个队,所以可以不用遍历:map.begin()->second的值就是第一个队的分数–map.end()->second的值就是第二个队的分数–map.end()也就是map.rbegin()所以–map.end()->second就可以写成map.rbegin()->second如果>原创 2022-11-17 17:43:52 · 406 阅读 · 0 评论 -
2021瑶海区题解
每轮游戏消耗n份零食,k轮游戏消耗n*k份零食,最后剩下的零食就是m-n*k份零食。原创 2022-11-11 21:36:22 · 548 阅读 · 0 评论 -
【dp树状数组优化】跳跃(jump)
这道题是求一个dp[i]的题,dp[i]=dp[j]-sum[j]的最大值+sum[i]-i;③[i-2,i]一起摘d[i]=d[i-3]-i+sum(i-2,i);②i和i-1一起摘d[i]=d[i-2]-i+a[i]+a[i-1];i[1,i]一起摘d[i]=d[0]-i+sum(1,i);其实他就是一个前缀问题,因为j是在一个前缀范围(0~i-1)①i单独一次摘d[i]=d[i-1]-i+a[i];...原创 2022-07-26 14:42:33 · 505 阅读 · 0 评论 -
【c++提高1】图
深度优先遍历从G中任选一个未遍历过的顶点u出发,访问此顶点,然后依次从u的未被访问的邻接点出发,深度优先遍历图,直至图中所有和u有路径相通的顶点都被访问到。非网图中两顶点s,t之间的最短路径问题,我们只需要从顶点s出发,对图作广度优先搜索(BFS),利用BFS层层访问,由近及远的特点,一旦遇到顶点t就终止。图(Graph)是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为G(V,E),其中G表示一个图,V是图G中顶点的集合,E是图G中边的集合。树固定从根节点开始遍历,图的开始顶点不固定。...原创 2022-07-22 20:38:21 · 551 阅读 · 0 评论 -
【Acwing】从1到n整数中1出现的次数
当前位等于1时(n=1214)很显然,十位出现1的次数此时与更低位有关,个位为k则出现k+1次,ans+=k+1。(举例10,11,12,13,14,15,16,17,18,19)n为五位数vwxyz,当i为个位时(即i=1时),则把vwxy这个四位数记为a,b为空(此时b=0代表没有值)当前位为0时(n=1204)第13轮十位只循环到0,不会出现1,结果不变,ans=ans。问如果按位算,当n=11111时,个位时加1,十位时也加1,不会算重复么?...原创 2022-07-21 18:16:10 · 148 阅读 · 0 评论 -
【Acwing】背包
【Acwing】背包原创 2022-07-21 18:05:00 · 73 阅读 · 0 评论 -
【二分 + vector 或 map】学籍表整理
但是如果直接枚举的或复杂度是O(n^2)做一个标记,表示学生i是否被开除或留级。原创 2022-07-19 20:02:59 · 130 阅读 · 0 评论 -
【数论】 最小公倍数的最小和[Minimum Sum LCM,UVa10791]
代码】【数论】最小公倍数的最小和[MinimumSumLCM,UVa10791]原创 2022-07-17 12:42:38 · 292 阅读 · 2 评论 -
【c++入门(2)】并查集
并查集(Union Find Set):是一种用于处理分离集合的抽象数据类型。主要包含2种操作:查询(Find):给定一个x,判断x属于哪个集合。合并(Union):给定x和y,讲x所在的集合与y所在的集合合并。在顺序表实现中,使用数组记录每个元素所属的集合代表。A[i] = j,表示元素i所属集合的代表为j① 初始化:make-set(x):设置A[x] = x,N个元素的时间复杂度O(N)。② 查找:find(x):返回A[x]的值,时间复杂度O(1)。③ 合并:union(y, x):如果x原创 2022-07-05 13:10:43 · 1173 阅读 · 0 评论 -
对称的二叉树【树的遍历】
题思路:dfs遍历n个节点,判断是否对称:原创 2022-07-04 19:02:15 · 208 阅读 · 0 评论 -
小C的数组(array)
题目描述:思路1:暴力枚举,对于a[i]从a[1]枚举到a[i - 1]进行检查。思路2:像像a[i]与a[i - 1]的关系:如果a[i] != a[i - 1]那么f[i]就是i - 1,否则f[i]就是f[i - 1]代码:原创 2022-06-29 15:02:53 · 765 阅读 · 0 评论 -
股票利益【非dp】
题目描述:还是比较简单的,对于a[i],在1 ~ i - 1的过程中求出a[1]到a[i - 1]中的最小值,在与a[i]相减,取max,但是要注意特判 < 0的情况:原创 2022-06-29 14:53:22 · 74 阅读 · 0 评论 -
选数c++【dfs】
题目描述:思路:数据范围很小,所以爆搜,dfs这k个数,接着判断质数 ,不需要优化:原创 2022-06-29 14:47:56 · 580 阅读 · 0 评论 -
【c++入门(2)】关联容器map
map是一个关键字-值(key - value)的集合,就是可以通过key而找到value的一种关联数组。我们称这样的数据结构为:从key到value的映射,把key映射成value。头文件:#include < map >map 定义:map < key类型 , value类型 > 容器名称 ;技巧:有的时候可以定义一个map < long long , long long > 来做一个大桶数组,这样就相当于定义了一个cnt[long long]的桶数组,用普通的数组是无法实现的。map的访问方式:原创 2022-06-25 13:51:43 · 407 阅读 · 0 评论 -
【高精度】X进制整数加法
题目:🔑思路:在高精度模板上改:需要改的地方:① 逆序存储时需要提前转成x进制② 计算时的%10和/10改成%x和/x③ 保存计算结果的时候要转成x进制💯CODE:AC了原创 2022-06-10 21:53:49 · 405 阅读 · 1 评论 -
【Acwing.828】模拟栈
Code:原创 2022-06-04 22:34:37 · 89 阅读 · 0 评论 -
【c++入门(2)】搜索2
一、全排列问题问题简述问题求解列出所有从数字1到数字n的连续自然数的排列,要求所产生的人一数字序列中不允许出现重复的数字。输入格式一个正整数N(N<=20)输出格式若干行,由1-n组成的所有不重复的数字排列,每行一个序列。要求按照样例的所示的按字典序输出输出。Sample Input3Sample Output1 2 31 3 22 1 32 3 13 1 23 2 1思路1:这个问题有多个解,其中每个解都包含n个数字,如果n是确定的,则可以通过n层fo原创 2022-05-23 20:26:15 · 196 阅读 · 0 评论 -
【c++入门(2)】完全背包
一、完全背包题目描述:题目描述有个背包可承受重量T,现有N件物品,每件物品重量为Wi,价值为Vi ,每件物品的数量是无穷的,这个背包可以装载物品的最大价值是多少?输入格式第一行,两个整数,分别表示T和N,用空格隔开(T≤1000,N≤100)接下来T行,每行两个整数,分别表示N件物品的重量Wi和价值Vi(1≤Wi,Vi≤100)输出格式一行,表示这个背包可以装载物品的最大价值输入输出样列输入样例1:100 577 9222 2229 8750 46...原创 2022-05-22 21:35:36 · 3787 阅读 · 1 评论 -
【背包】买铅笔c++
题目描述小明的老师让小明去超市买N只铅笔,小明到了超市后发现各种包装的铅笔琳琅满目应有尽有。确切的说总共有1000种不同包装的铅笔,其中第i种包装的铅笔中有i根铅笔。小明偏爱质数,他想知道,如果他只买包含铅笔数量为质数的包装。那么他有多少种购买方案,可以刚好买够N只铅笔?(假设每种包装的铅笔都有无限多包)。输入格式第1行:一个整数N,表示小科老师让小科购买的铅笔数量N。输出格式一行:一个整数,表示小明要购买N支铅笔的方案数对10008取模后的结果。输入输出样列输入样例1:8原创 2022-05-20 21:23:00 · 1170 阅读 · 1 评论 -
【c++入门(2)】高精度
Ⅰ整数高精度加法问题描述:小A正在学习斐波那契数列,小A想要知道斐波那契数列的第n项。输入:一行,一个整数n。(n<=100)输出:一行,一个整数,斐波那契数列的第n项。输入样例199输出样例1218922995834555169026这一题光看样例就发现会超long long,数据范围表简单列一下:难道递推?dp_fib[1]=1;dp_fib[2]=1;for(int i=3;i<=n;i++){ dp_fib[i]=dp_fib[i-1]+dp_fib[i-原创 2022-05-15 22:17:06 · 531 阅读 · 1 评论 -
【c++入门(2)】分组背包 and 多重背包
一、 分组背包描述:问题描述:有n种物品,每种物品有一个,其中第i种物品的重量为w[i],价值为v[i],这n个物品被分成了k组,每组中的物品相互冲突,最多只能选一个,选一些物品装到一个承重量为C的背包里,使得背包内物品总重量不超过C的前提下价值尽量大。这道题就是说n个物品被分成了k组,每一组可以拿一个或者不拿,有一个背包容量为C的背包问获得的的最大价值是多少?分组背包是在0-1背包的基础上将每个物品划分到一个分组中,首先考虑分组。对于每个分组有两种可选的决策:① 不从该分组中选择物品。原创 2022-05-14 14:29:53 · 1035 阅读 · 0 评论 -
【c++入门(2)】搜索1
一 <导入>搜索和枚举谈区别,枚举解决的是你知道有几层循环,才能去一个一个地去列举一种方案,接着进行操作。而在不知道循环层数的情况下,暴力枚举是解决不了问题的,难道写一个:if(n==1)for()if(n==2)for()for().......if(n==∞)for()for()for()......这肯定是b行的,所以搜索是可以考虑的,在有一些题目中需要DP,但是搜索解决的题目不一定DP就能派上用场,然而每一个DP都可以用递归的形式写。二、 <初探>我们这次原创 2022-05-06 23:00:13 · 643 阅读 · 0 评论 -
【Acowdemia】 牛的学术圈I II III
I:题目描述由于对计算机科学的热爱,以及有朝一日成为 「Bessie 博士」的诱惑,奶牛 Bessie 开始攻读计算机科学博士学位。经过一段时间的学术研究,她已经发表了 N 篇论文(1≤N≤105),并且她的第 i 篇论文得到了来自其他研究文献的 ci 次引用(0≤ci≤105)。Bessie 听说学术成就可以用 h 指数来衡量。h 指数等于使得研究员有至少 h 篇引用次数不少于 h 的论文的最大整数 h。例如,如果一名研究员有 4 篇论文,引用次数分别为 (1,100,2,3),则 h 指数为 2原创 2022-05-01 21:30:28 · 1522 阅读 · 1 评论 -
【01背包练习题】分卡牌
分卡牌题目描述小A和小B正在玩一个卡牌游戏,该游戏中共有N张卡牌,每张卡牌都有一个分数S,小A和小B希望将这N张卡牌分成分数相等的两份(每份中的卡牌数量不一定相等)。请帮助小A和小B计算,是否可以将卡牌分成分数相等的两份,如果可以输出YES,否则输出NO。输入格式输入文件:card.in第1行:一个正数T,代表测试数据的组数每组数据第1行:一个正数N,代表卡牌的数量每组数据第2行:N个空格分隔的正整数,第i个数代表卡牌i上的分数si 。输出格式输出文件:card.out每组原创 2022-04-28 22:01:29 · 291 阅读 · 0 评论 -
【模板2.1】c++模板
1.前缀和#include <iostream>#include <sstream>#include <cstdio>#include <cmath>#include <algorithm>#include <string>#include <cstring>#include <vector>#include <stack>#include <list>#includ原创 2022-05-02 00:00:00 · 364 阅读 · 0 评论 -
【线性DP练习题】军训队列(queue)
题目描述操场,烈日,鸣蝉,偶尔一阵风吹过四周的香樟树,顿时感到一 阵凉爽。某大学大一新生正在进行军训。计算机系 1 班的 n 名(例如 6 人)同学,按照顺时针站成了一圈。教官要求从第 1 个人开始报数, 数到第 m 个(例如第 2 个)就出列,出列的人站成一排,如此这般, 直至 n 个人全部出列(出列顺序 2 号,4 号,6 号,3 号,1 号,5 号)。 以出列后的队伍为准,在不改变同学们站立顺序的前提下,从队伍中 选出若干个人,使得他们的身高呈上身趋势,请统计最多可以选出的人数。输入格式两行原创 2022-04-25 20:00:36 · 974 阅读 · 0 评论 -
【递归练习题】地震
题目描述一座地震频发的山上有N个村庄,编号分别为1至N。某些村庄之间有山路相连,每条山路都有一个防震等级。假如一条路的防震等级是k(k>0),就表示如果发生k级或者小于k级的地震,这条山路是安然无恙的,如果发生大于k级的地震,这条路就会被破坏,不能通过了。现在邮递员小明要从村庄1出发去村庄N,他想知道最高发生几级地震的情况下,他仍然能顺利到达目的地。输入输入数据的第一行是用空格隔开的两个整数N和M,分别表示村庄数和山路数(2 <= N <= 50, 1 <= M .原创 2022-04-24 12:41:49 · 367 阅读 · 0 评论 -
【c++入门(2)】队列和栈
一、队列队列是zhi’yun’xu’zai一端进行插入操作,而在另一端进行删除操作的线性表。队列是一种线性表,简称FIFO。最早进入队列的元素最早离开。允许插入的一端叫做“队尾”,允许删除的一端叫做“队头”。shi意图:接下来画几张图操作si例:现在来看看它的另一面这个时候我们就可以使用循环队列啦接下来我们简单认识一下循环队列的基本操作二、栈老样子,我们来看看栈的实现与操作三、STLqueue我们已经学了,我就不讲了。这次我们来学习stack和deque1.de原创 2022-04-19 20:46:47 · 743 阅读 · 0 评论 -
【递归之数的拆分】n分k,限定范围的拆分
题目自己编的1.n分kⅠ:N拆分K项①题目描述问题描述有N颗弹珠要分给K个人,给定N、K,求有多少种分配方案。输入描述一行,两个整数,为N、K输出描述一个整数,表示分配的方案数。输入样例7 3输出样例36数据范围1<=K<=8K<=N<=30提示4个球分给三个人,有15种分配方案0 0 40 1 30 2 20 3 10 4 01 0 31 1 21 2 11 3 02 0 22 1 12 2原创 2022-04-18 20:14:18 · 465 阅读 · 0 评论 -
【c++入门(2)】递归
这个应该放在前面上的,只不过一cha忘了,今天我们把递归学习完。递归和递推名字很像,很多递归的入门题都可以用递推AC,但是递归也是一种很多问题的解法,是必不可少的一个知识点,话不多说,直接如题。【基础问题】n的阶乘可表示为 n! =123*……(n-1)n,1! = 1。例如3的阶乘3!=123 =6。输入一个整数n(n<=15);输出n的阶乘。解题思路:设:n的阶乘为f(n),观察可知f(n) = n * f(n-1)我们用递推先来解一下:#include <iostream&原创 2022-04-13 22:16:11 · 746 阅读 · 0 评论 -
【c++入门(2)】队列和queue
1.队列将队列我们先看一看线性结构:【定义】线性结构中的数据元素之间是一对一的关系。举个例子:定义:【特点】存在唯一的一个被称为“第一个”的数据元素存在唯一的一个被称为“最后一个”的数据元素除第一个之外,每个数据元素都只有一个前驱除最后一个之外,每个数据元素都只有一个后继说完了线性结构,再来看队列:【定义】队列是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。队列是一种先进先出(First InFirst Out)的线性表,简称FIFO,最早进入队列的元素最早离开。允许插原创 2022-04-12 21:29:25 · 2123 阅读 · 0 评论 -
【c++入门(2)】vector
基础问题:题目描述给定一个长度为n的整数序列。现在有m个操作,操作分为三类,格式如下: ① 1 i:询问序列中第i个元素的值,保证i小于等于当前序列长度; ② 2 i v:在序列中第i个元素前加入新的元素v,保证i小于等于当前序列长度; ③ 3 i:删除序列中的第i个元素,保证i小于等于当前序列长度。 输入格式第一行输入n(1<=n<=1000),表示序列最初的长度。第二行输入n个空格隔开的数表示原始的整数序列。第三行输入m(1<=m<原创 2022-04-10 22:27:28 · 3005 阅读 · 1 评论 -
【c++入门(2)】前缀和
大纲1.计算前缀和2.计算字段和3.后缀和4.前缀积5.后缀积6.例题1.计算前缀和基础问题:思路1:枚举cin ();for (int i = 1; i <= q; i++){ cin >> x; int sum = 0; for (int j = 1; j <= x; j++) { sum += a[j]; } cout << sum << endl;}时间复杂度:O(QN) 极端情况时间复杂度会超!思.原创 2022-04-09 13:37:53 · 1696 阅读 · 0 评论 -
【c++入门(2)】模拟
所谓模拟,就是按照题目的意思将整个过程用代码一步步实现出来。也就是一步步用代码完成题目中的任务,模拟有很多坑点,但又是比赛常考的题型。核心就是刚才所讲的按照题目的意思进行操作,来看看几道题目。The Bovine ShuffleFarmer John相信快乐的奶牛会产出更多的牛奶,所以FJ在牛棚中安装了一个迪斯科球,准备教他的奶牛们跳舞。查找了一些比较流行的奶牛舞蹈后,FJ准备教他的奶牛们跳“Bovine Shuffle”(曳步舞)。舞蹈是这样的:N(1≤N≤100)头奶牛按照一定顺序排成一排,然后原创 2022-04-09 11:36:48 · 1252 阅读 · 0 评论 -
【c++入门(2)】贪心训练
这次的题都不是可以来套模板的,他只是说有一种贪心的思想,有的甚至单单只是一个用贪心思路写的枚举。通过几道题来看看它是什么样的:中秋节快到了,Tom决定为他的N名魔法学徒每人买一盒月饼。Tom带着学徒们来到月饼店,让学徒们挑选自己喜欢的月饼。学徒们欢天喜地的开始挑选月饼,没过多久学徒们就选好了自己喜爱的月饼。其中第i名学徒挑选的月饼每盒价格为P[i]元,另外由于月饼的保质期很短,所以月饼店对于每种月饼只会生产一盒样品放在店中展示,当客户挑选好月饼付完钱后月饼店才会生产月饼。为了不让客户再多跑一趟原创 2022-04-05 15:22:23 · 1546 阅读 · 1 评论 -
【c++入门(2)】邻项交换
区间贪心在这里,做个铺垫邻项交换是一种贪心的策略,他的要领有一个:就是假设只有两个元素,看看那个应该放前面。我们通过几道例题来看看: 1. K11715 Protecting the Flowers[USACO-2007-Jan-S]题目描述Farmer John像往常一样去砍伐一些木头,并留下他的N(2≤N≤100000)头奶牛在吃草。当他回来时,他惊恐地发现,奶牛们正在他的花园里吃着他美丽的花朵。为了尽量减少后续损失,FJ决定立即采取行动,将每头母牛赶回自己的牛棚。每头奶牛i都在距离自己原创 2022-03-26 15:36:02 · 589 阅读 · 1 评论 -
小妙招——多关键字排序
在有多个条件的情况下排序,我们一般用结构体cmp来排序。这个时候你就需要想一想,会不会有些题就卡你的这个排序的时间呢?所以我们需要想一想怎么来优化我们的代码。现在想一想,怎么来优化。我举个例子:有n个数(n <= 800000000),输出他们中最大的。我们可以以这个为参考来思考:首先我们以第一个数为基准来思考,如果当前输入的数比第一个大,那就更新最大值。按着这个思路,就是先把第一个输入的作为最优解,如果当前的比前面的更优,那么就更新最优解。我出一道题:问题描述庆庆正在研究一个科技创新课原创 2022-03-25 18:33:19 · 1346 阅读 · 0 评论 -
大鱼吃小鱼 C++ - 栈与非栈
问题描述有N条鱼,每条鱼的位置及大小均不同,他们沿着X轴游动,有的向左,有的向右。游动的速度是一样的,两条鱼相遇大鱼会吃掉小鱼。从左到右给出每条鱼的大小和游动的方向。问足够长的时间之后,能剩下多少条鱼?输入描述第一行一个整数N。之后N行,每行有一个整数和一个字符组成。整数表示鱼的大小;字符表示鱼游动的方向为L或者R,L表示向左,R表示向右。输出描述一个整数,表示最终剩下的鱼的数量。输入样例54 L3 R2 L1 R5 L输出样例2数据范围N<=2000这道题呢来一看原创 2022-02-19 13:56:43 · 2031 阅读 · 0 评论