zoukankan      html  css  js  c++  java
  • [CF1515B] Phoenix and Puzzle

    前言

    被迫营业。

    题目

    CF

    洛谷

    题目大意:

    (t) 组数据,每组数据输入一个整数 (n),表示给定的相同等腰直角三角形的数量。

    询问是否能够用上所有三角形拼出一个无空洞的正方形。

    能做到输出 ( t YES) ,否则输出 ( t NO)

    (1le tle 10^4;1le nle 10^9.)

    讲解

    样例已经给我们很大的提示了:我们可以用直角边长的倍数作为正方形边长,也可以用斜边边长的倍数作为边长。

    这个正方形必定是由相同的小正方形组成的,虽然很好理解,但是还是简单证明一下。

    考虑反证。假设这个正方形的边长既有直角边,又有斜边。

    令三角形直角边长为 (1),则斜边长 (sqrt{2})。令这个正方形的边长为 (a+sqrt{2}b),那么面积为 (a^2+2sqrt{2}ab+2b^2),是一个无理数。但是每个三角形的面积是 (frac{1}{2}),是有理数,(n) 个拼起来也应该是有理数。与原命题不符。

    • 以直角边为边长的小正方形需要 (2) 个三角形。
    • 以斜边为边长的小正方形需要 (4) 个三角形。

    正方形必定边长相等,所以小正方形个数是完全平方数。

    因此只需要判断 (frac{n}{2})(frac{n}{4}) 是否为完全平方数即可。

    代码

    bool check(double x)
    {
    	int t = sqrt(x);
    	if(t * t == x) return 1;
    	return 0;
    }
    
    int main()
    {
    //	freopen(".in","r",stdin);
    //	freopen(".out","w",stdout);
    	for(int T = Read(); T ;-- T)
    	{
    		n = Read();
    		if(check(n/2) || check(n/4)) printf("YES
    ");
    		else printf("NO
    ");
    	}
    	return 0;
    }
    
  • 相关阅读:
    ECS内网穿透
    设置服务器ssh会话时间
    VScode插件
    Linux拷贝U盘文件(命令行)
    打开IDM下载视频时弹出防火墙阻止下载,解决方案
    如何将jmeter.bat命令文件固定到任务栏
    jmeter安装教程
    安装JDK8.0(JDK1.8) & 环境变量配置 & idea中配置java路径
    教你不用任何第三方软件实现任务栏居中
    [Unity优化]gc03:代码优化
  • 原文地址:https://www.cnblogs.com/PPLPPL/p/14728021.html
Copyright © 2011-2022 走看看