K The Right-angled Triangles
链接:https://ac.nowcoder.com/acm/contest/338/K
来源:牛客网
题目描述
Consider the right-angled triangles with sides of integral length.
输入描述:
There are several test cases. The first line contains an integer T(1≤T≤1,000), T is the number of test cases. The following T lines contain T test cases, each line contains one test case. For each test case, there is an integer : c, the length of hypotenuse.(1≤c≤45,000).
输出描述:
For each case, output Yes if it can construct a right triangle with given hypotenuse c and sides of integral length , No otherwise.
输出
Yes
No
Yes
Yes 优化一下就可以了 简单题
• 这个题很容易想到的一个思路就是暴力枚举。是 的,我们给的解题方法也是暴力枚举。但是,直 接枚举的复杂度是O(c2),会超时(TLE)。所以我们 需要将问题转化一下,使得枚举的复杂度是O(c)。
• 如果三角形三边满足如下关系,则是直角三角形。
• a=m2-n2
•b=2mn
• c=m2+n2
• 所以如果斜边长度能够表示成2个正整数的平方和,则能使得三
边都是正整数。这样枚举的复杂度是O(c)。
• 另外,如果斜边长度是一个合数,其有一个因子能表示为2个正 整数的平方和,那么也能使得三边都是正整数。比如c=,有因 子5=+,那么也是可以构成三边全是整数的直角三角形,每边 长度乘以3即可。就是(,,)。
标准答案
•#include <stdio.h>
•#define N 45001
• int MK[N]={},SQ[];
• //MK数组标记能否是整数三角形,为0表示不能,非0表示可以,SQ数组记录数的平方值
•int main(){
• for(i=;i<;++i)SQ[i]=i*i;
• for(i=;i<;++i)
• for(j=i+;j<&&(k=SQ[i]+SQ[j])<N;++j)
• MK[k]=; //所有能写成2整数平方和的被标记为能
• for(i=;i<;++i)
• if(MK[i]==)
• for(j=;(k=j*i)<N;++j)
• MK[k]=j; //所有含2整数平方和的因子的正整数被标记为能
• scanf("%d",&t);
•while(t--){
• scanf("%d",&c);
• printf("%s\n",MK[c]?"Yes":"No");}
•return ;}
#include<stdio.h>
#include<math.h>
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n;
int flag = 0;
scanf("%d",&n);
for(int i = 1; i <= 45000&&i!=n; i++)
{
double sum = sqrt(n*n - i*i);
// printf("%lf ",sum);
if(sum - (int)sum < 0.000001)
{ flag = 1;
break;
//printf("YES\n"); }
}
// if(flag==1)
// break; if(flag == 1)
printf("Yes\n");
else
printf("No\n"); }
}
K The Right-angled Triangles的更多相关文章
- hackerrank Project Euler #210: Obtuse Angled Triangles
传送门 做出一个好几个星期屯下来的题目的感觉就是一个字: 爽! 上图的黄点部分就是我们需要求的点 两边的部分很好算 求圆的地方有一个优化,由于圆心是整数点,我们可以把圆分为下面几个部分,阴影部分最难算 ...
- Count the number of possible triangles
From: http://www.geeksforgeeks.org/find-number-of-triangles-possible/ Given an unsorted array of pos ...
- HZNU ACM一日游 2019.3.17 【2,4,6-三硝基甲苯(TNT)】
Travel Diary 早上8:00到HG,听说hjc20032003在等我. 然后他竟然鸽我...最后还是勉强在8:30坐上去偏僻的HZNU的地铁. 到文新,然后带上fjl,打滴滴,一行人来到了H ...
- 图像数据到网格数据-1——MarchingCubes算法
原文:http://blog.csdn.net/u013339596/article/details/19167907 概述 之前的博文已经完整的介绍了三维图像数据和三角形网格数据.在实际应用中,利用 ...
- unity 读取灰度图生成三维地形并贴图卫星影像
从 https://earthexplorer.usgs.gov/ 下载高程数据 从谷歌地球上保存对应地区卫星图像 从灰度图创建地形模型,并将卫星影像作为贴图 using System.Collect ...
- unity 读取灰度图生成按高程分层设色地形模型
准备灰度图 1.高程按比例对应hue色相(hsv)生成mesh效果 o.color = float4(hsv2rgb(float3(v.vertex.y/100.0, 0.5, 0.75)), 1.0 ...
- unity读取灰度图生成三维地形mesh
准备灰度图 IGray.png及草地贴图 IGrass.jpg ,放入Assets下StreamingAssets文件夹中. 创建空材质,用作参数传入脚本. 脚本如下,挂载并传入材质球即可 ...
- 图像数据到网格数据-2——改进的SMC算法的实现
概要 本篇接上一篇继续介绍网格生成算法,同时不少内容继承自上篇.上篇介绍了经典的三维图像网格生成算法MarchingCubes,并且基于其思想和三角形表实现了对样例数据的网格构建.本篇继续探讨网格生成 ...
- 图像数据到网格数据-1——Marching Cubes算法的一种实现
概述 之前的博文已经完整的介绍了三维图像数据和三角形网格数据.在实际应用中,利用遥感硬件或者各种探测仪器,可以获得表征现实世界中物体的三维图像.比如利用CT机扫描人体得到人体断层扫描图像,就是一个表征 ...
- django模型操作
Django-Model操作数据库(增删改查.连表结构) 一.数据库操作 1.创建model表
随机推荐
- linux查看 rsync 服务状态
[root@rsync-server-1 /]# lsof -i tcp:873 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME rsync ...
- 11JSP基础
1.Jsp基础 1.1 简介 Jsp,全称 Java Server Page java服务页面,能提供java服务的页面 jsp vs html html: 由html标签组成的,输出静态内容. js ...
- java 创建匿名对象及声明map list时初始化
java 创建匿名对象 类似于c# 中的 new { a:"aaa",b:"bbb"}; 1 创建匿名对象Object myobj = new Object() ...
- ps:HSB色彩模式
前面我们已经学习过了两大色彩模式RGB和CMYK.色彩模式有很多种,但这两种是最重要和最基础的.其余的色彩模式,实际上在显示的时候都需要转换为RGB,在打印或印刷(又称为输出)的时候都需要转为CMYK ...
- node.js从入门到放弃《模块》
在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很 ...
- leetcode-167周赛-1292-元素和小于等于阈值的正方形的最大边长
题目描述; 自己的提交:超时 class Solution: def maxSideLength(self, mat: List[List[int]], threshold: int) -> i ...
- groovy-2.4.11.jar时出错; invalid LOC header (bad signature)
Information:java: Errors occurred while compiling module 'security'Information:javac 1.8.0_131 was u ...
- 打印XX提交的svn版本信息
打印出匹配uliuchao或--结尾的行 svn log | sed -n '/uliuchao/,/--$/p'
- digits 2
digits 2 震惊了== 我还交的表,发现直接输出n个n就行=== #include<bits/stdc++.h> using namespace std; ]={ ", & ...
- centos环境下安装java环境
1-上java官网下载rpm安装包 jdk-7u80-linux-i586.rpm 2-新建文件夹,并把jdk-7u80-linux-i586.rpm上传到此文件夹下面 cd /usr/local/ ...