- 博客(63)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 二叉树の学习之最近公共祖先
最近做了二叉树类型的题目,做了洛谷的P3884 [JLOI2009]二叉树问题,学习了一种新的算法(倍增),最近公共祖先题目链接:[P3884二叉树问题](https://www.luogu.com.cn/problem/P3884)还有另外一道题:P3379 【模板】最近公共祖先(LCA)感兴趣的可以看一下。上代码:#include<bits/stdc++.h>#def...
2020-04-22 10:21:22
122
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 PTA Windows消息队列
这个题主要是队列中的排序问题比较头疼。可以直接用map,map实现从小到大排序。C++ STL队列里面有一个好用的叫优先队列。系统直接提供了便捷的实现方法。1.数越小 优先级越高: priority_queue<<int>,vector<int>,greater<int> > q;2.否则:priority_queue<int> q;...
2019-11-30 20:49:43
319
原创 1085 PAT单位排行 (25分)(运行点4,5超时)
思路就是存两个结构体,一个解决输入,一个解决输出,没想到最后两个测试点过不了。#include <bits/stdc++.h>//粘贴复制至头文件下即可#pragma once #pragma GCC diagnostic error "-std=c++11"#pragma GCC target("avx")#pragma GCC optimize(2)#pragma GCC optimize(3,"Ofast","inline")#pragma GCC optimize("Of
2020-11-20 17:59:44
386
原创 洛谷P1087 FBI树
#include <bits/stdc++.h>#define lson l, mid, rt * 2 + 1#define rson mid + 1, r, rt * 2 + 2using namespace std;typedef long long ll;const int N = 11;int n;string str;char a[1 << N];int pd(int l, int r){//判断是B还是I还是F int flag1 = 0, flag2
2020-11-10 19:38:08
248
2
原创 洛谷P1042乒乓球
问题传送门题目本身并不难,主要是考虑许多种情况。思路:若华华或者对手首先到达了11,那么就判断是否分差大于2,大于2就输出,不大于2就继续往下做。最后输出剩余的分数,不多说,直接看代码。#include <bits/stdc++.h>using namespace std;int a[2];char c;string s;int main(){ while(cin >> c && c != 'E'){ s+=c; } for(int i =
2020-11-03 20:23:17
328
原创 P1010 幂次方
模拟递归去做。这道题的思路就是:首先找到和x接近的并且大于X的数。其次对幂进行判断,如果幂等于0或者等于1,那么直接输出,如果大于1,对幂进行递归。用x减去算出来的最接近x的数。最后递归。如果光说的话可能不好理解,直接上代码。#include <bits/stdc++.h>using namespace std;int n;int ksm(int a, int b){//快速幂模板,因为数据比较小,没有求余操作。 int res = 1; while(b){ if
2020-10-28 09:57:53
166
原创 7-59 还原二叉树 (25分)
这道题相当于给出先序和中序求后序遍历的题差不多,只需要记录一下depth就行了。#include <iostream>#include <algorithm>#include <cstring>#include <stack>using namespace std;const int maxn = 60;char pre[maxn],in[maxn];int n,mx=1;void dfs(int root, int start, int .
2020-09-26 16:56:08
277
原创 7-37 是否同一棵二叉搜索树 (25分)
这道题需要首先建立一个二叉搜索树,然后再一一对比。#include<bits/stdc++.h>#define fi first#define se second#define pb pusb_back#define SZ(x) (ll)x.size()#define rep(i,a,b) for(ll i=(a);i<=(b);++i)#define per(i,a,b) for(ll i=(a);i>=(b);--i)#define mem(a,b) memse.
2020-09-10 17:54:30
232
原创 7-35 List Leaves (25分)
这道题的意思是,给出你每个结点(结点从0-n-1)的左右孩子,然后让你从上到下,从左到右输出叶子结点。这道题的思路是用队列做,首先用结构体存储结点的左右孩子,以便后面队列找叶结点。首先找到根节点(找的方法是创建一个标记数组,每次输入结点时,vis[结点]++,当某个结点vis数组存储的值时0时,就是根节点),然后从根节点开始左右搜索,依次找到叶结点。代码如下:#include <iostream>#include <algorithm>#include <cstri.
2020-09-10 13:05:14
216
原创 7-15 树的遍历 (25分)
这个题就是转层序,在函数后面加一个index统计各个点的位置就可以了,跟玩转二叉树基本上一样。代码:#include <iostream>#include <algorithm>#include <cstring>#include <sstream>using namespace std;const int N = 50;int in[N],post[N],level[100000];int cnt = 0;int n;void dfs.
2020-09-10 11:40:24
310
原创 7-10 玩转二叉树 (25分)
写这个题是借鉴了学长的思路,在反转的时候只需要在遍历左半部分和右半部分的时候将结点转换一下位置就可以了,需要注意的是,存储层序数组的结点需要开大一些,否则最后一个测试点过不去,最后就是输出的时候需要借助一个cnt输出答案。代码如下:#include <iostream>#include <algorithm>#include <cstring>#include <sstream>using namespace std;const int N =.
2020-09-10 10:11:48
2465
原创 7-7 根据后序和中序遍历输出先序遍历 (25分)
题目模板如下:#include <iostream>#include <algorithm>#include <cstring>#include <vector>using namespace std;const int N = 40;int in[N],post[N],pre[N];int n;int index;void dfs(int root, int start, int end){ if(start > end) re.
2020-09-09 20:58:16
504
1
原创 7-2 英文单词排序
这道题第一时间我想到的是sort,可是最后一个测试点死活过不去,去网上查了查博客发现sort是不稳定的,它没法保证排序的时候按照题目输入的顺序输出,于是就有了stable_sort,是稳定排序。代码如下:#include <iostream>#include <algorithm>#include <cstring>using namespace std;typedef pair<int,int> PII;const int N = 510;.
2020-09-09 20:28:18
501
原创 7-1 旅游规划 (25分)
有了一张自驾旅游路线图,你会知道城市间的高速公路长度、以及该公路要收取的过路费。现在需要你写一个程序,帮助前来咨询的游客找一条出发地和目的地之间的最短路径。如果有若干条路径都是最短的,那么需要输出最便宜的一条路径。输入格式:输入说明:输入数据的第1行给出4个正整数N、M、S、D,其中N(2≤N≤500)是城市的个数,顺便假设城市的编号为0~(N−1);M是高速公路的条数;S是出发地的城市编号;D是目的地的城市编号。随后的M行中,每行给出一条高速公路的信息,分别是:城市1、城市2、高速公路长度、收费额,中
2020-09-09 20:09:26
6343
1
原创 分组背包问题
有 N 组物品和一个容量是 V 的背包。每组物品有若干个,同一组内的物品最多只能选一个。每件物品的体积是 vij,价值是 wij,其中 i 是组号,j 是组内编号。求解将哪些物品装入背包,可使物品总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行有两个整数 N,V,用空格隔开,分别表示物品组数和背包容量。接下来有 N 组数据:每组数据第一行有一个整数 Si,表示第 i 个物品组的物品数量;每组数据接下来有 Si 行,每行有两个整数 vij,wij,用空格隔开,分别表示第 i
2020-05-31 00:29:44
281
原创 多重背包问题 II
有 N 种物品和一个容量是 V 的背包。第 i 种物品最多有 si 件,每件体积是 vi,价值是 wi。求解将哪些物品装入背包,可使物品体积总和不超过背包容量,且价值总和最大。输出最大价值。输入格式第一行两个整数,N,V,用空格隔开,分别表示物品种数和背包容积。接下来有 N 行,每行三个整数 vi,wi,si,用空格隔开,分别表示第 i 种物品的体积、价值和数量。输出格式输出一个整数,表示最大价值。数据范围0<N≤10000<V≤20000<vi,wi,si≤200
2020-05-30 23:54:06
295
原创 多重背包问题 I
有 N 种物品和一个容量是 V 的背包。第 i 种物品最多有 si 件,每件体积是 vi,价值是 wi。求解将哪些物品装入背包,可使物品体积总和不超过背包容量,且价值总和最大。输出最大价值。输入格式第一行两个整数,N,V,用空格隔开,分别表示物品种数和背包容积。接下来有 N 行,每行三个整数 vi,wi,si,用空格隔开,分别表示第 i 种物品的体积、价值和数量。输出格式输出一个整数,表示最大价值。数据范围0<N,V≤1000<vi,wi,si≤100输入样例:4 5
2020-05-30 23:29:14
780
原创 动态规划の导弹拦截
题目描述某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。输入导弹依次飞来的高度(雷达给出的高度数据是\le 50000≤50000的正整数),计算这套系统最多能拦截多少导弹,如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。输入格式1行,若干个整数(个数≤100000)输出格式
2020-05-25 23:35:12
443
原创 P1091 合唱队形 洛谷
原题链接想要出列的最少,那么就留下的最多。这个题是中间高两端低,但是最长上升子序列只能处理单调的,那怎么办呢。那么我们就从1到n求一趟,再从n到1求一趟。最后枚举中间的Ti,从中间的Ti求max。#include <iostream>#include <sstream>#include <algorithm>#include <cstring>#include <cstdio>using namespace std;typed
2020-05-25 00:16:45
265
原创 完全背包问题
有 N 种物品和一个容量是 V 的背包,每种物品都有无限件可用。第 i 种物品的体积是 vi,价值是 wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行两个整数,N,V,用空格隔开,分别表示物品种数和背包容积。接下来有 N 行,每行两个整数 vi,wi,用空格隔开,分别表示第 i 种物品的体积和价值。输出格式输出一个整数,表示最大价值。数据范围0<N,V≤10000<vi,wi≤1000输入样例4 51 22
2020-05-17 21:42:38
288
原创 01背包问题
有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。第 i 件物品的体积是 vi,价值是 wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行两个整数,N,V,用空格隔开,分别表示物品数量和背包容积。接下来有 N 行,每行两个整数 vi,wi,用空格隔开,分别表示第 i 件物品的体积和价值。输出格式输出一个整数,表示最大价值。数据范围0<N,V≤10000<vi,wi≤1000输入样例4 51 22
2020-05-16 17:53:35
254
原创 poj 1321 棋盘问题
原题链接这道题思路类似于八皇后,只需要判断列不重复就行了。#include <iostream>#include<queue>#include <algorithm>#include <cstring>#include <cstdio>typedef long long ll;using namespace std;const int maxn = 20;bool visit[20];char mp[maxn][maxn];
2020-05-10 22:11:13
139
原创 洛谷 P3958 奶酪
原题链接这个题并查集比较巧妙的一点就是,将上表面和下表面看做n+1和n,从0到n连接各个点, 如果洞和上表面相交或者相切,则连接,如果和下表面相切或者相交,那么连接,最后检查上表面和下表面是不是同一个祖先即可。并查集做法:#include <iostream>#include<queue>#include <algorithm>#include <cstring>#include <cstdio>#include <cmath
2020-05-10 21:37:36
298
2
原创 poj 3278 Catch That Cow
DescriptionFarmer John has been informed of the location of a fugitive cow and wants to catch her immediately. He starts at a point N (0 ≤ N ≤ 100,000) on a number line and the cow is at a point K (0...
2020-05-08 13:55:02
414
原创 7-53 切分表达式——写个tokenizer吧 (20分)
[先说点出题背景]这个题是为低年级同学、学C语言的同学准备的,因为,对这部分同学,这个题目编写起来略有一点复杂。如果是高年级、学过了正则表达式(Regular Expression)的同学或者学过了Java等OO语言的同学做这个题,应当发现这题比较简单吧。哦,对了,什么是tokenizer?请自行查询解决。反正在此处不应翻译成“令牌解析器”。[正题]四则运算表达式由运算数(必定包含数字,可能...
2020-05-07 19:46:56
1580
原创 并查集模板 C++
int find(int x){return fa[x]==x?x:fa[x]=find(fa[x]);}void Union(int x,int y){ int px=find(x); int py=find(y); if(px!=py) fa[px]=py;}
2020-05-07 13:50:04
132
原创 7-58 输出全排列 (20分)
请编写程序输出前n个正整数的全排列(n<10),并通过9个测试用例(即n从1到9)观察n逐步增大时程序的运行时间。输入格式:输入给出正整数n(<10)。输出格式:输出1到n的全排列。每种排列占一行,数字间无空格。排列的输出顺序为字典序,即序列a1 ,a2 ,⋯,an 排在序列b1 ,b2 ,⋯,bn 之前,如果存在k使...
2020-05-07 13:44:03
887
原创 7-67 回文数 (10分)
判断一个5位数是不是回文数。例如12321是一个回文数,即它的个位与万位相同,十位与千位相同。。输入格式:直接输入一个5位数正整数。输出格式:输出“yes”或“no”。此处均为小写字母输入样例:12521输出样例:yes输入样例:65432输出样例:no#include <iostream>#include <vector>#include &...
2020-05-07 13:41:39
663
原创 7-86 N个数求和 (20分)
本题的要求很简单,就是求N个数字的和。麻烦的是,这些数字是以有理数分子/分母的形式给出的,你输出的和也必须是有理数的形式。输入格式:输入第一行给出一个正整数N(≤100)。随后一行按格式a1/b1 a2/b2 …给出N个有理数。题目保证所有分子和分母都在长整型范围内。另外,负数的符号一定出现在分子前面。输出格式:输出上述数字和的最简形式 —— 即将结果写成整数部分 分数部分,其中分数部分写...
2020-05-07 13:40:49
1096
原创 7-92 阅览室 (20分)
天梯图书阅览室请你编写一个简单的图书借阅统计程序。当读者借书时,管理员输入书号并按下S键,程序开始计时;当读者还书时,管理员输入书号并按下E键,程序结束计时。书号为不超过1000的正整数。当管理员将0作为书号输入时,表示一天工作结束,你的程序应输出当天的读者借书次数和平均阅读时间。注意:由于线路偶尔会有故障,可能出现不完整的纪录,即只有S没有E,或者只有E没有S的纪录,系统应能自动忽略这种无效纪...
2020-05-07 13:35:43
837
原创 7-94 连续因子 (20分)
一个正整数 N 的因子中可能存在若干连续的数字。例如 630 可以分解为 3×5×6×7,其中 5、6、7 就是 3 个连续的数字。给定任一正整数 N,要求编写程序求出最长连续因子的个数,并输出最小的连续因子序列。输入格式:输入在一行中给出一个正整数 N(1<N<231 )。输出格式:首先在第 1 行输出最长连续因子的个数;然后在第 2 行中按 因子1因子2……*因子...
2020-05-07 13:28:23
1181
原创 7-95 拔河比赛 (100分)
拔河比赛【问题描述】 熊出没之探险日记,讲述了夏季休林季,光头强变身成为一名导游,并与熊大熊二一起, 帮助小女孩赵琳去往森林深处找寻儿时玩伴东北虎的故事。 某一天,他们准备进行拔河比赛,森林里很多动物都想来报名参加。经过投票,他们最 终选出了光头强,赵琳,熊大,熊二,吉吉,毛毛。由于不同动物和人的力量明显是不一样 的,所以这个拔河比赛可能会很不公平。于是他们想每 3 个分成一组,并对每位选手的力...
2020-05-06 21:27:51
448
原创 PTA 7-98 海盗分赃 (25分)
P 个海盗偷了 D 颗钻石后来到公海分赃,一致同意如下分赃策略:首先,P 个海盗通过抽签决定 1 - P 的序号。然后由第 1 号海盗提出一个分配方案(方案应给出每个海盗分得的具体数量),如果能够得到包括 1 号在内的绝对多数(即大于半数)同意,则按照该分配方案执行,否则 1 号将被投入大海喂鲨鱼;而后依次类似地由第 2 号、第 3 号等等海盗提出方案,直到能够获得绝对多数同意的方案出现为止,或...
2020-05-06 19:16:53
642
2
原创 7-110 用格里高利公式求给定精度的PI值 (15分)
本题要求编写程序,计算序列部分和 4∗(1−1/3+1/5−1/7+…) ,直到最后一项的绝对值小于给定精度eps。输入格式:输入在一行中给出一个正实数eps。输出格式:在一行中按照“Pi = pi”的格式输出部分和的值pi,精确到小数点后四位。题目保证输入数据和计算结果均不超过双精度范围。输入样例1:0.0001输出样例1:Pi = 3.1418输入样例2:0.2输出样例2...
2020-05-05 21:22:52
2122
原创 7-116 十六进制数转换成相应的十进制数 (15分)
编写一个函数,输入一个十六进制整数并输出相应的十进制数。注意负整数。其中,十六进制数中的A、B、C、D、E、F分别代表十进制数中的10、11、12、13、14、15。输入格式:输入十六进制数n(不超过7位)。输出格式:输出n相应的十进制数。输入样例:AA51-FFFFF1B2输出样例:43601-6553561874感觉写的有点复杂 qwq。#include <i...
2020-05-05 21:21:01
1104
原创 7-118 敲笨钟 (20分)
微博上有个自称“大笨钟V”的家伙,每天敲钟催促码农们爱惜身体早点睡觉。为了增加敲钟的趣味性,还会糟改几句古诗词。其糟改的方法为:去网上搜寻压“ong”韵的古诗词,把句尾的三个字换成“敲笨钟”。例如唐代诗人李贺有名句曰:“寻章摘句老雕虫,晓月当帘挂玉弓”,其中“虫”(chong)和“弓”(gong)都压了“ong”韵。于是这句诗就被糟改为“寻章摘句老雕虫,晓月当帘敲笨钟”。现在给你一大堆古诗词句,...
2020-05-05 21:15:41
1100
原创 7-121 字符串数字问题 (10分)
字符串数字问题:字符A或a对应1,B或b-2,c-3,…Z或z-26,aa-27,ab-28,Ac-29…,BA-53,bb-54,…如此类推. 要求输入最多10个字母的字符串,按以上对应关系输出其对应的十进制双精度数值。输入格式:在一行中输入26个大写或小写字母构成的字符串:如ABc输出格式:输出字符串对应的十进制双精度数值,保留两位小数:如731.00输入样例1:aBc输出样例1...
2020-05-05 21:09:11
379
原创 PTA 估值一亿的AI核心代码
题目太长,这里就不再描述了qwq,呸,还是懒题目链接:L1-064 估值一亿的AI核心代码思路就是按空格分割字符串,然后再进行题目中要求的操作即可。若用文中的stringstream流的操作,巧妙的避开了删除空格的操作。重要的函数 isalnum 若非字母和数字,则返回0;#include<bits/stdc++.h>using namespace std;int mai...
2020-05-05 21:05:56
1007
3
原创 7-121 字符串数字问题 (10分)
字符串数字问题:字符A或a对应1,B或b-2,c-3,…Z或z-26,aa-27,ab-28,Ac-29…,BA-53,bb-54,…如此类推. 要求输入最多10个字母的字符串,按以上对应关系输出其对应的十进制双精度数值。输入格式:在一行中输入26个大写或小写字母构成的字符串:如ABc输出格式:输出字符串对应的十进制双精度数值,保留两位小数:如731.00输入样例1:aBc输出样例1...
2020-05-05 16:44:35
745
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人