信息学奥赛一本通 1395:烦人的幻灯片(slides)

【题目链接】

ybt 1395:烦人的幻灯片(slides)

【题目考点】

1. 图论:拓扑排序

【解题思路】

先理解题意:
在这里插入图片描述

如图,每张幻灯片是一个矩形,在该矩形范围内有一个位置写了这张幻灯片的编号。但实际情况是幻灯片是透明的而且可能是重叠的,编号的颜色都是相同的,一眼看上去看不出一个编号是写在哪张幻灯片上的。现在按照字母编号给出每张幻灯片矩形的位置、同时给出每个数字编号的位置,写出字母编号和数字编号的对应关系。
即给出A幻灯片上的编号是什么,B幻灯片上的编号是什么……
如果存在多种字母和编号的对应关系,或不存在可行的对应关系,都要输出None。

可以将幻灯片和数字编号都想像成顶点,如果编号X在幻灯片Y的范围内,那么顶点Y到顶点X有一条有向边。上图转为的拓扑图如图。
在这里插入图片描述

而后可以进行类似拓扑排序的操作:
先将所有入度为1的顶点入队。
每次循环出队一个顶点X,如果到达顶点X的边只有一条,是从顶点Y出发到顶点X的边,那么顶点X的入度为1,这意味着顶点X代表的编号只存在于顶点Y代表的幻灯片的范围内,因此顶点X代表的编号一定为顶点Y代表的幻灯片的编号。
而后同时把顶点X、顶点Y删掉,自然也把从Y出发的边都删掉,再看哪些顶点入度为1,将入度为1的顶点入队。
重复上述操作。
如果最后删掉的表示编号顶点的数量等于n,说明每张幻灯片都找到了与其对应的编号。
如果最后删掉的表示编号顶点的数量小于n,说明最后有一些编号不能确定到底算是哪个幻灯片的编号,编号和幻灯片有多种对应关系,或没有对应关系,应该输出None。

【题解代码】

解法1:拓扑排序
#include<bits/stdc++.h>
using namespace std;
#define N 30
struct Rect
{int xmin, xmax, ymin, ymax;bool isIn(int x, int y){return x >= xmin && x <= xmax && y >= ymin && y <= ymax;		}
} slide[N];//slide[i]:字母编号为i的幻灯片 
bool edge[N][N];//edge[i][j]:字母编号为i的幻灯片是否压着数字j 
int n, deg[N], rec[N];//rec[i]:字母编号为i的幻灯片对应的数字
int find(int u)//对于入度只有1的数字顶点u,寻找与其对应的唯一字母顶点 
{for(int k = 0; k < n; ++k)if(edge[k][u])//从字母k到数字u有边 return k; 
}
bool topoSort()//返回是否成功完成类拓扑排序(删除数字结点数量是否为n) 
{int num = 0;//成功删除的数字结点数量 queue<int> que;for(int i = 1; i <= n; ++i)//开始进行类拓扑排序,删除入度为1的数字顶点 if(deg[i] == 1)que.push(i);while(que.empty() == false){int u = que.front(), k = find(u);//字母k指向数字uque.pop();rec[k] = u;//字母k与数字u对应num++;for(int i = 1; i <= n; ++i) if(edge[k][i])//删除从字母k到数字i的边 {edge[k][i] = false;if(--deg[i] == 1)//如果数字i入度为1,则入队 que.push(i);} }return num == n;
}
int main()
{int x, y;cin >> n;for(int i = 0; i < n; ++i)cin >> slide[i].xmin >> slide[i].xmax >> slide[i].ymin >> slide[i].ymax;for(int i = 1; i <= n; ++i){cin >> x >> y;for(int j = 0; j < n; ++j) if(slide[j].isIn(x, y))//如果x,y在幻灯片字母编号j的范围内{edge[j][i] = true;//幻灯片j压着数字ideg[i]++;//数字编号i的入度增加 } }bool res = topoSort();if(res)//配对成功 {for(int i = 0; i < n; ++i)cout << char('A'+i) << ' ' << rec[i] << endl; }elsecout << "None";return 0;
}

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

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

相关文章

DB-GPT系列(三):底层大模型设置(开源模型、在线模型)

前面两篇文章分别对 DB-GPT 的总体情况进行了介绍&#xff0c;同时涵盖了镜像一键部署与源码部署这两种部署方式。 DB-GPT系列&#xff08;一&#xff09;&#xff1a;DB-GPT能帮你做什么&#xff1f; DB-GPT系列&#xff08;二&#xff09;&#xff1a;DB-GPT部署&#xff0…

有没有想过Java和其他编程语言集成使用,快来了解一下!!!

Java 与其他编程语言的集成可以通过多种方式进行&#xff0c;每种方法都有其特定的适用场景和优缺点。以下是几种常见的集成方法&#xff0c;包括详细的示例和解释&#xff1a; 1. JNI (Java Native Interface) 简介 JNI 是 Java 平台提供的一个标准接口&#xff0c;允许 Ja…

LabVIEW配电产品精度测试系统

开发了一种基于LabVIEW平台的配电产品精度测试系统&#xff0c;通过自动化测试流程实现更高的测试准确性与效率。系统采用串口和TCP通信技术&#xff0c;与多功能交流采样变送器和配电设备无缝数据交互&#xff0c;提升了测试工作的可靠性和一致性。 一、项目背景 在配电产品…

如何在 Ubuntu 16.04 上使用 UFW 设置防火墙

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 简介 UFW&#xff08;Uncomplicated Firewall&#xff09;是一个面向简化配置防火墙过程的 iptables 接口。虽然 iptables 是一个稳定且…

印刷质量检测笔记

一、印刷质量检测的背景与挑战 印刷品的质量检测&#xff0c;特别是针对高精度要求的印刷产品&#xff0c;如包装材料、标签、书籍封面等&#xff0c;一直是制造业中的一个关键环节。印刷品可能存在的质量问题多种多样&#xff0c;包括但不限于颜色偏差、文字模糊、漏印、多印…

详解Java之Spring MVC篇二

目录 获取Cookie/Session 理解Cookie 理解Session Cookie和Session的区别 获取Cookie 获取Session 获取Header 获取User-Agent 获取Cookie/Session 理解Cookie HTTP协议自身是“无状态”协议&#xff0c;但是在实际开发中&#xff0c;我们很多时候是需要知道请求之间的…

【大数据学习 | kafka】kafka的偏移量管理

1. 偏移量的概念 消费者在消费数据的时候需要将消费的记录存储到一个位置&#xff0c;防止因为消费者程序宕机而引起断点消费数据丢失问题&#xff0c;下一次可以按照相应的位置从kafka中找寻数据&#xff0c;这个消费位置记录称之为偏移量offset。 kafka0.9以前版本将偏移量信…

RabbitMQ 管理平台(控制中心)的介绍

文章目录 一、RabbitMQ 管理平台整体介绍二、Overview 总览三、Connections 连接四、Channels 通道五、Exchanges 交换机六、Queues 队列查看队列详细信息查看队列的消息内容 七、Admin 用户给用户分配虚拟主机 一、RabbitMQ 管理平台整体介绍 RabbitMQ 管理平台内有六个模块&…

推荐一款强大的图像处理软件:Adobe Photoshop2025

AdobePhotoShop赛博日落版是一款强大的图像处理软件&#xff0c;专为用户提供多种先进的图像编辑功能。该版本包含了最新的AI移除工具、AI查找干扰功能以及Neural Filters神经滤镜插件&#xff0c;旨在提升用户的创作效率和成品效果。 主要功能 - AI创意填充&#xff1a;该功能…

PC模块静电放电测试中的宕机黑屏

静电放电(ESD)是电子设备中常见且难以避免的干扰源之一,尤其是在复杂的电子系统中,它对系统的稳定性和可靠性影响极大。近期,在进行静电放电(6KV接触放电、15KV空气放电)测试时,某P C模块在多个端子(如USB、RJ45、HDMI及耳机端子)遭遇了显示黑屏、图像异常及系统宕机…

吴恩达深度学习笔记:卷积神经网络(Foundations of Convolutional Neural Networks)4.7-4.8

目录 第四门课 卷积神经网络&#xff08;Convolutional Neural Networks&#xff09;第四周 特殊应用&#xff1a;人脸识别和神经风格转换&#xff08;Special applications: Face recognition &Neural style transfer&#xff09;4.7 深度卷积网络学习什么&#xff1f;&am…

适用于个人或团队的文档管理和知识库系统,NAS快速部署『BookStack』

适用于个人或团队的文档管理和知识库系统&#xff0c;NAS快速部署『BookStack』 哈喽小伙伴们好&#xff0c;我是Stark-C~ 知识库对于很多需要和文字打交道的个人或者团队都不陌生对吧&#xff1f;对于我们个人来说&#xff0c;它可以将常用的学习资料、工作笔记、项目计划和…

#渗透测试#SRC漏洞挖掘#XSS跨站脚本介绍02绕过

免责声明 本教程仅为合法的教学目的而准备&#xff0c;严禁用于任何形式的违法犯罪活动及其他商业行为&#xff0c;在使用本教程前&#xff0c;您应确保该行为符合当地的法律法规&#xff0c;继续阅读即表示您需自行承担所有操作的后果&#xff0c;如有异议&#xff0c;请立即停…

封装axios、环境变量、api解耦、解决跨域、全局组件注入

官网&#xff1a;Axios中文文档 | Axios中文网 安装&#xff1a;npm install axios axios封装&#xff1a; // 1. 引入axios import axios from "axios"; import storage from /utils/storage // 2. 创建axios实例 const instance axios.create({baseURL: proces…

并发编程的基础:深入理解内存屏障(Memory Barriers)

内存屏障是一种基础语言&#xff0c;在不同的计算机架构下有不同的实现细节。本文主要在x86_64处理器下&#xff0c;通过Linux及其内核代码来分析和使用内存屏障 对大多数应用层开发者来说&#xff0c;“内存屏障”&#xff08;memory Barrier&#xff09;是一种陌生&#xff…

Windows转Mac过渡指南

最近由于工作原因开始使用mac电脑&#xff0c;说实话刚拿到手的时候&#xff0c;window党表示真的用不惯。坚持用一下午之后&#xff0c;发现真的yyds&#xff0c;这篇文章说说mac电脑的基本入门指南。 1. 不会使用mac的触摸板&#xff0c;接上鼠标发现滚轮和windows是反的。 …

poi excel数据统计导出

##poi excel导出案例 1.ajxa导出请求没有任何反应&#xff0c;打断点看了workBook中也有数据&#xff0c;网上查阅说ajax请求导出无法接收流&#xff0c;换成location.href,果然可以了 2.控制器代码 response.setCharacterEncoding("UTF-8");response.setContentTyp…

昆仑通态触摸屏-如何完成几个窗口的切换

一、启动窗口 想要哪一个窗口是启动时第一个显示的&#xff0c;就把谁设置为启动窗口就可以。 二、公共窗口 给一个窗口命名为公共窗口 然后选择一个窗口&#xff0c;将他的公共窗口设置为我们刚才命名的那个窗口 三、页面切换 页面切换&#xff0c;是通过在公共窗口内设置按…

golang 实现比特币内核:处理椭圆曲线中的天文数字

在比特币密码学中&#xff0c;我们需要处理天文数字&#xff0c;这个数字是如此巨大&#xff0c;以至于它很容易超出我们宇宙中原子的总数&#xff0c;也许 64 位的值不足以表示这个数字&#xff0c;而像加、乘、幂这样的操作如果使用 64 位整数会导致溢出&#xff0c;因此我们…

dns服务器配置

主服务器 1.挂载点 mount /dev/sr0 /mnt 2.防火墙关闭 systemctl stop firewalld setenforce 0 3.下载bind软件 dnf install bind -y 4.进行正向解析配置 vim /etc/named.conf options { listen-on port 53 { 192.168.92.128; }; directo…