某模拟题

https://www.luogu.org/problemnew/show/U16301
只出了30%的数据
但是不好想
这个涉及到高阶等差数列
但是前置知识非常浅显
我们只需要求出数列中前后两项的差值构成一个新的数列
然后这个数列为低一阶的数列
然后知道这个数列变成一阶等差数列
然后就求出这个多项式的函数中的最高项和最高项系数
然后依次求出低一项的系数

还有另外一种做法是利用高阶方程求解方程的每一个系数
方程
\(a_k x^k+a_{k-1}a^{k-1}+\cdots \cdots a_1x+a_0=S_1,x=1\)
\(a_k x^k+a_{k-1}a^{k-1}+\cdots \cdots a_1x+a_0=s_2,x=2\)
\(\cdots\)
\(\cdots\)
\(a_k x^k+a_{k-1}a^{k-1}+\cdots \cdots a_1x+a_0=s_{k-1},x=k-1\)
\(a_k x^k+a_{k-1}a^{k-1}+\cdots \cdots a_1x+a_0=s_k,x=k\)
\(\because n元方程组至少需要n个不同的方程才能解出一组解\)
\(\therefore 只需要k组方程\)
那么根据n阶行列式的定义及性质
\(k\)组方程的解\(\{a_1,a_2,\cdots \cdots ,a_{k-1},a_k\}\)
\(a_i=\frac{D}{D_i}\)
所以这个题目就解决了
求解行列式的方法有很多
复杂度有所不同
有最朴素的将行列式展开
也可以转化为三角行列式
也可以根据行列式的多种解法

所以这个复杂度比较玄学
目测可以通过最大数据

#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<cmath>
#define N 1005
using namespace std;

int maxl;
int n;
int ans[N];
int maxsum=1000;
int ss[N];
int anssum=0;

int q_pow(int x,int b) {
    int ret=1,tmp=x;
    while(b){
        if(b&1)ret=ret*tmp;
        tmp*=tmp;
        b>>=1;
    }
    return ret;
}

int digui(int s[],int nn,int sum){
    int flag=0;
    for(int i=1;i<nn;++i)
        if(s[i-1]!=s[i])
            flag=1;
    if(!flag){
        maxsum=sum;
        return s[0];
    }
    int s1[N];
    for(int i=1;i<nn;++i)
        s1[i-1]=s[i]-s[i-1];
    return digui(s1,nn-1,sum+1);
}

bool kan(){
    int flag=0;
    for(int i=0;i<n-1;++i)
        if(ss[i]!=ss[i-1])
            flag=1;
    return !flag;
}

void Quit(){
    for(int i=1;i<=maxl+1;++i)
        cout<<ans[i]<<' ';
    exit(0);
}

int fid(int i){
    int ans=1;
    for(int j=1;j<=i;++j)
        ans*=j;
    return ans;
}

int main(){
    cin>>n;
    for(int i=0;i<N&&i<n;++i)cin>>ss[i];
    while(1){
        if(!kan()){
            ans[++anssum]=digui(ss,n,0)/fid(maxsum);
            maxl=max(maxl,maxsum);
            for(int i=0;i<n;++i){
                if(maxl-anssum<0)Quit();
                ss[i]-=ans[anssum]*q_pow(i+1,maxl-anssum+1);
            }
        }
        else break;
    }
    Quit();
    return 0;
}

posted @ 2017-11-25 16:07  Grary  阅读(107)  评论(0编辑  收藏  举报
博客园 首页 私信博主 编辑 关注 管理 新世界