团体程序设计天梯赛-练习集L2篇⑨

🚀欢迎来到本文🚀
🍉个人简介:Hello大家好呀,我是陈童学,一个与你一样正在慢慢前行的普通人。
🏀个人主页:@陈童学哦`CSDN
💡所属专栏:PTA
🎁希望各位→点赞👍 + 收藏⭐️ + 留言📝
​ ⛱️刷题的当下应是享受的!望与诸君共勉!🏄‍♂️

在这里插入图片描述

下面是PTA的OJ平台

PTA的OJ平台(点击我直跳)

题目汇总

  • 题解
    • L2-030 冰岛人
    • L2-031 深入虎穴
    • L2-032 彩虹瓶
  • 写在最后

题解

L2-030 冰岛人

2018年世界杯,冰岛队因1:1平了强大的阿根廷队而一战成名。好事者发现冰岛人的名字后面似乎都有个“松”(son),于是有网友科普如下:
在这里插入图片描述
冰岛人沿用的是维京人古老的父系姓制,孩子的姓等于父亲的名加后缀,如果是儿子就加 sson,女儿则加 sdottir。因为冰岛人口较少,为避免近亲繁衍,本地人交往前先用个 App 查一下两人祖宗若干代有无联系。本题就请你实现这个 App 的功能。

输入格式:
输入首先在第一行给出一个正整数 N(1<N≤10
5
),为当地人口数。随后 N 行,每行给出一个人名,格式为:名 姓(带性别后缀),两个字符串均由不超过 20 个小写的英文字母组成。维京人后裔是可以通过姓的后缀判断其性别的,其他人则是在姓的后面加 m 表示男性、f 表示女性。题目保证给出的每个维京家族的起源人都是男性。

随后一行给出正整数 M,为查询数量。随后 M 行,每行给出一对人名,格式为:名1 姓1 名2 姓2。注意:这里的姓是不带后缀的。四个字符串均由不超过 20 个小写的英文字母组成。

题目保证不存在两个人是同名的。

输出格式:
对每一个查询,根据结果在一行内显示以下信息:

若两人为异性,且五代以内无公共祖先,则输出 Yes;
若两人为异性,但五代以内(不包括第五代)有公共祖先,则输出 No;
若两人为同性,则输出 Whatever;
若有一人不在名单内,则输出 NA。
所谓“五代以内无公共祖先”是指两人的公共祖先(如果存在的话)必须比任何一方的曾祖父辈分高。

输入样例:
15
chris smithm
adam smithm
bob adamsson
jack chrissson
bill chrissson
mike jacksson
steve billsson
tim mikesson
april mikesdottir
eric stevesson
tracy timsdottir
james ericsson
patrick jacksson
robin patricksson
will robinsson
6
tracy tim james eric
will robin tracy tim
april mike steve bill
bob adam eric steve
tracy tim tracy tim
x man april mikes
输出样例:
Yes
No
No
Whatever
Whatever
NA

AC代码:

#include<bits/stdc++.h>
#define sex first
#define ne second
using namespace std;
typedef pair<bool,string> PBS;
map<string,PBS> names;
string fname,sname;bool check(string a,string b){map<string,int> ss;int cnt1 = 1;while(a.size()){ss[a] = cnt1; a = names[a].ne;cnt1++;}int cnt2 = 1;while(b.size()){if(ss.count(b)) {//两人的公共祖先(如果存在的话)必须比任何一方的曾祖父辈分高。if(ss[b] < 5 || cnt2 < 5) return false;else return true;} b = names[b].ne;cnt2++;}return true;
}int main(){int n; cin>>n;for(int i = 1; i <= n; i++){cin>>fname>>sname;char c = sname.back();if(c == 'n'){names[fname] = {1,sname.substr(0,sname.size()-4)};} else if(c == 'r'){names[fname] = {0,sname.substr(0,sname.size()-7)};} else if(c == 'm'){names[fname].first = 1;} else {names[fname].first = 0;}}int k; cin>>k;string n1,n2,tmp;while(k--) {cin>>n1>>tmp>>n2>>tmp;if(!names.count(n1) || !names.count(n2)) puts("NA");else if(names[n1].sex == names[n2].sex) puts("Whatever");else if(check(n1,n2)) puts("Yes");else puts("No");}return 0;
}

L2-031 深入虎穴

著名的王牌间谍 007 需要执行一次任务,获取敌方的机密情报。已知情报藏在一个地下迷宫里,迷宫只有一个入口,里面有很多条通路,每条路通向一扇门。每一扇门背后或者是一个房间,或者又有很多条路,同样是每条路通向一扇门…… 他的手里有一张表格,是其他间谍帮他收集到的情报,他们记下了每扇门的编号,以及这扇门背后的每一条通路所到达的门的编号。007 发现不存在两条路通向同一扇门。

内线告诉他,情报就藏在迷宫的最深处。但是这个迷宫太大了,他需要你的帮助 —— 请编程帮他找出距离入口最远的那扇门。

输入格式:
输入首先在一行中给出正整数 N(<10
5
),是门的数量。最后 N 行,第 i 行(1≤i≤N)按以下格式描述编号为 i 的那扇门背后能通向的门:

K D[1] D[2] … D[K]
其中 K 是通道的数量,其后是每扇门的编号。

输出格式:
在一行中输出距离入口最远的那扇门的编号。题目保证这样的结果是唯一的。

输入样例:
13
3 2 3 4
2 5 6
1 7
1 8
1 9
0
2 11 10
1 13
0
0
1 12
0
0
输出样例:
12

AC代码:

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
vector<int>g[N];
int res[N];
void dfs(int u,int cnt)
{res[u]=cnt;for(int i=0;i<g[u].size();i++){dfs(g[u][i],cnt+1);}
}
int main()
{int n;cin>>n;for(int i=1;i<=n;i++){int k;cin>>k;for(int j=0;j<k;j++){int x;cin>>x;res[x]=1;g[i].push_back(x);}}int h;for(int i=1;i<=n;i++){if(!res[i]){h=i;break;}}dfs(h,1);int maxn=0;int ans=0;for(int i=1;i<=n;i++){if(res[i]>maxn){maxn=res[i];ans=i;}}cout<<ans;}

L2-032 彩虹瓶

在这里插入图片描述
彩虹瓶的制作过程(并不)是这样的:先把一大批空瓶铺放在装填场地上,然后按照一定的顺序将每种颜色的小球均匀撒到这批瓶子里。

假设彩虹瓶里要按顺序装 N 种颜色的小球(不妨将顺序就编号为 1 到 N)。现在工厂里有每种颜色的小球各一箱,工人需要一箱一箱地将小球从工厂里搬到装填场地。如果搬来的这箱小球正好是可以装填的颜色,就直接拆箱装填;如果不是,就把箱子先码放在一个临时货架上,码放的方法就是一箱一箱堆上去。当一种颜色装填完以后,先看看货架顶端的一箱是不是下一个要装填的颜色,如果是就取下来装填,否则去工厂里再搬一箱过来。

如果工厂里发货的顺序比较好,工人就可以顺利地完成装填。例如要按顺序装填 7 种颜色,工厂按照 7、6、1、3、2、5、4 这个顺序发货,则工人先拿到 7、6 两种不能装填的颜色,将其按照 7 在下、6 在上的顺序堆在货架上;拿到 1 时可以直接装填;拿到 3 时又得临时码放在 6 号颜色箱上;拿到 2 时可以直接装填;随后从货架顶取下 3 进行装填;然后拿到 5,临时码放到 6 上面;最后取了 4 号颜色直接装填;剩下的工作就是顺序从货架上取下 5、6、7 依次装填。

但如果工厂按照 3、1、5、4、2、6、7 这个顺序发货,工人就必须要愤怒地折腾货架了,因为装填完 2 号颜色以后,不把货架上的多个箱子搬下来就拿不到 3 号箱,就不可能顺利完成任务。

另外,货架的容量有限,如果要堆积的货物超过容量,工人也没办法顺利完成任务。例如工厂按照 7、6、5、4、3、2、1 这个顺序发货,如果货架够高,能码放 6 只箱子,那还是可以顺利完工的;但如果货架只能码放 5 只箱子,工人就又要愤怒了……

本题就请你判断一下,工厂的发货顺序能否让工人顺利完成任务。

输入格式:
输入首先在第一行给出 3 个正整数,分别是彩虹瓶的颜色数量 N(1<N≤10
3
)、临时货架的容量 M(<N)、以及需要判断的发货顺序的数量 K。

随后 K 行,每行给出 N 个数字,是 1 到N 的一个排列,对应工厂的发货顺序。

一行中的数字都以空格分隔。

输出格式:
对每个发货顺序,如果工人可以愉快完工,就在一行中输出 YES;否则输出 NO。

输入样例:
7 5 3
7 6 1 3 2 5 4
3 1 5 4 2 6 7
7 6 5 4 3 2 1
输出样例:
YES
NO
NO

AC代码:

#include<bits/stdc++.h>
using namespace std;
int main()
{int n,m,k;cin>>n>>m>>k;for(int i=1;i<=k;i++){vector<int>v(n+2);for(int j=1;j<=n;j++)cin>>v[j];stack<int>s;int judge=1,head=1,tail=1;while(head<=n){if(tail<=n&&head==v[tail]){head++;tail++;}else if(!s.empty()&&s.top()==head){s.pop();head++;}else if(s.size()<m&&tail<=n)s.push(v[tail++]);else{judge=0;break;}}if(judge)cout<<"YES"<<endl;elsecout<<"NO"<<endl;							}}

写在最后

🍉🍉🍉不必偏执于未知的真实,身处的当下即是意义和真实,爱才是解题的答案,也是刻画人生色彩的笔尖,耐心的走下去,总会遇到你爱的人和爱你的人。

🍁🍁🍁好啦,本文的内容就到此结束啦,我们下期再见哦!另外在祝各位小伙伴们要天天开心哦!
🍂🍂🍂如果你觉得本文对你有帮助的话,还请不要吝惜您的三连哦!您的支持就是我创作的最大动力!!爱你们💕💕💕
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/798.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python用flask将视频显示在网页上

注意我们的return返回值必须是以下之一&#xff0c;否则会报错 from flask import Flask, render_template, Response import cv2app Flask(__name__)app.route(/) def index():return render_template(index.html)def gen(camera):while True:success, image camera.read(…

UE5 Motion Warping功能学习

MotionWarping&#xff08;运动扭曲&#xff09;可对角色根运动进行修改&#xff0c;从而让角色根运动动画结束时准确停在某一点&#xff0c;如图&#xff1a; 此外UE5还提供移动步幅、转向的Warping功能&#xff08;防滑步&#xff09;&#xff0c;之前写过一个简单的介绍可…

如何设计一个高并发系统?

其实所谓的高并发&#xff0c;如果你要理解这个问题呢&#xff0c;其实就得从高并发的根源出发&#xff0c;为啥会有高并 发&#xff1f;为啥高并发就很牛逼&#xff1f; 浅显一点&#xff0c;很简单&#xff0c;就是因为刚开始系统都是连接数据库的&#xff0c;但是要知道数据…

基於Hadoop HA 在kerberos中配置datax

概要 提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 概要 前言一、基於HADOOP HA 搭建datax二、基於HADOOP HA 配置好的datax去配置kerberos1.在datax的配置文件中進行配置2.在shell腳本中加入認證語句 总结 前言…

LENOVO联想笔记本拯救者Legion R7000P APH8 2023款(82Y9)原厂Windows11系统原装出厂状态预装系统

lenovo联想笔记本电脑&#xff0c;拯救者Legion R7000P APH8(2023款)(82Y9)原装出厂Windows11系统安装&#xff0c;预装系统重装镜像&#xff0c;恢复出厂状态 系统自带所有驱动、出厂主题壁纸LOGO、Office办公软件、联想电脑管家等预装程序 所需要工具&#xff1a;16G或以上…

Mysql的主从复制和读写分离

一、Mysql读写分离的相关知识 1.什么是读写分离&#xff1f; 读写分离&#xff0c;基本的原理是让主数据库处理事务性增、改、删操作( INSERT、UPDATE、DELETE) &#xff0c;而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库。 …

人体姿态估计技术的理解(Human Pose Estimination)

本人毕设题目是人体姿态估计技术的相关课题&#xff0c;本人按照自己对人体姿态估计技术的学习和理解进行论述&#xff0c;如有不足&#xff0c;请大家指正&#xff01;&#xff01;&#xff01; 首先讨论一个问题&#xff1a;什么是姿态估计? “姿势估计?……姿势这个词对…

C++基础-命名空间-缺省参数-函数重载-引用-内联-auto-范围for

C基础&#xff1a; 1. 命名空间命名空间如何定义命名空间如何使用 2.缺省参数2.1 缺省参数分类2.1.1全缺省参数2.1.2 半缺省参数 3. 函数重载4. 引用4.1 常引用4.2 引用使用场景4.2.1 做参数4.2.2 做返回值4.2.3 传值和传引用效率分析 4.3 引用和指针的区别4.4 指针和引用总结 …

ubuntu18修改源

1. 查看当前系统的源 系统的源 2. 将sources.list备份&#xff0c;sources-bak.list是备份文件 3. 选择要换的源 # 默认注释了源码镜像以提高 apt update 速度&#xff0c;如有需要可自行取消注释 deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted un…

kettle源码远程debug调试

一、kettle启动时指定debug端口号 windows下&#xff0c;修改bat执行文件&#xff0c;同理 linux修改sh执行文件 在java执行参数的末尾添加debug参数 address为debug端口 -Xdebug -Xnoagent -Djava.compilerNONE -Xrunjdwp:transportdt_socket,servery,suspendn,address9080然…

6 应用层-6.1【实验】【计算机网络】

6 应用层-6.1【实验】【计算机网络】 前言推荐6 应用层6.1 Web服务与FTP服务配置0 搭建拓扑图1 Web演示2 FTP演示6.1.1实验章节测验 最后 前言 2023-6-25 14:35:53 以下内容源自《创作模板三》 仅供学习交流使用 推荐 4端到端协议-4.3【实验】【计算机网络】 6 应用层 6.…

前端Vue自定义发送短信验证码弹框popup 实现剩余秒数计数 重发短信验证码

前端Vue自定义发送短信验证码弹框popup 实现剩余秒数计数 重发短信验证码&#xff0c; 请访问uni-app插件市场地址&#xff1a;https://ext.dcloud.net.cn/plugin?id13207 效果图如下&#xff1a; 实现代码如下: # cc-codeDialog #### 使用方法 使用方法 <!-- show:是…