输入:
一组测试样例。
第一行n,表示多项式的度(0~20);
下一行给出n + 1个整数,an a[n-1], …, a[0],表示多项式系数(-1000~1000,且不等于0)
输出:
如果不可化简输出YES,否则输出NO。
(第一次交的时候搞反了……)
思路:
如果n < 2,无法化简,YES;
如果n > 2,一定可以化简,这是能够证明的,NO;(实系数多项式因式分解定理 每个次数大于零的实系数多项式都可以在实数域上唯一地分解成一些一次或二次不可约因式的乘积。)
如果n - 2,要根据韦达定理判断是否可以分解因式,b ^ 2 - 4ac >= 0,可以分解;否则不行。
POJ 代码
#include<iostream>
#include<cstdio>
using namespace std;
int main(){
int t, n, a, b, c;
scanf("%d", &n);
t = n + 1;
while(t--)
scanf("%d%d%d", &a, &b, &c);
if(n < 2)
puts("YES");
else if(n > 2)
puts("NO");
else{
if((b * b - 4 * a * c) >= 0)
puts("NO");
else
puts("YES");
}
return 0;
}
ZOJ 代码
#include<iostream>
#include<cstdio>
using namespace std;
int main(){
int T;
scanf("%d", &T);
while(T--){
int n, a, b, c;
scanf("%d", &n);
if(n < 2){
n++;
while(n--)scanf("%d", &a);
puts("YES");
if(T >= 1)puts("");
continue;
}
if(n > 2){
n++;
while(n--)scanf("%d", &a);
puts("NO");
if(T >= 1)puts("");
continue;
}
scanf("%d%d%d", &a, &b, &c);
//cout<<a<<' '<<b<<' '<<c<<' '<<endl;
if((b * b - 4 * a * c) >= 0)
puts("NO");
else
puts("YES");
if(T >= 1)
puts("");
}
return 0;
}