SPOJ - POLYNOM Polynomial(数论乱搞)题解

题意 :给你n个数,问你是否存在一个多项式(最多三次方)满足f(i)= xi。

思路:讲一个神奇的思路:

x- (x - 1)3 = 3x2 - 3x + 1

x2 - (x - 1)2 = 2x + 1

x - (x - 1) = 1

1 - 1 = 0

看了上面这么多,其实已经可以发现一件事情了:如果相邻常数减一次那么就是0;相邻一次式减一次降为常数,减两次为0;相邻二次式减一次降为一次式,减两次降为常数,减三次....

由此我们可以知道,如果存在一个多项式(最多三次方)满足f(i)= xi,那么我相邻的数相减4次必为0,如果不满足,那肯定不是同个式子里的

代码:

#include<cstdio>
#include<set>
#include<vector>
#include<cmath>
#include<queue>
#include<cstring>
#include<algorithm>
typedef long long ll;
using namespace std;
const int maxn = 500 + 5;
const double INF = 0x3f3f3f3f;
const ll MOD = 1000000007;
ll num[maxn];

int main(){
    int T;
    scanf("%d", &T);
    while(T--){
        ll n;
        scanf("%lld", &n);
        for(int i = 1; i <= n; i++)
            scanf("%lld", &num[i]);
        for(int i = 1; i <= 4; i++){
            for(int j = n ;j > i; j--)
                num[j] = num[j] - num[j - 1];
        }
        bool flag = true;
        for(int i = 5; i <= n; i++){
            if(num[i]){
                flag = false;
                break;
            }
        }
        if(flag) printf("YES\n");
        else printf("NO\n");
    }
    return 0;
}
/*
Input:
3
1 3
5 0 1 2 3 4
5 0 1 2 4 5

Output:
YES
YES
NO
*/

 

posted @ 2018-09-05 23:32  KirinSB  阅读(294)  评论(0编辑  收藏  举报