7-1 单身狗(PTA - 数据结构)

 由于这道题在留的作业中,排序和查找都有,所以我先写这道题(图的先放放)


“单身狗”是中文对于单身人士的一种爱称。本题请你从上万人的大型派对中找出落单的客人,以便给予特殊关爱。

输入格式:

输入第一行给出一个正整数 N(≤50000),是已知夫妻/伴侣的对数;随后 N 行,每行给出一对夫妻/伴侣——为方便起见,每人对应一个 ID 号,为 5 位数字(从 00000 到 99999),ID 间以空格分隔;之后给出一个正整数 M(≤10000),为参加派对的总人数;随后一行给出这 M 位客人的 ID,以空格分隔。题目保证无人重婚或脚踩两条船。

输出格式:

首先第一行输出落单客人的总人数;随后第二行按 ID 递增顺序列出落单的客人。ID 间用 1 个空格分隔,行的首尾不得有多余空格。

输入样例:

3
11111 22222
33333 44444
55555 66666
7
55555 44444 10000 88888 22222 11111 23333

输出样例:

5
10000 23333 44444 55555 88888

代码长度限制        16 KB

时间限制                200 ms

内存限制                64 MB


 提交结果:


思路分析: 

        要找,要排,限制了时间。

        排序的话,这里使用了快速排序算法(真的很快!),其他有人用的堆排序,可以去尝试一下。找就得自己想办法找了。

如何输入:

        题目中给的是一对一对的,所以这里考虑要整个结构体去存:

typedef struct {int his_couple;    //他的对象int BOrS;          //对象比他大还是小,小的话是-1,大的话是1int yeah;          //有对象,1为有,0为无,2为查找的时候已经找到过他对象了
}Couple;

         下标当作id来存一个人的信息。

如何查找(顺便找到单身人数):

        先排序一下输入的人的id,小的在前面。然后开始遍历来的人,也就是数组man。如果一个人在couple中的yeah值为1,而且BOrS(big or small)为1,那么就去往后找他的对象来没来,没来就进入单身行列,来了就不是。如果BOrS为-1(因为是从前往后,从小往大id找对象的,他要是被找过,那只能说他对象比他小,且yeah已经被置为了2),那么检查他的yeah,yeah不是2就进入单身行列。其余yeah都是0,那只能也进入单身行列。

int Search(Couple c[],int man[], int nums,int single[]){int flag = 0;for (int i = 0;i<nums;i++) {if (c[man[i]].yeah == 1) {if (c[man[i]].BOrS == 1) {int judge = 0;for (int j = i + 1; j < nums; ++j) {if (c[man[j]].his_couple == man[i]) {   //有他伴侣c[man[j]].yeah = 2;         //已经检查过了judge = 1;break;}}if(judge == 0)single[flag++] = man[i];}if ((c[man[i]].BOrS == -1)&&(c[man[i]].yeah != 2)) {single[flag++] = man[i];}}else if(c[man[i]].yeah == 2) {continue;}else {single[flag++] = man[i];}}return flag;
}
输出打印:

        因为man已经排好序了,所以得到的single数组也应当是有序的,所以直接打印就行,然后注意一下空格和0补位。之前写过补位代码,直接拿过来。space处理空格问题(具体见主函数传参)。

void Print(int id,int space){if(id == -1)return;if(id>=10000)printf("%d",id);else if(id >= 1000)printf("0%d",id);else if(id >= 100)printf("00%d",id);else if(id >= 10){printf("000%d",id);}else if(id >= 0){printf("0000%d",id);}if(space == 1)printf(" ");
}
注意: 

        一定要初始化结构体数组!!!


代码展示: 

//
// Created by DDD on 2023/12/19.
//
#include <stdio.h>
#include <malloc.h>
#define MAX 100000typedef struct {int his_couple;int BOrS;int yeah;
}Couple;void QuickSort(int array[], int low, int high) {    //快排int i = low;int j = high;if(i >= j) {return;}int temp = array[low];while(i != j) {while(array[j] >= temp && i < j) {j--;}while(array[i] <= temp && i < j) {i++;}if(i < j) {int t = array[j];array[j] = array[i];array[i] = t;}}int t = array[low];array[low] = array[i];array[i] = t;QuickSort(array, low, i - 1);QuickSort(array, i + 1, high);
}int Search(Couple c[],int man[], int nums,int single[]){int flag = 0;for (int i = 0;i<nums;i++) {if (c[man[i]].yeah == 1) {if (c[man[i]].BOrS == 1) {int judge = 0;for (int j = i + 1; j < nums; ++j) {if (c[man[j]].his_couple == man[i]) {   //有他伴侣c[man[j]].yeah = 2;         //已经检查过了judge = 1;break;}}if(judge == 0)single[flag++] = man[i];}if ((c[man[i]].BOrS == -1)&&(c[man[i]].yeah != 2)) {single[flag++] = man[i];}}else if(c[man[i]].yeah == 2) {continue;}else {single[flag++] = man[i];}}return flag;
}void Print(int id,int space){if(id == -1)return;if(id>=10000)printf("%d",id);else if(id >= 1000)printf("0%d",id);else if(id >= 100)printf("00%d",id);else if(id >= 10){printf("000%d",id);}else if(id >= 0){printf("0000%d",id);}if(space == 1)printf(" ");
}int main(){int n;scanf("%d",&n);Couple c[MAX]={0};for (int i = 0; i < n; ++i) {int x, y;scanf("%d %d",&x,&y);c[x].his_couple = y;c[y].his_couple = x;c[x].yeah = 1;c[y].yeah = 1;          //有伴侣if(x>y){c[x].BOrS = -1;     //他的伴侣比他小c[y].BOrS = 1;}else{c[x].BOrS = 1;c[y].BOrS = -1;}}int m;scanf("%d",&m);int man[m];for (int i = 0; i < m; ++i) {scanf("%d",&man[i]);}int single[m];QuickSort(man,0,m-1);if(n!=0) {int flag = Search(c, man, m, single);printf("%d\n", flag);for (int i = 0; i < flag; ++i) {if (i < flag - 1)Print(single[i],1);else {Print(single[i],0);}}}else{printf("%d\n",m);for (int i = 0; i < m; ++i) {if (i < m - 1)Print(man[i],1);else {Print(man[i],0);}}}
}

return 0;//祝大家早日离开single,把自己的yeah置为1!!

(很有意义的一道题)

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

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

相关文章

域架构下的功能安全思考

来源&#xff1a;联合电子 随着整车电子电气架构的发展&#xff0c;功能域控架构向整车集中式区域控制演进。新的区域控制架构下&#xff0c;车身控制模块(BCM)&#xff0c;整车控制单元&#xff08;VCU&#xff09;&#xff0c;热管理系统&#xff08;TMS&#xff09;和动力底…

python实现贪吃蛇游戏

文章目录 1、项目说明2、项目预览3、开发必备4、贪吃蛇代码实现4.1、窗口和基本参数实现4.2、绘制背景4.3、绘制墙壁4.4、绘制贪吃蛇4.5、绘制食物4.6、实现长度信息显示4.7、定义游戏暂停界面4.8、定义贪吃蛇死亡界面4.9、实现贪吃蛇碰撞效果4.10、实现添加食物功能4.11、实现…

elementui中的el-table,当使用fixed属性时,table主体会遮挡住滚动条的大半部分,导致很难选中。

情况&#xff1a; 解决&#xff1a; el-table加个类&#xff0c;这里取为class"table" 然后是样式部分&#xff1a; <style scoped lang"scss"> ::v-deep.table {// 滚动条高度调整::-webkit-scrollbar {height: 15px;}// pointer-events 的基本信…

处理HTTP响应状态码和错误处理

在Web开发的世界里&#xff0c;HTTP响应状态码和错误处理是不可或缺的一部分。它们就像是道路上的交通信号灯&#xff0c;指导着我们前进的方向&#xff0c;确保我们的应用程序能够正常运行。 HTTP响应状态码是Web服务器返回给客户端的数字代码&#xff0c;用于表示请求的处理…

以编程方式向 App 设计工具添加 UI 组件

App 设计工具组件库中提供了大多数 UI 组件&#xff0c;可以将它们拖放到画布上。有时&#xff0c;可能需要在代码视图中以编程方式添加组件。以下是一些常见情况&#xff1a; 创建在组件库中未提供的组件。例如&#xff0c;用于显示某对话框的 App 必须调用适当的函数来显示该…

Volta简单介绍

Volta是一款强大的JavaScript工具管理器&#xff0c;它简化了命令行工具的安装和管理。通过Volta&#xff0c;开发者可以轻松地在多个项目中切换和配置Node.js、npm以及其它JavaScript工具版本&#xff0c;提高开发效率和环境一致性。 什么是 Volta Volta 是一种管理 JavaScri…

数据之门:使用IPIDEA开启网络自由之旅~

本文目录 前言一、网络代理IP简介二、IPIDEA 优势2.1 多种类型IP代理2.2 海量纯净代理池2.3 稳定高效数据收集架构2.4 个人IP管理中心 三、IP代理实操小Tips3.1 查看本地网络IP3.2 使用浏览器IP代理3.3 使用IPIDEA进行爬虫实操 四、总结 前言 各位友友&#xff0c;大家好&…

ASP.NET MVC+EntityFramework图片头像上传

1&#xff0c;先展示一下整体的效果 2&#xff0c;接下来展示用户添加以及上传头像代码、添加用户界面 前端代码如下&#xff1a; <div class"form-group">Html.LabelFor(model > model.img, "头像&#xff1a;", htmlAttributes: new { class &…

【计算机组成与体系结构Ⅱ】多处理器部分讨论题目

多处理机课堂讨论 1.并行计算体系结构有哪些? SIMD、MIMD 2.多处理机的存储结构有哪些? 对称式共享存储器结构、分布式共享存储结构 3.什么是多处理机的一致性? 如果对某个数据项的任何读操作均可得到其最新写入的值&#xff0c;则认为这个存储系统是一致的。 4.监听协议的工…

UCloud + 宝塔 + PHP = 个人网站

UCloud 宝塔 PHP 个人网站 文章目录 1.概要2.UCloud使用教程&#xff08;租用云端服务器&#xff09;3.宝塔使用教程&#xff08;免费服务器运维面板&#xff09;4.总结 1.概要 今天主要是想教大家如何将在网络上白嫖到源码&#xff08;特指PHP源码!!!&#xff09;搭建运行…

uni-app 用于开发H5项目展示饼图,使用ucharts 饼图示例

先下载ucharts H5示例源码&#xff1a; uCharts: 高性能跨平台图表库&#xff0c;支持H5、APP、小程序&#xff08;微信小程序、支付宝小程序、钉钉小程序、百度小程序、头条小程序、QQ小程序、快手小程序、360小程序&#xff09;、Vue、Taro等更多支持canvas的框架平台&#…

使用bs4 分析html文件

首先需要 pip install beautifulsoup4安装 然后为了方便学习此插件&#xff0c;随便打开一个网页&#xff0c;然后鼠标右键&#xff0c;打开源网页&#xff0c;如下图片 这样就可以获得一个网页源码&#xff0c;全选复制粘贴到本地&#xff0c;存储为 .html 文件&#xff0c;…

WebLangChain_ChatGLM:结合 WebLangChain 和 ChatGLM3 的中文 RAG 系统

WebLangChain_ChatGLM 介绍 本文将详细介绍基于网络检索信息的检索增强生成系统&#xff0c;即 WebLangChain。通过整合 LangChain&#xff0c;成功将大型语言模型与最受欢迎的外部知识库之一——互联网紧密结合。鉴于中文社区中大型语言模型的蓬勃发展&#xff0c;有许多可供利…

自封组件-带边框的渐变色数据卡片

<template> <el-row :gutter"10"><el-col :span"8"><div class"dplay_green"><div class"dplay_num_green">{{ jhdl }}</div><div class"dplay_text_green">提示文字</div>…

计算机网络——数据链路层-可靠传输的实现机制:选择重传协议SR(介绍、工作原理、窗口尺寸、题目练习)

目录 选择重传协议SR 介绍 工作原理 窗口尺寸 练习 题目 答案 解析 示意图 选择重传协议SR 介绍 在上篇中&#xff0c;我们介绍了回退N帧协议。回退N帧协议的接收窗口尺寸只能等于一&#xff0c;因此接收方只能按序接收正确到达的数据分组&#xff1b;一个数据分组…

宣布推出 ML.NET 3.0

作者&#xff1a;Jeff Handley 排版&#xff1a;Alan Wang ML.NET 是面向 .NET 开发人员的开源、跨平台的机器学习框架&#xff0c;可将自定义机器学习模型集成到 .NET 应用程序中。ML.NET 3.0 版本现已发布&#xff0c;其中包含大量新功能和增强功能&#xff01; 此版本中的深…

零刻EQ12 N100 双2.5G网口 All In One新手教程

零刻EQ12 N100 双2.5G网口 All In One新手教程 前言1.硬件配置2.准备工作2.1. ESXI8.0U2镜像2.2. Rufus磁盘工具下载2.3. ikuai镜像下载2.4. StarWindConverter虚拟磁盘格式转换工具下载2.5. OpenWrt镜像下载2.6. 黑群晖RR引导镜像下载(DSM7.2)2.7. 需要准备的硬件2.8. 格式化需…

kafka offset sasl加密连接

kafka-tool&#xff08;offset&#xff09; 进行SCRAM连接&#xff0c;直接上图 填写jaas的认证&#xff08;账密 引用包&#xff09;

图片曝光修正方法(直方图均衡和CNN)

图像过曝或曝光不足时需要曝光处理&#xff0c; 这里以曝光不足举例。 直方图均衡法&#xff1a; 通过RGB通道的直方图均衡达到处理曝光不足的效果。 代码&#xff1a; underexpose cv2.imread("exposure_test.jpg") #underexpose cv2.cvtColor(underexpose, cv2…

Android WorkManager入门(一)

WorkManager入门 前言一、WorkManager是什么&#xff1f;二、使用1.添加依赖2.定义工作3.创建 WorkRequest并提交 一次性的任务&#xff08;OneTimeWorkRequest&#xff09;4.setExpedited 加急方法5. setInitialDelay 延时任务6.约束 总结参考资料 前言 在当今快节奏的生活中…