水题--整数解 HDU 2092
来源:互联网 发布:电脑游戏性能评测软件 编辑:程序博客网 时间:2024/06/06 05:11
HDU 2092
有二个整数,它们加起来等于某个整数,乘起来又等于另一个整数,它们到底是真还是假,也就是这种整数到底存不存在,实在有点吃不准,你能快速回答吗?看来只能通过编程。
例如:
x + y = 9,x * y = 15 ? 找不到这样的整数x和y
1+4=5,1*4=4,所以,加起来等于5,乘起来等于4的二个整数为1和4
7+(-8)=-1,7*(-8)=-56,所以,加起来等于-1,乘起来等于-56的二个整数为7和-8
9 155 41 -560 0
NoYesYes
这个题算是利用数学的典型题目吧,一开始想的满脑子都是暴力与优化,后来直接发现用数学解法特别简单。
由于数据量是-10000到10000,所以暴力是可以的。遍历其积的因子从1到平方根,每一次判断其是否有解即可。
#include <iostream>#include <cstring>#include <cmath>using namespace std;int main(){ int a,b; while(cin>>a>>b && (a||b)) { int bb = abs(b); if(bb==0) { cout<<"Yes"<<endl; continue; } int uper=sqrt(bb); int yes=0; for(int i=1;i<=uper;i++){ if(bb%i==0){ if(b>0){ if(i+bb/i==a || -i-bb/i==a) { yes=1; break; } } else { if(-i+bb/i==a || i-bb/i==a) { yes=1; break; } } } } if(yes) cout<<"Yes"<<endl; else cout<<"No"<<endl; } return 0;}
若是用数学稍微计算一下,设和为n,积为m,
a=n-b;
ab=m;
bn-b*b=m;
-b*b+nb-m=0
这就是一个关于b的二次方程。那么根据判别式不小于零就可以得到有解的结论了。
#include <iostream>#include <cmath>using namespace std;int main(void){ int a,b; while (cin>>a>>b && (a||b)){ int aa = a*a; int bb = 4*b; int cc = sqrt(aa-bb); if(aa-bb>=0 && aa-bb == cc*cc) cout<<"Yes"<<endl; else cout<<"No"<<endl; } return 0;}
阅读全文
0 0
- 水题--整数解 HDU 2092
- hdu 2092 整数解
- hdu 2092 整数解
- HDU 2092 整数解
- HDU 2092 整数解
- hdu-2092-整数解
- HDU 2092 整数解
- hdu 2092 整数解
- hdu 2092 整数解
- HDU 2092 整数解
- HDU-2092 整数解
- HDU 2092 整数解
- hdu 2092 整数解
- HDU 2092 整数解
- HDU 2092 - 整数解
- hdu 2092 整数解
- HDU-2092 整数解
- hdu 2092 整数解
- API翻译:glBindBuffer
- 关于单例设计的一点小领悟
- C语言学习记录 引用传递
- 笔记
- 计算球的体积
- 水题--整数解 HDU 2092
- BZOJ 3223 浅谈SPLAY伸展树算法区间翻转
- Python——有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
- C语言(内存管理、文件处理)
- Java运算符
- Could not resolve placeholder
- main 主函数详解
- 关于getClass().getClassLoader() 为空的时候
- Mysql 视图