山东17省赛F:http://exam.upc.edu.cn/problem.php?cid=1207&pid=5
这题考查的知识点就是蕴含式,就是问你
With given integers a,b,c, you are asked to judge whether the following statement is true: "For any x, if a⋅x2+b⋅x+c=0, then x is an integer."
别看题目短,其实它考虑的情况真的很多,让命题成立。对于所有的X 如果......则....
这个就是蕴含式如果 a⋅x2+b⋅x+c=0 则 x为整数。
表达出来是 a⋅x2+b⋅x+c=0 -> x属于整数。
大家这道蕴含式可以前提为假,则这个命题就可以为真。
那么我们可以进行对合法情况进行枚举,前提为真时,实事求是地把情况枚举出来。
最后把前提为假的直接就输出YES即可。。。代码参考当时别人做的博客。尊重原创。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int T;
scanf("%d",&T);
while(T--){
double a,b,c;
scanf("%lf%lf%lf",&a,&b,&c);
if(a==0){
if(b==0&&c==0){
printf("NO\n");
}else if(b==0){
printf("YES\n");
}else if(-c/b==int(-c/b)){
printf("YES\n");
}else{
printf("NO\n");
}
}else if(b*b-4*a*c>=0){
int x=0;
for(int i=-10;i<=10;i++){
if(a*i*i+b*i+c==0){
x++;
}
}
if((x==2&&b*b-4*a*c>0)||(x==1&&b*b-4*a*c==0)){
printf("YES\n");
}else{
printf("NO\n");
}
}else{
printf("YES\n");
}
}
return 0;
}