信息学奥赛一本通 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.xdnf.cn/news/5044.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot框架学习总结 及 整合 JDBC Mybatis-plus JPA Redis 我的学习笔记

SpringBoot框架学习总结 及 整合 JDBC Mybatis-plus JPA Redis 我的学习笔记 一、SpringBoot概述二、创建SpringBoot程序1. 使用maven方式创构建2. 使用Spring Initializr构建3. SpringBoot热部署4. SpringBoot的跨域处理 三、基础配置1.配置文件的作用2.配置文件格式2.yaml3.S…

真题--数组循环题目

1.逆序数表达数组2.用数组表示费波纳希数列3.用数组排序4.二维数组转置5.找到二维数组其中的最大数值6.输出字符数组7.字符数组输出菱形图案8.输入一行字符&#xff0c;统计有多少单词9.有三个字符串&#xff0c;找到最大字符串 1.逆序数表达数组 #include<stdio.h> int…

精美的Python Rich

今天给大家推荐一个非常精美的终端工具 - Python Rich Rich 是一个专为 Python 开发者打造的终端美化库&#xff0c;能让你的控制台输出内容更具视觉效果&#xff01;通过简单易用的 Rich API&#xff0c;可以快速为终端文本添加颜色和样式&#xff0c;让原本单调的输出变得丰…

【react框架之dvajs】dva数据流你可能还不知道的subscriptions隐藏的秘密

Subscriptions 是一种从 源 获取数据的方法&#xff0c;它来自于 elm。 语义是订阅&#xff0c;用于订阅一个数据源&#xff0c;然后根据条件 dispatch 需要的 action。数据源可以是当前的时间、服务器的 websocket连接、keyboard 输入、geolocation 变化、history 路由变化等等…

基于单片机的燃气报警阀门系统

本设计基于单片机的燃气报警阀门系统&#xff0c;燃气报警阀门系统采用STM32主控制器为核心芯片&#xff0c;外围电路由燃气传感器、OLED液晶显示模块、按键模块、蜂鸣器报警模块、电磁阀以及SIM800模块等模块组成。燃气传感器模块负责采集燃气浓度数据&#xff0c;采集完成由S…

python怎么去掉换行符

换行符与其他字符并没有区别&#xff0c;由于换行符总是最后一个字符&#xff0c;所以直接选择除去最后一个字符的所有字符即可。 x abc\n x[:-1] 也可以使用字符串的strip()方法 但是strip()方法除了会去掉换行符&#xff0c;还会去掉空格等其他字符。 x.strip()

Webserver(4.4)多进程/多线程实现并发服务器

目录 多进程实现并发服务器多线程实现并发服务器TCP状态转换 多进程实现并发服务器 要实现TCP服务器处理并发的任务&#xff0c;使用多线程或者多进程来解决 一个父进程&#xff0c;多个子进程 父进程负责等待并接受客户端的连接 子进程&#xff1a;完成通信&#xff0c;接收一…

Pinterest会成为亚马逊的新流量入口吗?

Pinterest 作为一个以图片分享为主的社交媒体平台&#xff0c;全球月活跃用户约为 4.368亿。同时&#xff0c;Pinterest 的用户群体以女性为主&#xff0c;占比高达 70% 以上&#xff0c;且多数是 18 岁到 44 岁之间的中高收入人群&#xff0c;具有较强的购买力和消费能力。对于…

SpeechT5 模型

微软开源的 SpeechT5 语音模型&#xff0c;主要包括以下功能 语音转文字&#xff1a;用于自动语音识别&#xff08;ASR&#xff09;。文字转语音&#xff1a;用于合成音频&#xff08;TTS&#xff09;。语音转语音&#xff1a;用于不同声音之间的转换或进行语音增强。 T5 网络…

.NET 8 中 Entity Framework Core 的使用

本文代码&#xff1a;https://download.csdn.net/download/hefeng_aspnet/89935738 概述 Entity Framework Core (EF Core) 已成为 .NET 开发中数据访问的基石工具&#xff0c;为开发人员提供了强大而多功能的解决方案。随着 .NET 8 和 C# 10 中引入的改进&#xff0c;开发人…

我要精通前端-块级元素和行内元素再度深入学习笔记

真的发现前端天天增删改查&#xff0c;真的是问一些比较细节的知识&#xff0c;我真的懂么 1、块级元素间的margin会重叠&#xff0c; <div class"head"></div> <div class"content"></div>.head {margin: 5px;border: 10px sol…

sparkSQL的UDF,最常用的regeister方式自定义函数和udf注册方式定义UDF函数 (详细讲解)

- UDF&#xff1a;一对一的函数【User Defined Functions】 - substr、split、concat、instr、length、from_unixtime - UDAF&#xff1a;多对一的函数【User Defined Aggregation Functions】 聚合函数 - count、sum、max、min、avg、collect_set/list - UDTF&#xff1a;…

[SAP ABAP] 面向对象程序设计-类和对象

面向对象开发的特点&#xff1a;封装、继承和多态 什么是类和对象&#xff1f; 类(CLASS)是创建对象的模板&#xff0c;对象(OBJECT)是类的实例 一个类可以创建多个对象 类 > 类型 对象 > 个体 在ABAP语言中&#xff0c;定义一个类&#xff0c;需要包含定义(defin…

需求不明确时如何设计测试用例?

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 1、与产品澄清问题 需求不明确时&#xff0c;首先&#xff0c;应弄明白&#xff0c;需求有哪些模块及功能算法不明确&#xff1f; 需求有问题找相关负责人沟通…

C++:多态中的虚/纯虚函数,抽象类以及虚函数表

我们在平时&#xff0c;旅游或者是坐高铁或火车的时候。对学生票&#xff0c;军人票&#xff0c;普通票这些概念多少都有些许耳闻。而我们上篇文章也介绍过了继承与多继承。如果这些票我们都分别的去写一个类&#xff0c;当然很冗余&#xff0c;这里我们便可以去使用继承&#…

Sun Solaris开机自启配置

Sun Solaris 开机自启配置 1. 运行级别定义&#xff08;rc0.d — rcS.d&#xff09; Linux/Solaris系统启动相关目录、脚本说明&#xff1a; init: 系统启动超级进程inittab: 进程启动配置init.d: 启动脚本存放目录rc0---rc6: 运行级别目录rcS: 单用户模式启动脚本 Linux/S…

机器学习—例子:图像识别

在上篇文章中&#xff0c;在一个需求预测示例中看到了神经网络是如何工作的&#xff0c;那么如何将类似类型的想法应用于计算机视觉应用程序。 如果你正在开发人脸识别应用程序&#xff0c;让我们深入研究一下。假设一个神经网络将这样的图片作为输入&#xff0c;并输出图片中…

微服务系列五:避免雪崩问题的限流、隔离、熔断措施

目录 实验环境说明 前言 一、一片小雪花引起的雪崩&#xff01; 1.1 雪崩问题&#xff08;级联失败问题&#xff09;示意图 1.2 雪崩问题的产生原因与解决策略 二、雪崩问题的具体解决策略 2.1 请求限流 2.2 线程隔离 2.3 服务熔断 2.4 总结——具体解决策略 三、微…

C语言之写一个修改数组内容的函数

问题代码: 函数ltrim是为了消除buf字符数组中左边空格&#xff0c; memmove函数介绍 如果对c语言指针运用非常熟练的人,结合函数功能就会发现这个代码非常的傻逼&#xff0c;你会发现为什么需要返回&#xff0c;buf不用接收返回值&#xff0c;执行这个函数后buf中的内容就已经…

第二十七章 Vue异步更新之$nextTick

目录 一、概述 二、完整代码 2.1. main.js 2.2. App.vue 一、概述 需求&#xff1a;编辑标题, 弹出显示编辑框自动聚焦 1. 点击编辑&#xff0c;显示编辑框 2. 让编辑框&#xff0c;立刻获取焦点 我们常规的思路可能会编写如下代码来实现&#xff1a; 问题&#xff1a…