![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
OJ编程题
各种Oj的练习题代码含有注释
东风街大饼工厂
这个作者很懒,什么都没留下…
展开
-
L3-003 社交集群 (30 分)(注释详解)
#include<bits/stdc++.h>using namespace std;const int N = 1e5;int f[N],a[N];int n;vector<int> ans,v[N],res;set<int> st;int find(int x){ if(x != f[x]) f[x] = find(f[x]); return f[x];}void Union(int a,int b){ int pa = find(原创 2022-04-14 19:39:48 · 599 阅读 · 0 评论 -
L2-024 部落 (25 分)(注释详解)
要做出本题需要知道怎么建一个并查集#include<bits/stdc++.h>using namespace std;const int N = 1e5; set<int> s;int f[N];bool root[N];int n;//找到父节点int find(int x){ if(x != f[x]) f[x] = find(f[x]); return f[x];}//合并int Union(int a,int b){ int pa原创 2022-04-14 19:15:07 · 489 阅读 · 0 评论 -
L2-038 病毒溯源 (25 分)注释详解
多叉树的遍历类似的题目:L2-031 深入虎穴 (25 分)#include<bits/stdc++.h>using namespace std;const int N = 1e5;vector<int> v[N],temp,ans;int fg[N];int n,root;//cur为当前节点void dfs(int cur){ if(temp.size() > ans.size()){ //如果当前序列长度大于上一次序原创 2022-03-18 11:42:40 · 562 阅读 · 2 评论 -
L2-031 深入虎穴 (25 分)注释详解
#include<bits/stdc++.h>using namespace std;const int N = 1e5+10;vector<int> v[N];int fg[N];int n,k,ans,flag,cnt,root;void dfs(int cur){ if(!v[cur].size()){//到达树的叶子节点 此时记录深度 cnt++; if(ans <= cnt){//如果这次的遍历的深度比上次路径更深就更新深度 an原创 2022-03-18 10:31:50 · 445 阅读 · 0 评论 -
L2-023 图着色问题 (25 分)注释详解
#include<bits/stdc++.h>using namespace std;const int N = 1e5;vector<int> mv[N];bool vis[N];int main(){ int v,e,k; cin>>v>>e>>k; for(int i=0;i<e;i++){ int a,b; cin>>a>>b; //记录每个节点的邻接点 //a原创 2022-03-16 21:15:46 · 515 阅读 · 0 评论 -
L2-022 重排链表 (25 分)注释详解
#include<bits/stdc++.h>using namespace std;const int N = 1e5;int first,n;struct per{ int ads; int dt; int nx;};struct per m[N];struct per lt[N];int main(){ cin>>first>>n; for(int i=1;i<=n;i++){ int ads,dt,nx;原创 2022-03-14 11:57:19 · 1644 阅读 · 0 评论 -
L2-032 彩虹瓶 (25 分)注释详解
废话一堆的题目#include<bits/stdc++.h>using namespace std;int main(){ int n,m,k,flag,cnt; cin>>n>>m>>k; for(int i=1;i<=k;i++){ flag = 1; cnt = 1; stack<int> s; for(int j=1;j<=n;j++){ int t; cin>>t; i原创 2022-03-14 10:47:47 · 314 阅读 · 0 评论 -
L2-011 玩转二叉树 (25 分)注释详解
#include<bits/stdc++.h>using namespace std;const int N = 100;struct tree{ int data; tree *l, *r;};int pre[N],in[N];//创建数tree* ct(int preL,int preR,int inL,int inR){ if(preL > preR) return NULL; tree* root = new tree; root->原创 2022-03-11 12:03:37 · 1048 阅读 · 0 评论 -
L2-033 简单计算器 (25 分)注释详解
#include<bits/stdc++.h>using namespace std;stack<int> s1;stack<char> s2;const int error = -1e5;int cal(int b,int a,char op){ if(op == '+') return a + b; if(op == '-') return a - b; if(op == '*') return a * b; if(op == '/' &原创 2022-03-05 13:48:01 · 136 阅读 · 0 评论 -
L2-034 口罩发放 (25 分)注释详解
#include<bits/stdc++.h>using namespace std;struct per { string a; string b; int t; int idx;};const int N = 1e5;vector<struct per> v[N];vector<struct per> ans;map<string,int> mp,flag;struct per p;int dd,pp;int t,s;原创 2022-03-04 17:05:59 · 358 阅读 · 0 评论 -
试题 算法训练 跳马(蓝桥杯)注释详解
#include<bits/stdc++.h>using namespace std;int x[8] = {1, 1, -2, -2, 2, 2, -1, -1};int y[8] = {2, -2, 1, -1, 1, -1, 2, -2};int vis[10][10];int aa,bb,c,d,ans = -1;void dfs(int a,int b,int step){ //剪枝 当ans不为-1时 说明已经存储了最小值 //如果当前递归中步数step还没到终原创 2022-02-12 09:50:48 · 1154 阅读 · 0 评论 -
小国王(状态压缩dp)
小国王#include<bits/stdc++.h>using namespace std;int n,k;//棋盘行数 国王总数 int cnt;//同一行的合法状态个数 int s[1<<12];//同一行的合法状态集 int num[1<<12];//每个合法状态包含的国王数 long long f[12][144][1<<12]; //f[i,j,a]表示前i行放了j个国王 第i行第a个状态时的方案数 int main(){原创 2022-02-08 19:09:05 · 400 阅读 · 0 评论 -
股票买卖最多K笔交易(线性dp)
股票买卖最多K笔交易#include<bits/stdc++.h>using namespace std;const int N = 100005; int f[N][105][2];int w[N];int main(){ int n,k; cin>>n>>k; for(int i=1;i<=n;i++) cin>>w[i]; for(int j=0;j<=2;j++) f[0][j][1] = -1e6; for原创 2022-02-07 21:16:55 · 180 阅读 · 0 评论 -
股票买卖多笔交易(线性dp)
题目#include<bits/stdc++.h>using namespace std;const int N = 100005;int w[N],f[N][2];int main(){ int n; cin>>n; for(int i=1;i<=n;i++) cin>>w[i]; f[1][0] = 0;//第1天无票 利润为0 f[1][1] = -w[1];//第1天有票 利润为买股票花的钱 for(int i=2;i&原创 2022-02-07 21:02:25 · 96 阅读 · 0 评论 -
试题 算法训练 数字游戏(蓝桥杯)注释详解
ac代码如下#include<bits/stdc++.h>using namespace std;int a[15],b[15];bool vis[15];int n,sum,flag;//判断是否符合条件 bool jg(int arr[], int num){ int temp = n; while(temp--){ for(int i=1;i<=temp;i++){ arr[i] = arr[i]+arr[i+1]; } } retur原创 2022-02-07 10:30:07 · 3678 阅读 · 0 评论 -
试题 算法训练 拿金币(蓝桥杯)注释详解
ac代码如下#include<bits/stdc++.h>using namespace std;const int N = 1005;int a[N][N],f[N][N];int main(){ int n,ans=-1; cin>>n; for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++) cin>>a[i][j]; } for(int i=1;i<=n;i++){原创 2022-02-07 09:39:14 · 778 阅读 · 0 评论 -
没有上司的舞会(典型树形dp)
Ural 大学有 N 名职员,编号为 1∼N。他们的关系就像一棵以校长为根的树,父节点就是子节点的直接上司。每个职员有一个快乐指数,用整数 Hi 给出,其中 1≤i≤N。现在要召开一场周年庆宴会,不过,没有职员愿意和直接上司一起参会。在满足这个条件的前提下,主办方希望邀请一部分职员参会,使得所有参会职员的快乐指数总和最大,求这个最大值。输入格式第一行一个整数 N。接下来 N 行,第 i 行表示 i 号职员的快乐指数 Hi。接下来 N−1 行,每行输入一对整数 L,K,表示 K 是 L 的直接原创 2022-02-05 17:01:13 · 148 阅读 · 0 评论 -
L1-059 敲笨钟 (20 分)
微博上有个自称“大笨钟V”的家伙,每天敲钟催促码农们爱惜身体早点睡觉。为了增加敲钟的趣味性,还会糟改几句古诗词。其糟改的方法为:去网上搜寻压“ong”韵的古诗词,把句尾的三个字换成“敲笨钟”。例如唐代诗人李贺有名句曰:“寻章摘句老雕虫,晓月当帘挂玉弓”,其中“虫”(chong)和“弓”(gong)都压了“ong”韵。于是这句诗就被糟改为“寻章摘句老雕虫,晓月当帘敲笨钟”。现在给你一大堆古诗词句,要求你写个程序自动将压“ong”韵的句子糟改成“敲笨钟”。输入格式:输入首先在第一行给出一个不超过 20 的原创 2021-09-23 09:33:39 · 139 阅读 · 0 评论 -
实验7-2-5 判断上三角矩阵 (15 分)
上三角矩阵指主对角线以下的元素都为0的矩阵;主对角线为从矩阵的左上角至右下角的连线。本题要求编写程序,判断一个给定的方阵是否上三角矩阵。输入格式:输入第一行给出一个正整数T,为待测矩阵的个数。接下来给出T个矩阵的信息:每个矩阵信息的第一行给出一个不超过10的正整数n。随后n行,每行给出n个整数,其间以空格分隔。输出格式:每个矩阵的判断结果占一行。如果输入的矩阵是上三角矩阵,输出“YES”,否则输出“NO”。输入样例:331 2 30 4 50 0 621 0-8 231 2原创 2021-07-21 16:46:42 · 143 阅读 · 0 评论 -
实验5-6 使用函数判断完全平方数 (10 分)
实验5-6 使用函数判断完全平方数 (10 分)本题要求实现一个判断整数是否为完全平方数的简单函数。函数接口定义:int IsSquare( int n );其中n是用户传入的参数,在长整型范围内。如果n是完全平方数,则函数IsSquare必须返回1,否则返回0。裁判测试程序样例:#include <stdio.h>#include <math.h>int IsSquare( int n );int main(){ int n; scanf原创 2021-05-04 13:27:55 · 1113 阅读 · 0 评论 -
实验4-1-11 高空坠球 (20 分)
实验4-1-11 高空坠球 (20 分)皮球从某给定高度自由落下,触地后反弹到原高度的一半,再落下,再反弹,……,如此反复。问皮球在第n次落地时,在空中一共经过多少距离?第n次反弹的高度是多少?输入格式:输入在一行中给出两个非负整数,分别是皮球的初始高度和n,均在长整型范围内。输出格式:在一行中顺序输出皮球第n次落地时在空中经过的距离、以及第n次反弹的高度,其间以一个空格分隔,保留一位小数。题目保证计算结果不超过双精度范围。输入样例:33 5输出样例:94.9 1.0#include原创 2021-04-29 21:45:06 · 145 阅读 · 0 评论 -
实验5-5 使用函数求素数和 (20 分)
实验5-5 使用函数求素数和 (20 分)本题要求实现一个判断素数的简单函数、以及利用该函数计算给定区间内素数和的函数。素数就是只能被1和自身整除的正整数。注意:1不是素数,2是素数。函数接口定义:int prime( int p );int PrimeSum( int m, int n );其中函数prime当用户传入参数p为素数时返回1,否则返回0;函数PrimeSum返回区间[m, n]内所有素数的和。题目保证用户传入的参数m≤n。裁判测试程序样例:#include <stdi原创 2021-05-04 13:16:35 · 552 阅读 · 2 评论 -
实验6-7 使用函数输出一个整数的逆序数 (20 分)
实验6-7 使用函数输出一个整数的逆序数 (20 分)本题要求实现一个求整数的逆序数的简单函数。函数接口定义:int reverse( int number );其中函数reverse须返回用户传入的整型number的逆序数。裁判测试程序样例:#include <stdio.h>int reverse( int number );int main(){ int n; scanf("%d", &n); printf("%d\n", reve原创 2021-05-04 12:44:00 · 523 阅读 · 0 评论 -
实验7-3-8 统计字符出现次数 (20 分)
实验7-3-8 统计字符出现次数 (20 分)本题要求编写程序,统计并输出某给定字符在给定字符串中出现的次数。输入格式:输入第一行给出一个以回车结束的字符串(少于80个字符);第二行输入一个字符。输出格式:programming is More fun!m在一行中输出给定字符在给定字符串中出现的次数。输入样例:2思路:用gets()函数吸收一整段字符串,因为gets()函数本身是以回车结尾的找到和指定字符串中一样的字符时,将其自加一#include<stdio.h>i原创 2021-04-29 15:02:46 · 394 阅读 · 0 评论 -
实验7-2-8 找鞍点 (20 分)
一个矩阵元素的“鞍点”是指该位置上的元素值在该行上最大、在该列上最小。本题要求编写程序,求一个给定的n阶方阵的鞍点。输入格式:输入第一行给出一个正整数n(1≤n≤6)。随后n行,每行给出n个整数,其间以空格分隔。输出格式:输出在一行中按照“行下标 列下标”(下标从0开始)的格式输出鞍点的位置。如果鞍点不存在,则输出“NONE”。题目保证给出的矩阵至多存在一个鞍点。输入样例1:41 7 4 14 8 3 61 6 1 20 7 8 9输入样例1:2 1输入样例2:21 7原创 2021-07-21 19:57:21 · 110 阅读 · 0 评论 -
实验11-1-1 英文单词排序 (25 分)
实验11-1-1 英文单词排序 (25 分)本题要求编写程序,输入若干英文单词,对这些单词按长度从小到大排序后输出。如果长度相同,按照输入的顺序不变。输入格式:输入为若干英文单词,每行一个,以#作为输入结束标志。其中英文单词总数不超过20个,英文单词为长度小于10的仅由小写英文字母组成的字符串。输出格式:输出为排序后的结果,每个单词后面都额外输出一个空格。输入样例:blueredyellowgreenpurple#输出样例:red blue green yellow purpl原创 2021-04-29 20:01:26 · 630 阅读 · 0 评论 -
实验2-2-9 计算火车运行时间 (15 分)
实验2-2-9 计算火车运行时间 (15 分)本题要求根据火车的出发时间和达到时间,编写程序计算整个旅途所用的时间。输入格式:输入在一行中给出2个4位正整数,其间以空格分隔,分别表示火车的出发时间和到达时间。每个时间的格式为2位小时数(00-23)和2位分钟数(00-59),假设出发和到达在同一天内。输出格式:在一行输出该旅途所用的时间,格式为“hh:mm”,其中hh为2位小时数、mm为2位分钟数。输入样例:1201 1530输出样例:03:29思路:HH用来记录相差的小时,mm用来原创 2021-04-29 15:27:34 · 1206 阅读 · 0 评论 -
实验4-2-5 水仙花数 (20 分)
实验4-2-5 水仙花数 (20 分)水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身。例如:153=13+53+33。 本题要求编写程序,计算所有N位水仙花数。输入格式:输入在一行中给出一个正整数N(3≤N≤7)。输出格式:按递增顺序输出所有N位水仙花数,每个数字占一行。输入样例:3输出样例:153370371407思路:写两个函数,一个函数将输入的位数最小值求出来,比如函数参数为3,求出100,,100位三位数里面最小值;另一原创 2021-04-29 22:30:15 · 396 阅读 · 0 评论 -
直线(蓝桥杯)
#include<bits/stdc++.h>using namespace std;const int N = 200000;int n;struct Line{ double k,b; bool operator < (const Line& t){ if(k != t.k) return k < t.k; return b < t.b; }}l[N];int main(){ for(int x1 = 0;x1 < 20;x1原创 2021-10-29 13:41:01 · 413 阅读 · 2 评论 -
货物摆放(十二届蓝桥杯B组C++)
#include<bits/stdc++.h>using namespace std;typedef long long ll; int main(){ ll n; cin>>n; vector<ll> d; for(ll i=1;i*i<n;i++){ if(n % i == 0){ d.push_back(i); if(n / i != i) d.push_back(n / i); } } int res = 0; for原创 2021-10-29 19:15:00 · 734 阅读 · 0 评论 -
6-10 二分查找 (20 分)
6-10 二分查找 (20 分)本题要求实现二分查找算法。函数接口定义:Position BinarySearch( List L, ElementType X );其中List结构定义如下:typedef int Position;typedef struct LNode *List;struct LNode { ElementType Data[MAXSIZE]; Position Last; /* 保存线性表中最后一个元素的位置 */};L是用户传入的一个线性表,原创 2021-07-10 00:24:33 · 123 阅读 · 0 评论 -
1018 锤子剪刀布 (20 分)
模拟大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示:现给出两人的交锋记录,请统计双方的胜、平、负次数,并且给出双方分别出什么手势的胜算最大。输入格式:输入第 1 行给出正整数 N(≤105),即双方交锋的次数。随后 N 行,每行给出一次交锋的信息,即甲、乙双方同时给出的的手势。C 代表“锤子”、J 代表“剪刀”、B 代表“布”,第 1 个字母代表甲方,第 2 个代表乙方,中间有 1 个空格。输出格式:输出第 1、2 行分别给出甲、乙的胜、平、负次数,数字间以 1 个原创 2021-10-03 15:59:38 · 57 阅读 · 0 评论 -
1095 解码PAT准考证 (25 分)
PAT 准考证号由 4 部分组成:第 1 位是级别,即 T 代表顶级;A 代表甲级;B 代表乙级;第 2~4 位是考场编号,范围从 101 到 999;第 5~10 位是考试日期,格式为年、月、日顺次各占 2 位;最后 11~13 位是考生编号,范围从 000 到 999。现给定一系列考生的准考证号和他们的成绩,请你按照要求输出各种统计信息。输入格式:输入首先在一行中给出两个正整数 N(≤104)和 M(≤100),分别为考生人数和统计要求的个数。接下来 N 行,每行给出一个考生的准考证原创 2021-10-04 18:23:13 · 45 阅读 · 0 评论 -
1015 德才论 (25 分)
宋代史学家司马光在《资治通鉴》中有一段著名的“德才论”:“是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才谓之君子,才胜德谓之小人。凡取人之术,苟不得圣人,君子而与之,与其得小人,不若得愚人。”现给出一批考生的德才分数,请根据司马光的理论给出录取排名。输入格式:输入第一行给出 3 个正整数,分别为:N(≤105),即考生总数;L(≥60),为录取最低分数线,即德分和才分均不低于 L 的考生才有资格被考虑录取;H(<100),为优先录取线——德分和才分均不低于此线的被定义为“才德全尽”,此类考生原创 2021-10-03 15:50:08 · 35 阅读 · 0 评论 -
7-2 然后是几点 (15 分)
有时候人们用四位数字表示一个时间,比如 1106 表示 11 点零 6 分。现在,你的程序要根据起始时间和流逝的时间计算出终止时间。读入两个数字,第一个数字以这样的四位数字表示当前时间,第二个数字表示分钟数,计算当前时间经过那么多分钟后是几点,结果也表示为四位数字。当小时为个位数时,没有前导的零,例如 5 点 30 分表示为 530;0 点 30 分表示为 030。注意,第二个数字表示的分钟数可能超过 60,也可能是负数。输入格式:输入在一行中给出 2 个整数,分别是四位数字表示的起始时间、以及流逝的原创 2021-07-23 10:35:00 · 111 阅读 · 0 评论 -
1017 A除以B (20 分)
高精度除法本题要求计算 A/B,其中 A 是不超过 1000 位的正整数,B 是 1 位正整数。你需要输出商数 Q 和余数 R,使得 A=B×Q+R 成立。输入格式:输入在一行中依次给出 A 和 B,中间以 1 空格分隔。输出格式:在一行中依次输出 Q 和 R,中间以 1 空格分隔。输入样例:123456789050987654321 7输出样例:17636684150141093474 3#include<bits/stdc++.h>using namespace s原创 2021-10-03 15:54:28 · 51 阅读 · 0 评论 -
《洛谷》P1605 迷宫
题目链接:https://www.luogu.com.cn/problem/P1605#include<bits/stdc++.h>using namespace std;int mp[10][10];int vis[10][10];int xx[] = {1,0,-1,0};int yy[] = {0,-1,0,1};int n,m,t,sx,sy,fx,fy,cnt;void dfs(int x,int y){ if(x == fx && y == fy原创 2021-10-17 01:51:34 · 54 阅读 · 0 评论 -
《洛谷》P1219 [USACO1.5]八皇后 Checker Challenge
题目链接:https://www.luogu.com.cn/problem/P1219#include<bits/stdc++.h>using namespace std;int n,cnt;int lie[20];//列 int u[40];//左上到右下 int v[40];//左下到右上int a[20];void pr(){ if(cnt <= 3){ for(int i=1;i<=n;i++){ printf("%d ",a[i]); } p原创 2021-10-17 01:49:40 · 76 阅读 · 0 评论 -
7-19 支票面额 (15 分)
一个采购员去银行兑换一张y元f分的支票,结果出纳员错给了f元y分。采购员用去了n分之后才发觉有错,于是清点了余额尚有2y元2f分,问该支票面额是多少?输入格式:输入在一行中给出小于100的正整数n。输出格式:在一行中按格式y.f输出该支票的原始面额。如果无解,则输出No Solution。输入样例1:23输出样例1:25.51输入样例2:22输出样例2:No Solution思路:1元等于100分,将最开始的钱全换算成分为 100f+y(出纳员给的)花了n分后还剩原创 2021-07-24 11:40:28 · 41 阅读 · 0 评论 -
《洛谷》P1706 全排列问题
题目链接:https://www.luogu.com.cn/problem/P1706#include<bits/stdc++.h>using namespace std;int n,a[20],vis[20];void pr(){ for(int i=1;i<=n;i++){ cout<<setw(5)<<a[i]; } cout<<endl;}void dfs(int x){ if(x > n){ pr()原创 2021-10-17 01:53:51 · 89 阅读 · 0 评论