
C++
猪猪成
低头赶路,敬事如仪。
展开
-
【BFS双队列实现分层处理(求最短路径长度)】蓝桥杯 青蛙跳杯子
如下图,有一排杯子,左边的一个是空着的,右边的杯子,每个里边有一只青蛙。本题的任务就是已知初始局面,询问至少需要几步,才能跳成另一个目标局面。2. 隔着1只其它的青蛙(随便什么颜色)跳到空杯子里。3. 隔着2只其它的青蛙(随便什么颜色)跳到空杯子里。其中,W字母表示白色青蛙,B表示黑色青蛙,*表示空杯子。X星球的流行宠物是青蛙,一般有两种颜色:白色和黑色。输出要求为一个整数,表示至少需要多少步的青蛙跳。输入为2行,2个串,表示初始局面和目标局面。1. 跳到相邻的空杯子里。输入的串的长度不超过15。原创 2025-03-19 11:11:28 · 484 阅读 · 0 评论 -
【DFS全排列+判断子序列】蓝桥杯算法提高-3000米排名预测
3000米长跑时,围观党们兴高采烈地预测着最后的排名。因为他们来自不同的班,对所有运动员不一定都了解,于是他们分别对自己了解的一些运动员的实力作出了评估,即对部分运动员做了相对排名的预测,并且告诉了可怜留守的班长。因为无聊,于是他们就组团去打Dota去了。比赛结束后他们向班长询问最后的排名,但班长不记得了,只记得他们中哪些人的预测是正确的,哪些人的预测是错误的。他们想知道比赛的排名可能是什么。原创 2025-03-18 11:40:04 · 634 阅读 · 0 评论 -
【数论】快速幂的学习和使用
在求a^b%p的值中,明显要乘b次a,所以时间复杂度是O(b)。为了降低时间复杂度,引入快速幂的算法。原创 2025-03-18 10:33:03 · 133 阅读 · 0 评论 -
【DP完全背包变形+DFS】[NOIP1999 提高组] 邮票面值设计
给定一个信封,最多只允许粘贴N张邮票,计算在给定K(N+K≤13)种邮票的情况下(假定所有的邮票数量都足够),如何设计邮票的面值,能得到最大值MAX,使在1~MAX之间的每一个邮资值都能得到。 例如,N=3,K=2,如果面值分别为1分、4分,则在1分~6分之间的每一个邮资值都能得到(当然还有8分、9分和12分);如果面值分别为1分、3分,则在1分~7分之间的每一个邮资值都能得到。可以验证当N=3,K=2时,7分就是可以得到的连续的邮资最大值,所以MAX=7,面值分别为1分、3分。原创 2025-03-17 23:16:42 · 732 阅读 · 0 评论 -
【FLOYD+并查集】蓝桥杯算法提高 Degrees of Separation
输入包含多组描述关系网络的数据,对于每组数据,第一行有两个数P,表示网络中人的数目,和R,关系的对数。每个关系用两个字符串表示,代表网络中有关系的两个人的名字。一个关系网络就是一个图,两个人之间的分离度就是两个人之间路径的长度 这是一个不带权图 或者理解为权值等于1也行。题目要求的就是求一个图中 任意两个人的最短路径的最大值,前提是这个图是连通图。对于任意两个人,他们的分离度是联系两个人需要经过的最小的关系数。对于一个关系网络,最大的分离度是网络中任意两人的分离度的最大值。按照样例输出中的格式输出。原创 2025-03-17 12:22:26 · 1769 阅读 · 0 评论 -
【字符串】用getline和stringstream读取一个字符串并按照空格分割
比如我们遇到这样的题目,两个人名为一对关系,会给出任意对关系。比如:Ashok Kiyoshi Ursala Chun Ursala Kiyoshi Kiyoshi Chun由于我们不知道到底有几个人名 我们无法事先定义变量,然后根据具体的循环一个一个读入变量值。我们只能把这一整句话用一个字符串string存储 但是cin>>string无法读入空格 这句话是包含空格的,所以我们要用。原创 2025-03-17 11:17:46 · 331 阅读 · 0 评论 -
【图论】FLOYD弗洛伊德算法-最短路径
弗洛伊德算法用于求多源最短路径,也就是求两个点的最短路径,其思想是基于动态规划。原创 2025-03-16 11:00:33 · 501 阅读 · 0 评论 -
【图论】并查集的学习和使用
并查集是一种树形的数据结构,一般用来处理集合的合并,查询操作。原创 2025-03-15 22:37:58 · 862 阅读 · 0 评论 -
【动态规划+数论】包子凑数|完全背包变形
每当有顾客想买X个包子,卖包子的大叔就会迅速选出若干笼包子来,使得这若干笼中恰好一共有X个包子。比如一共有3种蒸笼,分别能放3、4和5个包子。当顾客想买11个包子时,大叔就会选2笼3个的再加1笼5个的(也可能选出1笼3个的再加2笼4个的)。他发现这家包子铺有N种蒸笼,其中第i种蒸笼恰好能放Ai个包子。比如一共有3种蒸笼,分别能放4、5和6个包子。如果凑不出的数目有无限多个,输出INF。凑不出的数目包括:1, 2, 3, 6, 7, 11。小明想知道一共有多少种数目是包子大叔凑不出来的。原创 2025-03-14 12:37:45 · 1520 阅读 · 0 评论 -
【数论】A B互质 最大不能表示出来的数是 A*B-A-B
当正整数A与B互质时,用A和B表示不出的最大数为A*B-A-B。证明:两个互质的数A、B(无论是否相差为1),最小公倍数为AB。设a(n)为使式子a(n)B mod A = n成立的最小正整数,其中n从1到A-1。可以证明,0<a(n)<A。显然a(n)不可能为A的倍数。如果a(n)>A,则有a(n)B mod A = (a(n)-A)B mod A = n,:即a(n)-A也是使以上式子成立的正整数,但显然比a(n)小,因此不是最小正整数。所以a(n)<A。令n从1到A-1,由于所有的a(n)都小于A且显原创 2025-03-14 12:18:26 · 306 阅读 · 0 评论 -
【动态规划】对局匹配 (分组线性DP)
小明喜欢在一个围棋网站上找别人在线对弈。这个网站上所有注册用户都有一个积分,代表他的围棋水平。小明发现网站的自动对局系统在匹配对手时,只会将积分差恰好是K的两名用户匹配在一起。如果两人分差小于或大于K,系统都不会将他们匹配。现在小明知道这个网站总共有N名用户,以及他们的积分分别是A1, A2, ... AN。小明想了解最多可能有多少名用户同时在线寻找对手,但是系统却一场对局都匹配不起来(任意两名用户积分差不等于K)?原创 2025-03-13 22:01:53 · 897 阅读 · 0 评论 -
最长公共子序列【LCS】(动态规划)
LIS(Longest Increasing Subsequence)最长上升子序列一个数的序列bi,当b1 < b2 < … < bS的时候,我们称这个序列是上升的。对于给定的一个序列(a1, a2, …, aN),我们可以得到一些上升的子序列(ai1, ai2, …, aiK),这里1 <= i1 < i2 < … < iK <= N。比如,对于序列(1, 7, 3, 5, 9, 4, 8),有它的一些上升子序列,如(1, 7), (3, ..原创 2021-11-05 20:13:49 · 140 阅读 · 0 评论 -
最长上升子序列【LIS】<动态规划>
【题目描述】给定N个数,求这N个数的最长上升子序列的长度。【样例输入】72 5 3 4 1 7 6【样例输出】4代码:#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>using namespace std;#define Max 1010//最长上升序列int a[Max];int maxlen[Max];int原创 2021-11-05 19:11:51 · 107 阅读 · 0 评论 -
数字三角形<动态规划>(利用递推 ) 超简洁的做法
问题描述问题:给定一个由n行数字组成的数字三角形,如下图所示:试设计一个算法,计算出从三角形的顶至底的一条路径,使该路径经过的数字总和最大(每一步只能从一个数走到下一层上和它最近的左边的数或者右边的数)。输入格式: 第一行是数字三角形的行数,接下来 n 行是数字三角形中的数字。输出格式: 最大总和(整数)样例输入573 88 1 02 7 4 44 5 2 6 5样例输出30#include<iostream>#include<cstd.原创 2021-11-05 18:55:05 · 302 阅读 · 0 评论 -
快速排序<分治>
#include<iostream>using namespace std;//快速排序 复杂度 O(n*logn) //但只指一般条件(运气好的时候) 就是k a[0]要在数组中比较中间的位置//运气不好的时候 就是一个数组比较有序的时候 复杂度为n*n//但我们可以手动的随机打乱 但也占复杂度void swap(int &a,int &b)//交换数值的函数{ int tmp=a; a=b; b=tmp; return ;}v.原创 2021-11-04 21:22:28 · 91 阅读 · 0 评论 -
排序法·归并排序
#include<iostream>using namespace std;int a[10]= {13,27,19,2,8,12,2,8,30,39};int b[10];//归并排序void Merge(int a[],int s,int m,int e,int tmp[]){ int pb=0; int p1=s,p2=m+1; //拆分成两个数组进行归并 while(p1<=m&&p2<=e) { .原创 2021-11-04 14:08:08 · 94 阅读 · 0 评论 -
表达式求和<递归>
上代码!#include <cstdio>#include <cstring>#include<iostream>using namespace std;int factor_value();int term_value();int expression_value();int main(){ cout<<expression_value()<<endl; return 0;}int expression_原创 2021-11-04 13:46:38 · 259 阅读 · 0 评论 -
POJ1222熄灯问题<北大OJ>(位运算)
AC代码如下:#include <cstdio>#include <cstring>#include<iostream>using namespace std;char oriLights[5];char light[5];char result[5];int getbit(char c,int i)//取出字节{ return(c>>i)&1;}void setbit(char & c,int...原创 2021-11-03 23:14:49 · 268 阅读 · 1 评论 -
洛谷P1024[NOIP2001]一元三次方程(二分)
AC代码如下:#include<bits/stdc++.h>using namespace std;//一元三次方程double a,b,c,d;//全局变量 方便传进jisuan函数使用double jisuan(double x){ return a*x*x*x+b*x*x+c*x+d;}int main(){ cin>>a>>b>>c>>d; int sum; ...原创 2021-10-30 11:24:22 · 219 阅读 · 0 评论 -
洛谷P2678[NOIP2015]跳石头(二分算法)
题目:AC通过图如下简短的AC代码如下:#include<iostream>#include<cstdio>using namespace std;int main(){ int l, n, m; cin >> l >> n >> m; int arr[50001]; int now, left, right, mid; left = 0; right = l; //给2位置变量初始化数...原创 2021-10-30 10:24:33 · 1284 阅读 · 0 评论 -
DHU.OJ乒乓球<字符串>
AC代码:#include<iostream>#include<cstdio>using namespace std;int a[65000];void tongji(int x);int len;int main(){ char c; while(cin>>c) { switch (c) { case 'W': a[len++] = ...原创 2021-10-29 11:35:40 · 279 阅读 · 0 评论 -
不同单词统计<字符串>
AC代码:#include<cstdio>#include<cstring>#include<iostream>#include<cmath>#include<string>#include<queue>#include<vector>using namespace std;int main(){ char a[105]; gets(a); int sum=0; fo...原创 2021-10-28 23:09:10 · 102 阅读 · 0 评论 -
字符串编辑<字符串>
AC代码如下:#include<bits/stdc++.h>using namespace std;int main(){ // freopen("input.txt", "r", stdin); string str; getline(cin, str); char s, a; cin >> s >> a; int length = str.size(); int i, j,...原创 2021-10-28 23:07:14 · 235 阅读 · 0 评论 -
洗牌<字符串>
#include<cstdio>#include<cstring>#include<iostream>#include<cmath>#include<string>#include<queue>#include<vector>using namespace std;int main(){ string input; int poker[54]; int n=0...原创 2021-10-28 00:13:08 · 162 阅读 · 0 评论 -
表达式求值<字符串>
AC代码:#include<cstdio>#include<cstring>#include<iostream>#include<cmath>#include<string>using namespace std;int main(){ char a[200]; while(gets(a)) { int sum=0; int flag=0; ...原创 2021-10-26 23:44:32 · 122 阅读 · 0 评论 -
字符串统计<字符串>
AC代码:#include<cstdio>#include<cstring>#include<iostream>#include<cmath>using namespace std;int judge(char tmp[],char a[]);int main(){ int l; char a[100]; char b[100]; cin>>l; getchar(); g...原创 2021-10-26 22:19:45 · 123 阅读 · 0 评论 -
My brother‘s homework<字符串>
题目:AC代码 如下#include<cstdio>#include<cstring>#include<iostream>#include<cmath>#include<string>using namespace std;int main(){ int i = 0, j, count = 0; int a[100], b[100], c[100]; char d[100]; while(scanf("%d.原创 2021-10-26 22:18:17 · 92 阅读 · 0 评论 -
字符串压缩<字符串>
AC代码如下!#include<cstdio>#include<string>#include<iostream>#include<cmath>using namespace std;string yasuo(string str);int main(){ string str; for(;cin>>str;){ for(int i=0;i<str.length();i++) ...原创 2021-10-25 16:19:29 · 93 阅读 · 0 评论 -
移动距离<二维数组>
AC代码#include<cstdio>#include<cstring>#include<iostream>#include <cmath>using namespace std;int w, m, n;int main(){ scanf("%d %d %d", &w, &m, &n); m--;//减1后确保算出来的行数 准确 否则当w等于6 m等于6 m1等于1但其实m在第...原创 2021-10-25 15:25:44 · 148 阅读 · 0 评论 -
【洛谷】P173】[noi1999]生日蛋糕
AC代码如下#include<cstdio>#include<cstring>#include<iostream>#include<cmath>using namespace std;int r[30],h[30],minn=211310532,n,m;void dfs(int x,int y,int k,int z)//步骤 V 表面积 层数{ if(y<0) return;//体积已经大于n 剪枝 if(x...原创 2021-10-24 22:13:22 · 191 阅读 · 0 评论 -
【洛谷P1219】八皇后
题目描述一个如下的6 \times 66×6的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行、每列有且只有一个,每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子。上面的布局可以用序列2\ 4\ 6\ 1\ 3\ 5246135来描述,第ii个数字表示在第ii行的相应位置有一个棋子,如下:行号1\ 2\ 3\ 4\ 5\ 6123456列号2\ 4\ 6\ 1\ 3\ 5246135这只是棋子放置的一个解。请编一个程序找出所有棋...原创 2021-10-24 12:05:42 · 105 阅读 · 0 评论 -
<洛谷>P1378 油滴拓展
题目描述在一个长方形框子里,最多有NN个相异的点,在其中任何一个点上放一个很小的油滴,那么这个油滴会一直扩展,直到接触到其他油滴或者框子的边界。必须等一个油滴扩展完毕才能放置下一个油滴。那么应该按照怎样的顺序在这NN个点上放置油滴,才能使放置完毕后所有油滴占据的总体积最大呢?(不同的油滴不会相互融合)注:圆的面积公式V = \pi r^2V=πr2,其中rr为圆的半径。输入格式第一行,一个整数NN。第二行,四个整数x, y, x', y'x,y,x′,y′,表示长方形边...原创 2021-10-23 17:09:36 · 298 阅读 · 0 评论 -
棋盘多项式·八皇后改八车<递归>
问题描述 : 八皇后问题是在棋盘上放皇后,互相不攻击,求方案。变换一下棋子,还可以有八车问题,八马问题,八兵问题,八王问题,注意别念反。在这道题里,棋子换成车,同时棋盘也得换,确切说,是进行一些改造。比如现在有一张n*n的棋盘,我们在一些格子上抠几个洞,这些洞自然不能放棋子了,会漏下去的。另外,一个车本来能攻击和它的同行同列。现在,你想想,在攻击的过程中如果踩到一个洞,便会自取灭亡。故,车的攻击范围止于洞。 此题,给你棋盘的规模n,以及挖洞情况,求放k个车的方案数(k从0到最多可放车数)输入原创 2021-10-23 09:59:54 · 664 阅读 · 0 评论 -
八皇后·改<递归>
问题描述 :规则同8皇后问题,但是棋盘上每格都有一个数字,要求八皇后所在格子数字之和最大。输入说明 :一个8*8的棋盘。数据规模和约定 棋盘上的数字范围0~99输出说明 :所能得到的最大数字和AC代码如下#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#inc..原创 2021-10-23 09:52:46 · 159 阅读 · 0 评论 -
两只塔姆沃斯牛<二维数组>
问题描述 :两只牛在森林里故意走丢了。农民John开始用他的专家技术追捕这两头牛。你的任务是模拟他们的行为(牛和John)。追击在10x10的平面网格内进行。一个格子可以是:一个障碍物, 两头牛(它们总在一起), 或者 农民John.两头牛和农民John可以在同一个格子内(当他们相遇时),但是他们都不能进入有障碍的格子。一个格子可以是:. 空地* 障碍物C 两头牛F 农民John这里有一个地图的例子:*...*...........*......*..原创 2021-10-21 16:42:24 · 200 阅读 · 0 评论 -
学生选拔<结构体>
问题描述 :多组测试数据。每组数据的第一行的数字n,m(1≤m,n≤1000)。n表示该班级有n个同学,m表示要选取每门课排名前m的学生。以下n行每行由一个名字,一个语文成绩,一个数学成绩,一个英语成绩组成,表示一个同学的信息。名字是一个由大小写字母组成的字符串,名字字符串最长长度为20,名字中间没有空格。每门课成绩是一个0到10000之间的整数。数据保证,在同一组测试数据中,任意两个同学同一门课程的分数一定不相同。说明:总共三门课,每门课录取前m个学生,则总共最多录取3*m个学生,但这原创 2021-10-20 13:38:39 · 541 阅读 · 0 评论 -
扑克牌<结构体>
问题描述:明明和他的三位同学在玩一种非常有趣的扑克牌游戏。在这个游戏中,一副牌的大小怪被除去,然后把剩下的52张牌随机发给4个人,这样每个人的手中就有13张牌。接下来的任务就是每个人把自己手中的牌按一定的顺序整理好。理牌的顺序如下:首先按牌的大小整理,牌的大小顺序为:A,K,Q,J,T(10),9,…,2,如果牌的大小相等,则按如下的花色顺序整理:黑桃(S),红心(H),方块(D),草花(C)。例如有一个人手中拿到的牌如下:ST CQ S8 D8 HQ D2 H3 HK H9 H2原创 2021-10-18 14:42:12 · 608 阅读 · 0 评论 -
回文平方数
问题描述 :回文数是指从左向右念和从右向左念都一样的数。如12321就是一个典型的回文数。 给定一个进制B(2=<B<=20进制),输出所有的大于等于1小于等于300且该数的平方用B进制表示时是回文数的数(该数本身不要求是回文数)。输入说明 :共一行,一个单独的整数B(B用十进制表示,比如18)。输出说明 :每行两个数字,第二个数是第一个数的平方,且第二个数是回文数。注意:输出时,这两个数都应该以B进制表示。在输出时,数字10到20分别以A到K代替。解题方法: 定原创 2021-10-17 14:22:50 · 703 阅读 · 0 评论 -
最少拦截系统<一维数组>
问题描述:某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能达到前一发的高度。某天,雷达捕捉到敌国的导弹来袭,如果系统数量太少,将导致有可能不能拦截所有的导弹。所以,根据雷达捕捉到的导弹高度,需要预先准备相应数量的拦截系统。比如导弹的高度依次为:5 3 4 2 4 1则一个拦截系统的第一发炮弹必须打到高度5的地方,第二发炮弹打到高度3的地方。但第三发炮弹打不到高度4的地方(因为每一发炮原创 2021-10-17 10:13:02 · 79 阅读 · 0 评论 -
序列<一维数组>
问题描述:明明的爸爸经常用做游戏的方法启发明明对数学的兴趣。有一次,明明爸爸准备了许多盒子和球,他要和明明做一个放球的游戏。游戏如下:要将k个小球依次装入到若干个盒子中去(可以使用的盒子数不限)。小球装入盒子的规则如下:1)第一个盒子不能为空。2)依次装入各个盒子的球数必须严格递增。例如:当k=8时,装入方法有1,2,5或1,3,4。3)装入的盒子数尽可能多。4)所有相邻盒子的球数之差的绝对值之和最小。如上例中:装入法1,2,5,则差的绝对值之和为(2-1)+(5-2...原创 2021-10-17 09:39:33 · 197 阅读 · 0 评论