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

Posted kirinsb

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
");
        else printf("NO
");
    }
    return 0;
}
/*
Input:
3
1 3
5 0 1 2 3 4
5 0 1 2 4 5

Output:
YES
YES
NO
*/

 

以上是关于SPOJ - POLYNOM Polynomial(数论乱搞)题解的主要内容,如果未能解决你的问题,请参考以下文章

为自己的数据类型定义 Ord 实例

numpy polynomial.Polynomial.fit() 给出的系数与 polynomial.polyfit() 不同

scipy.stats.linregress、numpy.polynomial.polynomial.polyfit 和 statsmodels.api.OLS 之间的差异

polynomial time

(转)Polynomial interpolation 多项式插值

HDU6668 Polynomial(模拟)