hdu5615 Jam's math problem (BestCoder Round #70)
2016-02-02 09:49
330 查看
Jam's math problem
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)问题描述Jam有道数学题想向你请教一下,他刚刚学会因式分解比如说,x^2+6x+5=(x+1)(x+5)x2+6x+5=(x+1)(x+5) 就好像形如 ax^2+bx+cax2+bx+c => pqx^2+(qk+mp)x+km=(px+k)(qx+m)pqx2+(qk+mp)x+km=(px+k)(qx+m) 但是他很蠢,他只会做p,q,m,kp,q,m,k为正整数的题目 请你帮助他,问可不可以分解输入描述
第一行TT,表示T(1 \leq T \leq 100 )T(1≤T≤100)组数据。 接下来TT组数据: 每组数据一行,一个三个整数a,b,ca,b,c,一组数据一行 (1 \leq a,b,c \leq 100000000)(1≤a,b,c≤100000000)输出描述
对于每组数据,输出"YES"或者"NO".输入样例
2 1 6 5 1 6 4输出样例
YES NOHint
第一组数据可以分成(x+1)(x+5)=x^2+6*x+5(x+1)(x+5)=x2+6∗x+5
分析:根据十字相乘法,可以知道如果a可以拆分为x1,x2,c可以拆分为y1,y2,
且x1*y1+x2*y2==b或者x1*y1+x2*y1==b,那么便是符合要求的,否则不符合
时间复杂度:根号a*c的因子数,可以优化到a的因子数*b的因子数
#include<bits/stdc++.h>using namespace std;struct node{int x,y;}line[110000];int main(){int a,b,c,_;scanf("%d",&_);while(_--){scanf("%d%d%d",&a,&b,&c);int flag=0,cnt=0;for(int i=1;i<=sqrt(c)+1;i++){if(c%i==0){line[cnt].x=i;line[cnt++].y=c/i;}}for(int i=1;i<=sqrt(a)+1;i++){if(a%i==0){int x1=i,x2=a/i;for(int j=0;j<cnt;j++){if(x1*line[j].x+x2*line[j].y==b||(x1*line[j].y+x2*line[j].x==b)){flag=1;break;}}}if(flag==1)break;}if(flag==1)printf("YES\n");elseprintf("NO\n");}return 0;}
相关文章推荐
- Retrofit三步理解之一 ------------------ Retrofit的简单使用总结
- navigater导航
- VBA AdoDb Load Data from AS400
- sap中使用SE11读取透明表时,如何设置过滤条件(属性)
- mysql的日志分析
- 类型转换
- ngrok 后台运行方法
- iOS应用架构
- Hadoop安装教程_伪分布式配置_CentOS6.4/Hadoop2.6.0
- DialogFragment
- net组件转化成COM组件
- Android——Animation笔记:视图动画
- 必须收藏的23个php实用代码片段
- 百度地图Api之自定义标注:(获得标注的经纬度和中心经纬度即缩放度)
- 纠结的NTP安装过程
- Libgdx学习笔记:可垂直滚动的文本组件CHScrollLabel
- Android Low Memory Killer
- nefuoj-1120:天平称重
- 封装原生ajax
- 正则表达式的3种匹配模式