zoukankan      html  css  js  c++  java
  • 51nod1161 Partial Sums

    开始想的是O(n2logk)的算法但是显然会tle。看了解题报告然后就打表找起规律来。嘛是组合数嘛。时间复杂度是O(nlogn+n2)的

    #include<cstdio>
    #include<cstring>
    #include<cctype>
    #include<algorithm>
    using namespace std;
    #define rep(i,s,t) for(int i=s;i<=t;i++)
    #define dwn(i,s,t) for(int i=s;i>=t;i--)
    #define clr(x,c) memset(x,c,sizeof(x))
    #define ll long long
    int read(){
    	int x=0;char c=getchar();
    	while(!isdigit(c)) c=getchar();
    	while(isdigit(c)) x=x*10+c-'0',c=getchar();
    	return x;
    }
    const int nmax=5e3+5;
    const int mod=1e9+7;
    ll ans[nmax],a[nmax];
    ll pow(ll x,int n){
    	ll res=x;--n;
    	while(n){
    		if(n&1) res=res*x%mod;
    		x=x*x%mod;n>>=1;
    	}
    	return res;
    }
    int main(){
    	int n=read(),m=read();--m;
    	ans[1]=1;
    	rep(i,2,n) ans[i]=ans[i-1]*(i+m-1)%mod*pow(i-1,mod-2)%mod;
    	ll tp,u;
    	rep(i,1,n) a[i]=read();
    	rep(i,1,n){
    		tp=0;
    		rep(j,1,i) tp=(tp+ans[j]*a[i-j+1])%mod;
    		printf("%lld
    ",tp);
    	}
    	return 0;
    }
    

      

    题目来源: CodeForces
    基准时间限制:2 秒 空间限制:131072 KB 分值: 80 难度:5级算法题
     收藏
     关注
    给出一个数组A,经过一次处理,生成一个数组S,数组S中的每个值相当于数组A的累加,比如:A = {1 3 5 6} => S = {1 4 9 15}。如果对生成的数组S再进行一次累加操作,{1 4 9 15} => {1 5 14 29},现在给出数组A,问进行K次操作后的结果。(每次累加后的结果 mod 10^9 + 7)
     
    Input
    第1行,2个数N和K,中间用空格分隔,N表示数组的长度,K表示处理的次数(2 <= n <= 5000, 0 <= k <= 10^9, 0 <= a[i] <= 10^9)
    Output
    共N行,每行一个数,对应经过K次处理后的结果。每次累加后mod 10^9 + 7。
    Input示例
    4 2
    1
    3
    5
    6
    Output示例
    1
    5
    14
    29
  • 相关阅读:
    前端 network
    C语言的安装及使用
    c语言
    mongodb
    大型网站--负载均衡架构
    双机热备ROSE HA工作原理
    Linux vmstat命令实战详解
    管理员必备的20个Linux系统监控工具
    linux top命令详解
    linux命令TOP参数load average详解[转]
  • 原文地址:https://www.cnblogs.com/fighting-to-the-end/p/5866362.html
Copyright © 2011-2022 走看看