正方形(Squares, ACM/ICPC World Finals 1990, UVa201)rust解法

news2024/11/16 4:18:08

有n行n列(2≤n≤9)的小黑点,还有m条线段连接其中的一些黑点。统计这些线段连成了多少个正方形(每种边长分别统计)。
行从上到下编号为1~n,列从左到右编号为1~n。边用H i j和V i j表示,分别代表边
(i,j)-(i,j+1)和(i,j)-(i+1,j)。如图4-5所示最左边的线段用V 1 1表示。图中包含两个边长为1的正方形和一个边长为2的正方形。
在这里插入图片描述

样例

4 
16
H 1 1
H 1 3
H 2 1
H 2 2
H 2 3
H 3 2
H 4 2
H 4 3
V 1 1
V 1 2
V 1 4
V 2 2
V 2 3
V 2 4
V 3 2
V 3 4
2 squre of len 1
1 squre of len 2

分析:
把所有边存到集合里。
对每一种正方形长度,遍历所有点,看集合里是否包含构成正方形的所有边。

解法:

use std::{io, collections::HashSet};

fn main() {
    let mut buf = String::new();
    io::stdin().read_line(&mut buf).unwrap();
    let n: u32 = buf.trim().parse().unwrap();
    let mut buf = String::new();
    io::stdin().read_line(&mut buf).unwrap();
    let m: u32 = buf.trim().parse().unwrap();

    let mut bian= HashSet::new();
    for _i in 0..m {
        let mut buf = String::new();
        io::stdin().read_line(&mut buf).unwrap();
        let mut it = buf.split_whitespace();
        let t = it.next().unwrap().chars().nth(0).unwrap();
        let x: u32 = it.next().unwrap().parse().unwrap();
        let y: u32 = it.next().unwrap().parse().unwrap();
        bian.insert((t, x, y));
    }
    //println!("{:?}", bian);
    for len in 1..n {
        let mut cnt = 0;
        for i in 1..=n-len{
            'foo: for j in 1..=n-len{
                //println!("len: {}, i,j: {},{}", len, i, j);
                for step in 0..len {
                    let one = ('H', i, j + step);
                    if !bian.contains(&one) {
                        //println!("{:?}", one);
                        continue 'foo;
                    }
                    let one = ('H', i + len, j + step);
                    if !bian.contains(&one) {
                        //println!("{:?}", one);
                        continue 'foo;
                    }
                    let one = ('V', i + step, j);
                    if !bian.contains(&one) {
                        //println!("{:?}", one);
                        continue 'foo;
                    }
                    let one = ('V', i + step, j + len);
                    if !bian.contains(&one) {
                        //println!("{:?}", one);
                        continue 'foo;
                    }
                }
                cnt += 1;
            }
        }
        if cnt > 0 {
            println!("{} squre of len {}", cnt, len);
        }
    }
}

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

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

相关文章

软设上午题错题知识点5

软设上午题错题知识点5 1、在ASP的内置对象中。能修改cookie中的值的是response,它还可以创建cookie,而request可以访问cookie中的参数。 2、抽象工厂(AbstractFactory)模式提供一个创建一系列相关或相互依赖对象的接口&#xf…

JUC并发编程——JMM详解(基于狂神说得到学习笔记)

JMM 什么是JMM (Java Memory Model) 参考文献JMM概述-CSDN博客 内存模型可以理解为在特定的操作协议下,对特定的内存或者高速缓存进行读写访问的过程抽象描述,不同架构下的物理机拥有不一样的内存模型,Java虚拟机是一个实现了跨平台的虚拟系…

基于springboot的高校科研管理系统(源码+调试+LW)

项目描述 临近学期结束,还是毕业设计,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据你想解决的问题,今天给…

JavaEE初阶学习:Servlet

1.Servlet 是什么 Servlet 是一种 Java 程序,用于在 Web 服务器上处理客户端请求和响应。Servlet 可以接收来自客户端(浏览器、移动应用等)的 HTTP 请求,并生成 HTML 页面或其他格式的数据,然后将响应发送回客户端。S…

AT6558--北斗定位芯片 一款高性能 BDS/GNSS 多模卫星导航接收机 SOC 单芯片

一、AT6558的由来: AT6558 是一款高性能 BDS/GNSS 多模卫星导航接收机 SOC 单芯片,采用 55nm CMOS工艺,片上集成射频前端,数字基带处理器,32位的 RISC CPU,电源管理功能。AT6558可以达到同类产品的顶级性能…

微信小程序怎么实现扫码一键连WiFi功能

微信小程序如何实现扫码一键连接WiFi功能 一、引言 在互联网时代,WiFi已经成为了人们生活中不可或缺的一部分。在公共场所或者朋友家,我们经常需要连接WiFi以获得更高速的网络体验。然而,传统的方式需要输入冗长的密码,十分麻烦…

[开源]MIT开源协议,基于Vue3.x可视化拖拽编辑,页面生成工具

一、开源项目简介 AS-Editor 基于 Vue3.x 可视化拖拽编辑,页面生成工具。提升前端开发效率,可集成至移动端项目作为通过定义 JSON 直接生成 UI 界面。 二、开源协议 使用MIT开源协议 三、界面展示 四、功能概述 基于Vue可视化拖拽编辑,…

AI系统ChatGPT源码+详细搭建部署教程+支持GPT4.0+支持ai绘画(Midjourney)/支持OpenAI GPT全模型+国内AI全模型

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统AI绘画系统,支持OpenAI GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署…

UE蓝图中Map的遍历

一、让Map节点连接一个Keys节点,这个Keys节点的功能是将Map的Kay值收集成一个数组。 二、让Keys节点连接Foreach节点来遍历Keys返回的数组。 三、使用Find节点在Map中查找Keys提供的Key值。 局部就是这样的:

centos7 部署oracle完整教程(命令行)

centos7 部署oracle完整教程(命令行) 一. centos7安装oracle1.查看Swap分区空间(不能小于2G)2.修改CentOS系统标识 (由于Oracle默认不支持CentOS)2.1.删除CentOS Linux release 7.9.2009 (Core)(快捷键dd)&…

【Django 02】数据表构建、数据迁移与管理

1. Django 构建数据表创建与数据迁移 1.1 数据表创建 1.1.1 模块功能 如前所述,models.py文件主要用一个 Python 类来描述数据表。运用这个类,可以通过简单的 Python 代码来创建、检索、更新、删除 数据库中的记录而无需写一条又一条的SQL语句。今天的例子就是在…

基于YOLOv8的多目标检测与自动标注软件【python源码+PyqtUI界面+exe文件】【深度学习】

基本功能演示 摘要:YOLOv8是YOLO系列最新的版本,支持多种视觉任务。本文基于YOLOv8的基础模型实现了80种类别的目标检测,可以对图片进行批量自动标注,并将检测结果保存为YOLO格式便于后续进行其他任务训练。本文给出完整的Python实…

PW2162芯片

可知该芯片为4.5V~16V输入,2A工作电流 ,下图为官方参考原理图。 输出的电压根据下公式计算,可知改变选用不同阻值的R1和R2,可控制输出不同的电压。 原理图上的电容主要用于滤波,电感是为了防止电流过大。 立创EDA画板…

【Qt控件之QCommandLinkButton】概述及使用

概述 QCommandLinkButton小部件提供了一个Vista风格的命令链接按钮。 命令链接是Windows Vista引入的一种新控件。它的使用方式类似于单选按钮,用于在一组互斥选项之间进行选择。命令链接按钮不应单独使用,而是作为向导和对话框中单选按钮的替代品&…

移动App安全检测的必要性,app安全测试报告的编写注意事项

随着移动互联网的迅猛发展,移动App已经成为人们日常生活中不可或缺的一部分。然而,虽然App给我们带来了便利和乐趣,但也伴随着一些潜在的安全风险。黑客、病毒、恶意软件等威胁着用户的隐私和财产安全,因此进行安全检测就显得尤为…

YOLOv7改进:动态蛇形卷积(Dynamic Snake Convolution),增强细微特征对小目标友好,实现涨点 | ICCV2023

💡💡💡本文独家改进:动态蛇形卷积(Dynamic Snake Convolution),增强细长微弱的局部结构特征与复杂多变的全局形态特征,对小目标检测很适用 Dynamic Snake Convolution | 亲测在多个数据集能够实现大幅涨点 收录: YOLOv7高阶自研专栏介绍: http://t.csdnimg.…

创新与合规共舞 百望云铸就未来档案数字化管理之路

随着人工智能技术与数字经济的深入发展,数据要素的基础性、战略性资源地位日益凸显,也驱动业内专家学者们持续深入思考——档案资源如何纳入数据资产框架内,如何面向数字中国、数字经济等国家战略发挥其凭证、情报、记忆、数据要素价值&#…

DPDK之eventdev_pipeline源码解析

DPDK之eventdev_pipeline源码解析 引言1 实现原理1.1 数据接收1.2 数据发送1.3 事件调度1.4 struct rte_event 2 核心API3 源码解析3.1 generic实现3.2 tx enq实现 引言 DPDK Eventdev库是DPDK基于事件驱动的编程模型。其中eventdev_pipeline实现了对该模型的应用例子。 1 实…

linux内核模块符号导出

一、内核模块符号导出简介 驱动程序编译生成的 ko 文件是相互独立的,即模块之间变量或者函数在正常情况下无法进行互相访问。而一些复杂的驱动模块需要分层进行设计,这时候就需要用到内核模块符号导出。   内核符号导出指的是在内核模块中导出相应的函…

[MAUI]深入了解.NET MAUI Blazor与Vue的混合开发

文章目录 Vue在混合开发中的特点创建MAUI项目创建Vue应用使用element-ui组件库JavaScript和原生代码的交互传递根组件参数从设备调用Javascript代码从Vue页面调用原生代码 读取设备信息项目地址 .NET MAUI结合Vue的混合开发可以使用更加熟悉的Vue的语法代替Blazor语法&#xff…