2017年8月12日提高组T3 YMW的三角形

2023-10-08 08:40
文章标签 t3 三角形 2017 提高 ymw

本文主要是介绍2017年8月12日提高组T3 YMW的三角形,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Description


YMW终于思考完数学题了,因为数学给人力量,所以他现在浑身都充满了力量。然而lyy俯视YMW,不屑地说道,你小学数学题都不会做,还在这嚣张?你看我们的电脑屏幕,可以是一个二维直角坐标系,你把手上那把三角板放在屏幕上,现在你告诉我它的每个顶点能否都在整数点上吗?(整数点:一个点,它的x和y坐标都为整数)

Input


多组数据,每组数据三个数表示三角形的三条边
输入以文件结束结尾

Output


对于每组数据,如果可以则输出Yes,不可以则输出No

Hint


数据范围:
数据组数不超过10组,不少于5组
对于30%的数据,三边长均小于1 000
对于70%的数据,三边长均小于100 000
对于100%的数据,三边长均小于10 000 000

Source


BY BPM

Solution


绿色就是力量!

又是一题被大小写耽误的。。

这里写图片描述

如图,已知任意一个在平面直角坐标系中的三角形都可以被矩形套住。那么我们可以固定一个点不动,通过枚举图中的边x的长得到h并判断是否是整数。

同理,我们可以通过海伦公式求面积,求a边上的高ha。那么通过ha/b可以确定夹角的大小,x/a同理。那么剩下的三角形就出来了,判断剩下的点是否是整点即可

但是,这样会面临卡精度的问题,例如92295 6688 92537这组数据,于是我可耻地看了一波标

这里写图片描述
我们可以通过平移旋转的方式改变三角形的位置,那么我们固定三角形在原点,可以发现旋转相当于以原点为圆心作半径为a的 1/4 圆,以原点为圆心作半径为b的1/2圆。

已知在半径为r的圆上点都满足 x2+y2=r2 ,通过枚举x坐标我们可以找出所有的整点,枚举判断是否存在两点距离为c即可。根据某项定理可得这样的整点不会超过 n 个,这样就是O(n)的了。

根据对称性我们只用找a/2次,b/2次,a、b为最短两边

Code


#include <stdio.h>
#include <math.h>
#include <vector>
#define rep(i, st, ed) for (ll i = st; i <= ed; i += 1)
#define EPS 1e-6
#define ll long long
#define db double
struct pos{ll x, y;}va[10001],vb[10001];
inline void swap(ll &a, ll &b){a^=b;b^=a;a^=b;}
inline bool teg(db x){return fabs(x - floor(x)) <= EPS;}
int main(void){int ra, rb, rc;while (~scanf("%d %d %d", &ra, &rb, &rc)){ll a = ra, b = rb, c = rc;if (b < a && b < c){swap(a, b);}if (c < a && c < b){swap(a, c);}if (c < b){swap(b, c);}int cntA = 0, cntB = 0;rep(x, 0, a / 2){db y = sqrt(a*a*1.0-x*x*1.0);if (fabs(y-(int)y)<=EPS){va[++ cntA] = (pos){x, y};va[++ cntA] = (pos){y, x};}}rep(x, 0, b / 2){db y = sqrt(b*b*1.0-x*x*1.0);if (fabs(y-(int)y)<=EPS){vb[++ cntB] = (pos){x, y};vb[++ cntB] = (pos){x, -y};vb[++ cntB] = (pos){y, x};vb[++ cntB] = (pos){y, -x};}}int ans = 0;rep(i, 1, cntA){rep(j, 1, cntB){pos ta = va[i], tb = vb[j];db d = sqrt((ta.x-tb.x)*(ta.x-tb.x)*1.0+(ta.y-tb.y)*(ta.y-tb.y)*1.0);if (fabs(c-d)<=EPS){ans = 1;break;}}if (ans){break;}}if (ans){puts("Yes");}if (!ans){puts("No");}}return 0;
}

这篇关于2017年8月12日提高组T3 YMW的三角形的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

如何提高Redis服务器的最大打开文件数限制

《如何提高Redis服务器的最大打开文件数限制》文章讨论了如何提高Redis服务器的最大打开文件数限制,以支持高并发服务,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录如何提高Redis服务器的最大打开文件数限制问题诊断解决步骤1. 修改系统级别的限制2. 为Redis进程特别设置限制

【WebGPU Unleashed】1.1 绘制三角形

一部2024新的WebGPU教程,作者Shi Yan。内容很好,翻译过来与大家共享,内容上会有改动,加上自己的理解。更多精彩内容尽在 dt.sim3d.cn ,关注公众号【sky的数孪技术】,技术交流、源码下载请添加微信号:digital_twin123 在 3D 渲染领域,三角形是最基本的绘制元素。在这里,我们将学习如何绘制单个三角形。接下来我们将制作一个简单的着色器来定义三角形内的像素

键盘快捷键:提高工作效率与电脑操作的利器

键盘快捷键:提高工作效率与电脑操作的利器 在数字化时代,键盘快捷键成为了提高工作效率和优化电脑操作的重要工具。无论是日常办公、图像编辑、编程开发,还是游戏娱乐,掌握键盘快捷键都能带来极大的便利。本文将详细介绍键盘快捷键的概念、重要性、以及在不同应用场景中的具体应用。 什么是键盘快捷键? 键盘快捷键,也称为热键或快捷键,是指通过按下键盘上的一组键来完成特定命令或操作的方式。这些快捷键通常涉及同

CSP 2023 提高级第一轮 CSP-S 2023初试题 完善程序第二题解析 未完

一、题目阅读 (最大值之和)给定整数序列 a0,⋯,an−1,求该序列所有非空连续子序列的最大值之和。上述参数满足 1≤n≤105 和 1≤ai≤108。 一个序列的非空连续子序列可以用两个下标 ll 和 rr(其中0≤l≤r<n0≤l≤r<n)表示,对应的序列为 al,al+1,⋯,ar​。两个非空连续子序列不同,当且仅当下标不同。 例如,当原序列为 [1,2,1,2] 时,要计算子序列 [

如何提高 GitHub 的下载速度

如何提高 GitHub 的下载速度 文章目录 如何提高 GitHub 的下载速度1. 注册账号2. 准备好链接3. 创建仓库4. 在码云上下载代码5. 仓库更新了怎么办 一般来说,国内的朋友从 GitHub 上面下载代码,速度最大是 20KB/s,这种龟速,谁能忍受呢? 本文介绍一种方法——利用“码云”,可以大大提高下载速度,亲测有效。 1. 注册账号 去“码云”注册一

CSS实现DIV三角形

本文内容收集来自网络 #triangle-up {width: 0;height: 0;border-left: 50px solid transparent;border-right: 50px solid transparent;border-bottom: 100px solid red;} #triangle-down {width: 0;height: 0;bor

如何提高开发的效率,让老板不知所措的给你发工资

设计模式 UML JSP 编程 数据结构 1.你可能会常常发现,写了一段代码后,编译程序时是一大堆的出错 (原因:语法不熟)  ──别担心,这是每个程序员必须经历的事,这时候你就需要更大的耐心及细心,对每一行代码进行仔细人阅读并改正,这个很重要,这可以培养你的理解代码能力,所以要常读程序,不要等到程序运行以后才知道你的程序的结果。  ──如何避免:在写代码以前,要认真的学习计算机语

Java开发实例大全提高篇——Applet的应用

开发十年,就只剩下这套架构体系了! >>>    第21章  Applet的应用 21.1  Applet在html中的使用 实例549  在html中显示Applet HtmlShowApplet.java     public void paint(Graphics g){         g.drawString("html文件已经运行", 50, 50);// 绘制文本

Java开发实例大全提高篇——Java安全

开发十年,就只剩下这套架构体系了! >>>    第6篇  Java安全与Applet应用篇 第20章  Java安全 20.1  Java对称加密 实例531  使用BASE64加密     public static String encryptBASE64(byte[] data) {         //加密数据         return (new BASE64Encoder()

双指针(5)_单调性_有效三角形的个数

个人主页:C++忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C++忠实粉丝 原创 双指针(5)_单调性_有效三角形的个数 收录于专栏【经典算法练习】 本专栏旨在分享学习C++的一点学习笔记,欢迎大家在评论区交流讨论💌 目录 1. 题目链接: 2.题目描述 : 3.解法 :     解法一(暴力枚举) :     算法思路 :     代码展示 : 暴力枚