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 ...
随机推荐
- [转]How WebKit Loads a Web Page
ref:https://www.webkit.org/blog/1188/how-webkit-loads-a-web-page/ Before WebKit can render a web pag ...
- 马丁·福勒-page对象
马丁·福勒-page对象 译者注:这篇文章翻译自马丁·福勒(Martin Flower,对,没错,就是软件教父)官网的一篇文章,原文出处在文底.如果你正在做WEB自动化测试,那么我强烈推荐你看这篇文章 ...
- Object-c学习之路(oc点语法)
最近想学习object-c了自己上网找了一些资料自学了一下:oc中的点语法是为了java.c等的程序员更好的上手而添加的功能. 主函数 // // main.m // OcTest1 // // Cr ...
- 【DOS】这个命令太牛逼了
删除一个程序了后 竟然上不了网了 运行下列命令重启后就可以了 实在是救了我系统一命 命令如下: netsh winsock reset
- 转--htaccess语法教程 apache服务器伪静态规则教程
转自:http://blog.csdn.net/qingli518/article/details/9118361 htaccess语法教程apache服务器伪静态规则教程 注:如果你是为了找Disc ...
- 一步一步深入spring(2)-三种方式来实例化bean
在一步一步深入spring(1)--搭建和测试spring的开发环境中提到了一种实例化bean的方式,也是最基本的使用构造器实例化bean 1.使用构造器实例化bean:这是最简单的方式,Spring ...
- C++ 容器的综合应用的一个简单实例——文本查询程序
C++ 容器的综合应用的一个简单实例——文本查询程序 [0. 需求] 最近在粗略学习<C++ Primer 4th>的容器内容,关联容器的章节末尾有个很不错的实例.通过实现一个简单的文本查 ...
- UITableView的常用方法与示例
实例方法 dequeueReusableCellWithIdentifier: 初始化一个指定重用标识符的UITableCell对象 两个协议 UITableViewDataSource tableV ...
- zoj1537- Playing with a Calculator
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=537 题意:给你一个k值,现在要你求一个最小的N 值,N每一个数位上的数值a均相 ...
- UVA 216 - Getting in Line
216 - Getting in Line Computer networking requires that the computers in the network be linked. This ...