zoukankan      html  css  js  c++  java
  • 2017清华机试题——多项式求和(polynomial)

    看完了题目 让我们来推导一下公式吧! 

     推完了公式辣,来分析一下复杂度。

    O(R(n,i)) = O(R(n-1,i-1)) + O(R(n-1,i-2)) + ...

    这东西是递归的,递归基是i=0或n=0。

    所以,复杂度是O(i^2)的!i的大小最大是100(i的上限是m)。。。听起来这个复杂度还有点合理。

    接下来就写代码。

    code:

    #include <bits/stdc++.h>
    using namespace std;
    
    long long mod = 1e9 + 7;
    long long b[105];
    long long power(long long num,long long k) {
        num %= mod;
        long long ans = 1;
        while(k) {
            if(k & 1) ans = ans * num % mod;
            k >>= 1;
            num = num * num % mod;
        }
        return ans;
    }
    long long C(int x,int y) {
        //懒得写复杂度低的了,反正就100
        long long ans = 1;
        for(int i = 0;i < y;++i) {
            ans = ans * (x-i) % mod;
            ans = ans * power(i+1,mod-2) % mod;
        }
        return ans;
    }
    long long a;
    long long R(long long n,long long k) {
        if(n == 0) {
            if(k == 0) return 1;
            return 0;
        }
        if(k == 0) {
            long long ans = (power(a,n+1)-a+mod)%mod;
            ans = ans * power(a-1,mod-2) % mod;
            return ans;
        }
    
        long long ans = (a - power(a,n+1)*power(n,k)%mod + mod ) % mod;
        for(int i = 0;i <= k-1;++i) {
            ans = (ans + a * C(k,k-i) % mod * R(n-1,i)) % mod;
        }
        ans = mod - ans;
        ans = ans * power(a-1,mod-2) % mod;
        return ans;
    }
    
    int main() {
        long long n,m;
        cin >> n >> m >> a;
        long long ans = 0;
        for(int i = 0;i <= m;++i) {
            scanf("%lld",&b[i]);
            ans += b[i] * R(n,i) % mod;
            ans %= mod;
        }
        cout << (ans+b[0])%mod << endl;
        return 0;
    }

     对了下样例,反正样例都对了,假装自己已经ac

    upd:对不起,代码写错了。。。如上图推导,那一堆东西/(1-a)的部分,a如果是1的话会出现除0的错误,并且a==1时等比数列求和公式也是不能用的。

    在a=1时应该特殊讨论一下。。。这个坑就留给小朋友们啦!加油!冲鸭!

  • 相关阅读:
    网站常见的反爬虫和应对方法
    网站反爬虫
    webmagic的设计机制及原理-如何开发一个Java爬虫
    腾讯社区搜索架构演进
    搜索引擎评估与互联网用户行为建设
    深层网络搜索核心技术研讨
    Solr与Cassandra二级缓存实践
    .NET的前世今生与将来
    技术人生的职场众生相
    爆栈之旅
  • 原文地址:https://www.cnblogs.com/obob/p/12400162.html
Copyright © 2011-2022 走看看