Pythagorean Triples CodeForces - 707C 推理题,大水题

给定一个数n(1 <= n <= 1e9),判断这个数是否是一个直角三角形的边长,如果是,则输出另外两条边(1 <= x <= 1e18),否则输出-1.

参考题解:http://blog.csdn.net/harlow_cheng/article/details/69055614

首先,当n <= 2 的时候无解,其他时候都有解

假设n是直角边,a是斜边,则n^2 + b^2 = a^2;

n^2 = (a + b)*(a - b);

①假设n是偶数,则另(a - b) == 2;

==>  a + b = (n ^ 2) / 2;

==>  a* 2 = (n*n)/2 + 2;

==>  a = n*n/4 + 1;

因为n是大于二的偶数,所以a有整数解,b = a- 2;

②假设n是偶数,则另(a - b) == 1;

==>  a + b = (n ^ 2) ;

==>  a* 2 = (n*n) + 1;

因为n是大于二的奇数,所以a有整数解,b = a- 1;

代码如下

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 int main()
 4 {
 5     long long  x;
 6     cin >> x;
 7     if(x <= 2){cout<<"-1"<<endl; return 0;}
 8     if(x % 2)
 9     {
10         long long  a = (x * x + 1) / 2;
11         long long int b = a - 1;
12         cout << b << " " << a << endl;
13     }
14     else
15     {
16         long long int a = x * x / 4 + 1;
17         long long int b = a - 2;
18         cout << b << " " << a << endl;
19     }
20     return 0;
21 }

这是看完题解后补得题,惭愧,都说是大水题,还是没做出来,,,

看题的时候没法想到这方面,总是想着枚举暴力,懒,不愿动笔,这是一个大缺点,要改。!

时间: 2024-10-24 06:46:42

Pythagorean Triples CodeForces - 707C 推理题,大水题的相关文章

Compote CodeForces - 746A 又是一个大水题~~~~~

Compote CodeForces - 746A 直接按比例找就行. 最初WA的代码:  QAQ  写的复杂... #include <stdio.h>#include<stdlib.h>int main(){    int a,b,c,i,j,k,ans;    scanf("%d%d%d",&a,&b,&c);    i=a;    j=b/2;    k=c/4;    if(i==0||j==0||k==0)        pr

codeforces 892A - Greed - [超级大水题][O(n)数组最大和次大]

题目链接:https://cn.vjudge.net/problem/CodeForces-892A Jafar has n cans of cola. Each can is described by two integers: remaining volume of cola ai and can's capacity bi (ai ?≤? bi). Jafar has decided to pour all remaining cola into just 2 cans, determin

Codeforces Round #368 (Div. 2) Pythagorean Triples

Pythagorean Triples Katya studies in a fifth grade. Recently her class studied right triangles and the Pythagorean theorem. It appeared, that there are triples of positive integers such that you can construct a right triangle with segments of lengths

PAT甲题题解-1101. Quick Sort (25)-大水题

快速排序有一个特点,就是在排序过程中,我们会从序列找一个pivot,它前面的都小于它,它后面的都大于它.题目给你n个数的序列,让你找出适合这个序列的pivot有多少个并且输出来. 大水题,正循环和倒着循环一次,统计出代码中的minnum和maxnum即可,注意最后一定要输出'\n',不然第三个测试会显示PE,格式错误. #include <iostream> #include <cstdio> #include <algorithm> #include <map&

CodeForces 171F(千古神题。。)

 D - 乐 Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Status Practice CodeForces 171F Description qd ucyhf yi q fhycu dkcruh mxeiu huluhiu yi q tyvvuhudj fhycu dkcruh. oekh jqia yi je vydt jxu djx ucyhf. Input j

大水题(water)

题目描述dzy 定义一个 $n^2$ 位的数的生成矩阵 $A$ 为一个大小为 $n \times n$ 且 Aij 为这个数的第 $i \times n+j-n$ 位的矩阵.现在 dzy 有一个数 $n^2$ 位的数 k,他想知道所有小于等于 k 的数的 $n \times n$ 生成矩阵有多少种.(如果不足 $n^2$ 位则补前缀零)输入输出格式输入格式第一行一个数 $n$,第二行一个 $n^2$ 位的数 $k$输出格式仅一行表示答案,答案可能很大,你只需输出答案对 $10^9 + 7$ 取模

[补档]两个奇怪的大水题

导引 这是两道由OSU(貌似是一个我没有听说过的游戏)引申出的大水题(淼到不行啊喂),壹佰万行代码哦. T1 OSU! 题目 osu 是一款群众喜闻乐见的休闲软件. 我们可以把osu的规则简化与改编成以下的样子: 一共有n次操作,每次操作只有成功与失败之分,成功对应1,失败对应0,n次操作对应为1个长度为n的01串.在这个串中连续的 X个1可以贡献X^3 的分数,这x个1不能被其他连续的1所包含(也就是极长的一串1,具体见样例解释) 现在给出n,以及每个操作的成功率,请你输出期望分数,输出四舍五

Codeforces 48C The Race 模拟题

题目链接:点击打开链接 题意: 给定n个加油站,一辆车由A点跑到B点,每个100m有一个加油站,每开100m需要10升油. 在每个车站会检查一下油量,若车子若开不到下一个加油站则加x升油. 开始有x升油 下面给出加油的记录. 问下一次加油在哪一站.若答案唯一输出具体哪站. 油箱容量无限 思路: 水模拟.. #include <stdio.h> #include <string.h> #include <stdlib.h> #include <math.h>

CodeForces 22D Segments 排序水题

题目链接:点击打开链接 右端点升序,取右端点 暴力删边 #include <cstdio> #include <cstring> #include <algorithm> #include <vector> #include <iostream> #include <map> #include <set> #include <math.h> using namespace std; #define inf 10