HDU 3659 Identify the number(数字识别 模拟)

2024-02-19 20:32

本文主要是介绍HDU 3659 Identify the number(数字识别 模拟),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3659

这个题目刚开以为是计算几何,其实是个毛线啊,就是一模拟题,不过这个题想AC还是需要花点时间想的,其实也比较简单,关键是细心

题意:给定你n条线段,每条线段长度为1,这么多线段会组合成数字(见题目图),每个数字之间的间隔5以上,让你从左到右输出数字

解题思路:

首先肯定是按照线段较小的x排序了,排序完成之后开始分组,每一组肯定是一个数字,然后判断这个数字是什么

首先当这个组的线段个数为2 3 4 7的时候可以直接得出表示的数字是什么,因为这几个数量唯一确定一个数字

然后就是6,可能的结果是0和6,这个好办,只要判断存在某点与另外所有点都不相交就确定是6,否则0

最后是5,这个题目核心就在5这里,2 3 5,到底是哪个,3的话好判断,只要存在一个点与另外两点有相交一定是3

最恶心的是2 和 5的判断,奶奶的镜面对称,想一会其实还是可以判断的

首先找出只有一个顶点和另外顶点相交的两条线段,同时记录是a端有相交还是b端有相交(a端指的是线段x值较小的一端,x相同y较小的)

然后找出两条线段相对位置低的那条,这时候要求的是低的那条一定是a端相交才是2,否则是5,如果是睡着的2,那么判断右边那条一定要是

a端相交!

(开始搞错直接判断右边的导致wa数次)

#include <iostream>
#include <string.h>
#include <algorithm>
#include <stdio.h>
#define MAX(a,b) (a>b?a:b)
#define MIN(a,b) (a<b?a:b)
using namespace std;
#define maxn 15000
struct point{double x,y;bool operator == (const point &a) const{return a.x==x && a.y==y;}
}temp;
struct line{point a,b;
}po[maxn];
int n;
bool cmp(const line &a,const line &b){return a.a.x < b.a.x;
}
int function6(int l,int r){int i,k,j;for(i=l;i<=r;i++){for(j=l;j<=r;j++){if(i==j) continue;if(po[i].a==po[j].a || po[i].a==po[j].b) break;}if(j==r+1){ printf("6");return 0;}for(j=l;j<=r;j++){if(i==j) continue;if(po[i].b==po[j].a || po[i].b==po[j].b) break;}if(j==r+1){ printf("6");return 0;}}printf("0");return 0;
}
int function5(int l,int r){int i,j,k,count,t;line rec[10],tem;bool flag[10];memset(flag,false,sizeof(flag));t=0;for(i=l;i<=r;i++){count=0;for(j=l;j<=r;j++){if(i==j)continue;if(po[i].a==po[j].a || po[i].a==po[j].b)count++;}if(count==0){ rec[t]=po[i];flag[t++]=false;}//flag的意思是表示a这端相交没,false表示没相交if(count>=2){ printf("3"); return 0;}count=0;for(j=l;j<=r;j++){if(i==j)continue;if(po[i].b==po[j].a || po[i].b==po[j].b)count++;}if(count>=2){ printf("3"); return 0;}if(count==0){ rec[t]=po[i];flag[t++]=true;}}if(MIN(rec[0].a.y,rec[0].b.y) < MIN(rec[1].a.y,rec[1].b.y)){if(flag[0]){printf("2");return 0;}else {printf("5");return 0;}}else if(MIN(rec[0].a.y,rec[0].b.y) == MIN(rec[1].a.y,rec[1].b.y)){if(rec[0].a.x > rec[1].b.x){if(flag[0]){printf("2");return 0;}else {printf("5");return 0;}}else {if(flag[1]){printf("2");return 0;}else {printf("5");return 0;}}}else{if(flag[1]){printf("2");return 0;}else {printf("5");return 0;}}return 0;
}
int main(){int i,j,k,l,r;double Max;while(scanf("%d",&n)!=EOF){for(i=0;i<n;i++){scanf("%lf%lf%lf%lf",&po[i].a.x,&po[i].a.y,&po[i].b.x,&po[i].b.y);if(po[i].a.x > po[i].b.x)temp=po[i].a,po[i].a=po[i].b,po[i].b=temp;else if(po[i].a.x == po[i].b.x && po[i].a.y > po[i].b.y)temp=po[i].a,po[i].a=po[i].b,po[i].b=temp;}sort(po,po+n,cmp);l=0,r=0;Max=po[0].b.x;for(i=1;i<n;i++){if(po[i].a.x-Max > 5.0 || i==n-1){if(i!=n-1)r=i-1;elser=i;switch(r-l+1){case 2:printf("1");break;case 4:printf("4");break;case 3:printf("7");break;case 7:printf("8");break;case 6:function6(l,r);break;case 5:function5(l,r);break;default:while(1);}l=i;Max=po[i].b.x;}Max=MAX(Max,po[i].b.x);}printf("\n");}return 0;
}


这篇关于HDU 3659 Identify the number(数字识别 模拟)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/725871

相关文章

MySQL 中 ROW_NUMBER() 函数最佳实践

《MySQL中ROW_NUMBER()函数最佳实践》MySQL中ROW_NUMBER()函数,作为窗口函数为每行分配唯一连续序号,区别于RANK()和DENSE_RANK(),特别适合分页、去重... 目录mysql 中 ROW_NUMBER() 函数详解一、基础语法二、核心特点三、典型应用场景1. 数据分

Python中图片与PDF识别文本(OCR)的全面指南

《Python中图片与PDF识别文本(OCR)的全面指南》在数据爆炸时代,80%的企业数据以非结构化形式存在,其中PDF和图像是最主要的载体,本文将深入探索Python中OCR技术如何将这些数字纸张转... 目录一、OCR技术核心原理二、python图像识别四大工具库1. Pytesseract - 经典O

Python基于微信OCR引擎实现高效图片文字识别

《Python基于微信OCR引擎实现高效图片文字识别》这篇文章主要为大家详细介绍了一款基于微信OCR引擎的图片文字识别桌面应用开发全过程,可以实现从图片拖拽识别到文字提取,感兴趣的小伙伴可以跟随小编一... 目录一、项目概述1.1 开发背景1.2 技术选型1.3 核心优势二、功能详解2.1 核心功能模块2.

Python验证码识别方式(使用pytesseract库)

《Python验证码识别方式(使用pytesseract库)》:本文主要介绍Python验证码识别方式(使用pytesseract库),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全... 目录1、安装Tesseract-OCR2、在python中使用3、本地图片识别4、结合playwrigh

Python使用pynput模拟实现键盘自动输入工具

《Python使用pynput模拟实现键盘自动输入工具》在日常办公和软件开发中,我们经常需要处理大量重复的文本输入工作,所以本文就来和大家介绍一款使用Python的PyQt5库结合pynput键盘控制... 目录概述:当自动化遇上可视化功能全景图核心功能矩阵技术栈深度效果展示使用教程四步操作指南核心代码解析

Python模拟串口通信的示例详解

《Python模拟串口通信的示例详解》pySerial是Python中用于操作串口的第三方模块,它支持Windows、Linux、OSX、BSD等多个平台,下面我们就来看看Python如何使用pySe... 目录1.win 下载虚www.chinasem.cn拟串口2、确定串口号3、配置串口4、串口通信示例5

使用Python和PaddleOCR实现图文识别的代码和步骤

《使用Python和PaddleOCR实现图文识别的代码和步骤》在当今数字化时代,图文识别技术的应用越来越广泛,如文档数字化、信息提取等,PaddleOCR是百度开源的一款强大的OCR工具包,它集成了... 目录一、引言二、环境准备2.1 安装 python2.2 安装 PaddlePaddle2.3 安装

Python实现特殊字符判断并去掉非字母和数字的特殊字符

《Python实现特殊字符判断并去掉非字母和数字的特殊字符》在Python中,可以通过多种方法来判断字符串中是否包含非字母、数字的特殊字符,并将这些特殊字符去掉,本文为大家整理了一些常用的,希望对大家... 目录1. 使用正则表达式判断字符串中是否包含特殊字符去掉字符串中的特殊字符2. 使用 str.isa

使用PyTorch实现手写数字识别功能

《使用PyTorch实现手写数字识别功能》在人工智能的世界里,计算机视觉是最具魅力的领域之一,通过PyTorch这一强大的深度学习框架,我们将在经典的MNIST数据集上,见证一个神经网络从零开始学会识... 目录当计算机学会“看”数字搭建开发环境MNIST数据集解析1. 认识手写数字数据库2. 数据预处理的

java字符串数字补齐位数详解

《java字符串数字补齐位数详解》:本文主要介绍java字符串数字补齐位数,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java字符串数字补齐位数一、使用String.format()方法二、Apache Commons Lang库方法三、Java 11+的St