就是对于一个n次序列:
例如f(i)=a0+a1*i+(a2*(i^2))+(a3*(i^3))+.......+(an-1*(i^(n-1)))+(an*(i^n));
给出前x个数,怎么判断这x个数的n次式是否合理:
k次多项式的k+1阶差分都是零。然后k阶差分就不全是0;
实际解决办法是:当给你的数的个数x<=n的时候就是合理的;
x>=n的时候k阶差分就不全是0:k+1阶差分都是零
例题:
https://ac.nowcoder.com/acm/contest/102460/B
这是我的答案:
#include <iostream>
#include <vector>
#include<cstring>
using namespace std;
int main() {
int n;
cin>>n;
int brr[200][6];
memset(brr,0,sizeof(brr));
for(int i=0; i<n; i++)cin>>brr[i][0];
if(n<=4)cout<<"YES";
else if(n>=5) {
int r=0;
int ji=0;
while(1) {
for(int i=0; i<n-1; i++) {
brr[i][ji+1]=brr[i+1][ji]-brr[i][ji];
}
ji++;
r++;
if(r==4) {
bool p=false;
for(int i=0; i<n-4; i++)if(brr[i][ji]!=0)p=true;
if(!p) {
cout<<"NO";
return 0;
}
}
if(r==5) {
bool p=true;
for(int i=0; i<n-5; i++) {
if(brr[i][ji]!=0) {
p=false;
break;
}
}
if(p)cout<<"YES";
else cout<<"NO";
return 0;
}
}
}
return 0;
}