CodeForces 707C Pythagorean Triples
数学,构造。
这题比较有意思,一开始没发现结论写了一个最坏复杂度为$O({10^9})$暴力居然能$AC$,正因为如此,我才发现了规律。
一开始是这么想的:
先假设$n$为直角边,设斜边长度为$c$,另一条直角边长度为$b$,因此有${c^2} - {b^2} = {n^2}$。
左边因式分解得到:$(c + b)(c - b) = {n^2}$。我们记$A = c + b$,$B=c-b$。那么:$c = \frac{{A + B}}{2}$,$b = \frac{{A - B}}{2}$。
因此,如果我们能找到${n^2}$的两个因子$A$和$B$,使得$A×B={n^2}$,并且使得$c$和$b$都是不为$0$的整数,那么就找到了在$n$作为直角边的情况下的答案。
如果上述条件下没有找到解,那么就设$n$作为斜边,设两个直角边分别为$a$和$b$,然后暴力枚举$a$,判断${n^2} - {a^2}$是否为平方数,如果是,那么就找到解了。
这样的方法看似会超时,实际上居然能$AC$......然后我把后半部分$n$作为斜边的删了,也照样能$AC$。
然后我就开始思考$n$作为直角边时候有什么规律在....后来发现了。
我们再来观察$n$作为直角边时候的答案:$c = \frac{{A + B}}{2}$,$b = \frac{{A - B}}{2}$。
如果${n^2}$是奇数,那么我们假设$B=1$,$A={n^2}$,这样构造就能保证$c$和$b$都是整数啦。
如果${n^2}$是偶数,那么我们假设$B=2$,$A = \frac{{{n^2}}}{2}$,这样构造也能保证$c$和$b$都是整数。
也就是说一开始写的暴力方法,在枚举到$B=2$的时候就找到解了,因此能过......
#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<stack>
#include<iostream>
using namespace std;
typedef long long LL;
const double pi=acos(-1.0),eps=1e-;
void File()
{
freopen("D:\\in.txt","r",stdin);
freopen("D:\\out.txt","w",stdout);
} LL n,ans1,ans2; int main()
{
scanf("%lld",&n);
if(n==||n==) printf("-1\n");
else
{
if(n*n%==) ans1=(n*n+)/, ans2=(n*n-)/;
else ans1=(n*n/+)/, ans2=((n*n/-))/;
printf("%lld %lld\n",ans1,ans2);
}
return ;
}
CodeForces 707C Pythagorean Triples的更多相关文章
- 【数学】Codeforces 707C Pythagorean Triples
题目链接: http://codeforces.com/problemset/problem/707/C 题目大意: 给你一个数,构造其余两个勾股数.任意一组答案即可,没法构造输出-1. 答案long ...
- Codeforces 707C Pythagorean Triples(构造三条边都为整数的直角三角形)
题目链接:http://codeforces.com/contest/707/problem/C 题目大意:给你一条边,问你能否构造一个包含这条边的直角三角形且该直角三角形三条边都为整数,能则输出另外 ...
- CodeForces 707C Pythagorean Triples (数论)
题意:给定一个数n,问你其他两边,能够组成直角三角形. 析:这是一个数论题. 如果 n 是奇数,那么那两边就是 (n*n-1)/2 和 (n*n+1)/2. 如果 n 是偶数,那么那两边就是 (n/2 ...
- Codeforces 707C. Pythagorean Triples-推公式的数学题
两道C题题解,能推出来公式简直是无敌. http://codeforces.com/problemset/problem/707/C codeforces707C. Pythagorean Tripl ...
- codeforces 707C C. Pythagorean Triples(数学)
题目链接: C. Pythagorean Triples time limit per test 1 second memory limit per test 256 megabytes input ...
- Codeforces Round #368 (Div. 2) C. Pythagorean Triples(数学)
Pythagorean Triples 题目链接: http://codeforces.com/contest/707/problem/C Description Katya studies in a ...
- Codeforces Round #368 (Div. 2) C. Pythagorean Triples 数学
C. Pythagorean Triples 题目连接: http://www.codeforces.com/contest/707/problem/C Description Katya studi ...
- Pythagorean Triples 707C
Katya studies in a fifth grade. Recently her class studied right triangles and the Pythagorean theor ...
- Pythagorean Triples
Pythagorean Triples time limit per test 1 second memory limit per test 256 megabytes input standard ...
随机推荐
- Castle.DynamicProxy Part 1: ClassProxy
1.Castle中代理对象的分类 总的来说,代理对象大概可以分为2大类: 1.继承类型的代理对象 一类是继承类型的代理类.即:有一个类A,它的代理类是B.B是继承自A的.调用代理类B中的方法时,可以通 ...
- iOS证书深究
iOS证书深究 iOS的系列证书很令人头痛,但是也提供了完整的保护. 在开发过程中,遇到的基本的证书有Xcode真机调试或者打包用证书,也有消息推送证书等:每种证书分为开发版(development) ...
- Asp.Net Web API 2(CRUD操作)第二课
Asp.Net Web API 2(CRUD操作)第二课 Asp.Net Web API 导航 Asp.Net Web API第一课:入门http://www.cnblogs.com/aehyok ...
- CSS盒子的浮动
web前端学习笔记(CSS盒子的浮动) 在标准流中,一个块级元素在水平方向会自动伸展,直到包含它的元素的边界:而在竖直方向和兄弟元素依次排列,不能并排.使用“浮动”方式后,块级元素的表现就会有所不同. ...
- [置顶] 学习JDK源码:可进一步优化的代码
1.参数化类型的构造函数比较啰嗦 new HashMap<String, List<String>>() 如果你调用参数化类的构造函数,那么很不幸,你必须要指定类型参数,即便上 ...
- Setting up Ubuntu in CoLinux–changing local/keyboard to be English
Today i installed the CoLinux with Ubuntu package, but the default locale setting of the system is G ...
- 调用MobileAPI的设计(iOS篇)
调用MobileAPI的设计(iOS篇) 这一节讲如何发起网络请求. iOS用于调用MobileAPI的第三方组件很多,我们这里采用的是以下组件: 1)ASIHTTPRequest,用于请求Mobil ...
- Make Things Move -- Javascript html5版(一)文件目录结构和工具方法准备
从这一篇开始,就来开始我们的make things move之旅吧 在此之前,要知道ActionScript(AS)的语法和JS是不一样的,AS是相对于JS而言更好的支持了面向对象的特性,所以我们可以 ...
- Http Module 介绍(转载)
Http Module 介绍 引言 Http 请求处理流程 和 Http Handler 介绍 这两篇文章里,我们首先了解了Http请求在服务器端的处理流程,随后我们知道Http请求最终会由实现了IH ...
- MyEclipse从数据库表反向生成实体类之Hibernate方式(反向工程)
一.打开Myeclipse Database Explorer 二.新建[New..] 三.选择数据库,添加驱动 四.测试连接 五.选中数据库中的表单击右键选择[Hibernate Rever..] ...