蓝桥杯第七届决赛JAVA真题----广场舞

广场舞

LQ市的市民广场是一个多边形,广场上铺满了大理石的地板砖。
地板砖铺得方方正正,就像坐标轴纸一样。
以某四块砖相接的点为原点,地板砖的两条边为两个正方向,一块砖的边长为横纵坐标的单位长度,则所有横纵坐标都为整数的点都是四块砖的交点(如果在广场内)。
广场的砖单调无趣,却给跳广场舞的市民们提供了绝佳的参照物。每天傍晚,都会有大批市民前来跳舞。
舞者每次都会选一块完整的砖来跳舞,两个人不会选择同一块砖,如果一块砖在广场边上导致缺角或者边不完整,则没人会选这块砖。
(广场形状的例子参考【图1.png】)

现在,告诉你广场的形状,请帮LQ市的市长计算一下,同一时刻最多有多少市民可以在广场跳舞。

【输入格式】
输入的第一行包含一个整数n,表示广场是n边形的(因此有n个顶点)。
接下来n行,每行两个整数,依次表示n边形每个顶点的坐标(也就是说广场边缘拐弯的地方都在砖的顶角上。数据保证广场是一个简单多边形。
【输出格式】
输出一个整数,表示最多有多少市民可以在广场跳舞。

【样例输入】
5
3 3
6 4
4 1
1 -1

0 4

【样例输出】
7

【样例说明】

广场如图1.png所示,一共有7块完整的地板砖,因此最多能有7位市民一起跳舞。

【数据规模与约定】
对于30%的数据,n不超过100,横纵坐标的绝对值均不超过100。
对于50%的数据,n不超过1000,横纵坐标的绝对值均不超过1000。
对于100%的数据,n不超过1000,横纵坐标的绝对值均不超过100000000(一亿)。

资源约定:
峰值内存消耗 < 256M
CPU消耗  < 1000ms
请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。
所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
注意:不要使用package语句。不要使用jdk1.7及以上版本的特性。

注意:主类的名字必须是:Main,否则按无效代码处理。

思路:有ACM经验的大牛一定一眼就能看出来这是个凸包问题,当然人家都不会看这种水平的题......好了,言归正传,想深入了解凸包问题的可以参考下面两篇文章。

蛮力法在求解凸包问题中的应用(JAVA)

分治法在求解凸包问题中的应用(JAVA)--快包算法

单就这个题目,还达不到传统凸包问题的难度,所以不了解也可以做。我们只需要判断在所围面积中的点,它的右侧、下侧、右下侧三个点是否也在范围内就可以了。如果都在范围内那么这个砖就是完整的,反之,不是完整的。

以下图为例,我们可能不能漫无边际的处理任意个点,所以我们可以先找出所有坐标中的x的上下限,y的上下限,即图中红色虚线所围区域。之后对区域中的每个点进行判断。而如何判断一个点是不是在所围区域之内呢?这里需要用到两点式直线方程的概念,我们构成边界的点(x1,y1)(x2,y2),两两带入两点式,再带入所判断点(x,y)的一个坐标dy,就可以求出另一个坐标dx。而求出来的坐标dx,如果在实际x的左侧,则不再范围内;反之,在范围内。


完整代码如下:

public class Point {int x;int y;public Point(int x, int y) {// TODO Auto-generated constructor stubthis.x = x;this.y = y;}
}

import java.util.Scanner;public class Main {static int cnt = 0;public static void main(String[] args) {Scanner in = new Scanner(System.in);int n = in.nextInt();Point[] points = new Point[n];int maxX = 0, minX = 99999999;int maxY = 0, minY = 99999999;for(int i = 0; i < n; i++) {int x = in.nextInt();int y = in.nextInt();points[i] = new Point(x, y);if(points[i].x > maxX) {maxX = points[i].x;}if(points[i].x < minX) {minX = points[i].x;}if(points[i].y > maxY) {maxY = points[i].y;}if(points[i].y < minY) {minY = points[i].y;}}for(int i = minX; i < maxX; i++) {  //x的最小值到最大值for(int j = minY; j < maxY; j++) {  //y的最小值到最大值//判读右、下、右下的三个点是否都在范围内if(f(points, i, j) && f(points, i+1, j) && f(points, i, j+1) && f(points, i+1, j+1)) {cnt++;}}}System.out.println(cnt);}public static boolean f(Point[] points, int x, int y) {boolean flag = false;/*** 由于输入时按顺序的,所以计算还简单了,只需要求出0点-1点、1点-2点、2点-3点、3点-4点、(4点-0点)的斜率即可。* 其中4点-0点不好求,这里的做法非常巧妙,首先将j赋为4,先将4点和0点比较,之后 j=i,i++ ,避免了双层嵌套还解决了回环的问题。* */int j = points.length - 1;for(int i = 0; i < points.length; i++) {// 各点y坐标值的最小值                                                   y坐标值的最大值if(y > Math.min(points[i].y, points[j].y) && y <= Math.max(points[i].y, points[j].y)) {//两点式获得斜率,确定该点是否在范围内double temp = (double) points[i].x + (double)((( y- points[i].y)/ (double)(points[i].y - points[j].y)) * (double)((points[i].x - points[j].x)));if(temp < x) {flag = true;}}j = i;}return flag;}
}

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

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

相关文章

[HIHO] 1048 铺地板

历经千辛万苦&#xff0c;小Hi和小Ho终于到达了举办美食节的城市&#xff01;虽然人山人海&#xff0c;但小Hi和小Ho仍然抑制不住兴奋之情&#xff0c;他们放下行李便投入到了美食节的活动当中。美食节的各个摊位上各自有着非常多的有意思的小游戏&#xff0c;其中一个便是这样…

装修时不需要拆换的地板,橱柜要做好保护

问题 晕了,保护工作没有做好,地板砖全部脏了 当拆除开始的时候,没有做好保护措施,只铺了一些瓦楞板,不晓得怎么了,师父吐的香口胶还是饮料,最后验收时,抛光砖上面有一些黑黑的,师父说慢慢擦一下,就会淡掉,到最后也没有擦掉,叫师父重做,叫我付钱。。。 在房间里,地…

蓝桥杯 广场舞

题目描述 LQ 市的市民广场是一个多边形&#xff0c;广场上铺满了大理石的地板砖。 地板砖铺得方方正正&#xff0c;就像坐标轴纸一样。 以某四块砖相接的点为原点&#xff0c;地板砖的两条边为两个正方向&#xff0c;一块砖的边长为横纵坐标的单位长度&#xff0c;则所有横纵…

试题 算法训练 瓷砖铺放

问题描述   有一长度为N(1<&#xff2e;<10)的地板&#xff0c;给定两种不同瓷砖&#xff1a;一种长度为1&#xff0c;另一种长度为2&#xff0c;数目不限。要将这个长度为N的地板铺满&#xff0c;一共有多少种不同的铺法&#xff1f;   例如&#xff0c;长度为4的地…

建材安装php源码,PHP响应式瓷砖大理石建材企业网站整站源码(自适应手机移动端) dedecms内核...

【温馨提示】源码包解压密码&#xff1a;www.youhutong.com 资源描述 PHP响应式瓷砖大理石建材企业网站整站源码(自适应手机移动端) dedecms内核 源码介绍&#xff1a; 采用织梦最新内核开发的模板&#xff0c;该模板企业通用、瓷砖、大理石、建材类企业都可使用。 响应式自适应…

(PC+WAP)织梦模板大理石瓷砖建材类网站

模板介绍&#xff1a; 织梦内核开发的模板&#xff0c;该模板属于大理石加工、瓷砖地板、建材类企业使用 响应式自适应各种移动设备&#xff0c;同一个后台&#xff0c;数据即时同步&#xff0c;简单适用&#xff01; 原创设计、手工书写DIVCSS&#xff0c; 完美兼容IE7、Firef…

小鑫与地板砖

小鑫与地板砖 Time Limit: 1000ms Memory limit: 65536K 有疑问&#xff1f;点这里^_^ 题目描述 小鑫家里有一个面积为n*m的矩形地面。他找到了一种特别好看的地板砖&#xff0c;有x块&#xff0c;每块变长为a&#xff0c;于是就像把这些地板砖铺到这个地面上。 他想了一个很…

开发过程中自己遇到的异常(六)

连接数据库失败&#xff1a; InternalError: (pymysql.err.InternalError) (1130, "Host xxx.xx.1.106 is not allowed to connect to this MySQL server") (Background on this error at: http://sqlalche.me/e/2j85) 解决方式&#xff1a; mysql> use mysql; …

苹果6外音没有了怎么办_苹果手机没有设置闹钟每天都在响怎么办

大家好&#xff0c;我是时代财富智能客服时间君。以上问题我来为你解答。 以苹果11为例&#xff0c;其系统版本为&#xff0c;苹果手机没有设置闹钟每天都在响&#xff0c;是因为设置了就寝模式。其解决方法如下&#xff1a; 1.首先&#xff0c;打开手机时钟。 2.点击就寝选项…

基于51单片机的闹钟系统

一、系统设计 本次闹钟系统使用的是STC89C52单片机作为主控芯片&#xff0c;通过八位数码管显示时间&#xff0c;通过DS1302定时模块设置定时&#xff0c;采集到的数据会上传到单片机中&#xff0c;单片机会对信号进行处理&#xff0c;处理后的数据会上传到LCD1602显示屏上进行…

如何在Apple Watch上设置闹钟和计时器

Your iPhone can be used as an alarm clock, a stopwatch, and a timer. However, If you have an Apple Watch, you don’t have to take out your phone to use any of these tools. Your watch has built-in apps that perform the same functions. 您的iPhone可用作闹钟&a…

用闹钟网在线闹钟怎么添加倒计时提醒?

很多人在日常工作时&#xff0c;为快捷提高工作效率&#xff0c;会为每项工作制定完成的时间&#xff0c;比如这一项工作需要3个小时完成、那一项工作需要1个小时完成&#xff0c;可是一忙碌起来可能起初添加定时提醒时间就忘记了。 使用闹钟网在线计时器办公工具可以快捷帮助…

Day Maker:iPhone闹钟充电器

是否有过这样的时候&#xff0c;有时躺在床上玩儿手机&#xff0c;玩儿着玩儿着没电了&#xff0c;但是又不想下床去拿充电器&#xff0c;太麻烦&#xff0c;要是有一个可以放在枕边的充电器该多好啊。福音终于来了&#xff0c;由设计师Michale Kritzer设计的充电器Day Maker就…

火箭闹钟+android,闹钟就要凶残的! -- 火箭闹钟 #Android #iPhone

闹钟们想把我们叫醒可谓是煞费苦心&#xff0c;虐心闹钟更是层出不穷&#xff0c;但是像火箭闹钟这种又虐心又漂亮的却不多见。最近这款曾经被每日最美推荐过一次的应用升级到了 2.0 版本&#xff0c;再次登上每日最美的火箭闹钟会为我们带来哪些新功能呢&#xff1f; 可能是最…

在iPhone或iPad上设置闹钟的两种最快方法

If you often create or toggle alarms on your iPhone or iPad, there are two quick ways to do it without having to hunt for the Clock app on your Home screen. Here’s how to use them. 如果您经常在iPhone或iPad上创建或切换闹钟&#xff0c;则有两种快速的方法可以…

怎样一次删除所有iPhone闹钟?

大家都设置几个iPhone闹钟呢&#xff1f;每个闹钟都有不同用途&#xff0c;有起床用的、赖床用的、还有假日补眠专用的&#xff0c;针对不同情况设置不同iPhone闹钟&#xff0c;结果不知不觉就设置了很多个&#xff01;是的时候整理闹钟了&#xff0c;今天小编就来跟大家分享一…

美图秀秀美化版

美图秀秀可以轻松美化数码照片&#xff0c;独有一键P图、神奇美容、边框场景、超炫闪图等强 大功能&#xff0c;还有每日更新的海量素材。国内很多人在使用这款免费图片处理软件&#xff0c;1分钟 就能上手&#xff0c;据说比PS要简单100倍(^.^)&#xff01;去除广告&#xff0…

Sping源码(七)— 后置处理器(自定义后置处理器)

上一篇中简单介绍了Spring中invokeBeanFactoryPostProcessors方法的执行流程&#xff0c;以及BFPP和BDRPP类的介绍&#xff0c;这篇文章我们来自定义实现一个类的后置处理器。 自定义PostProcessor 自定义PostProcessor的方式一共两种&#xff0c;都是根据invokeBeanFactoryPo…

openCV实战-系列教程8:直方图与均衡化(直方图定义/mask操作/均衡化原理/均衡化效果/自适应均衡化)、原理解析、源码解读

打印图像直接用这个函数&#xff1a; import cv2 #opencv读取的格式是BGR import numpy as np import matplotlib.pyplot as plt#Matplotlib是RGB %matplotlib inline def cv_show(img,name):cv2.imshow(name,img)cv2.waitKey()cv2.destroyAllWindows()1、直方图 1.1 基本定义…

EXCEL的VBA宏密码破解

在Excel 文档中使用AltF11可以打开查看宏代码。而部分VBA宏使用了密码保护&#xff0c;如下图&#xff1a; 在不知道密码的情况下则无法查看到宏代码。 对策 用Emeditor以二进制方式打开文件&#xff0c;搜索[43 4D 47]&#xff0c;对应字符为CMG&#xff0c;将找到CMG后的3…