题面

https://www.lydsy.com/JudgeOnline/problem.php?id=5015

题解

首先把k=1,k=2,k=3的手推一遍

然后发现一些规律 就是数列可以表示成$a_i=2a_{i-1}+f(i)$的形式

然后f(i)算一算之后我们得到

然后我们试图求这个东西的通项公式

我们要把它变成$a_i+f(i)=2(a_{i-1}+f(i-1))$的形式就好了

那么我们设

一共k个变量 对于每一个$n^i$我们根据他的系数可以列一个方程 一共k个方程

所以高斯消元把它解出来就结束了

Code

 #include<bits/stdc++.h>
using namespace std;
typedef long long ll; ll read(){
ll x=,f=;char c=getchar();
while(c<'' || c>''){if(c=='-')f=-;c=getchar();}
while(c>='' && c<=''){x=x*+c-'';c=getchar();}
return x*f;
} const ll mod=1000000007ll;
ll n;
int k;
ll mat[][]; ll calc(ll a,ll b){
ll ret=;
for(int i=;i<=b;i++)
ret=ret*(a-i+)/i;
return ret%mod;
} ll ksm(ll a,ll b){
if(b==) return ;
ll nw=;
if(b==) return a%mod;
if(b&) nw=a;
ll ret=ksm(a,b/);
return ret*(nw%mod)%mod*ret%mod;
} inline ll pd(ll x){
if(x&) return -;
return ;
}
ll ans[]; int main(){
#ifdef LZT
//freopen("in","r",stdin);
#endif
n=read(),k=read();
for(int i=;i<=k;i++){
mat[i][]=calc(k,i)*pd(i+);
mat[i][i]--;
int st=i-;
for(int j=;j<=i;j++)
mat[i][j]+=(*calc(k-j,st)*pd(st--));
}
for(int i=;i<=k;i++){
ll nw=;
for(int j=;j<i;j++) nw=nw+mat[i][j]*ans[j];
ans[i]=(mat[i][]-nw)/mat[i][i];
}
for(int i=;i<=k;i++)
ans[i]=ans[i]%mod;
ll res=ans[k]*ksm(,n)%mod;
for(int i=;i<=k;i++){
ll nw=ans[i]*ksm(n,k-i)%mod;
res=(res-nw+mod)%mod;
}
printf("%lld\n",res); return ;
}

Review

这样做的动机?

就是先把k=2,k=3的情况推了一下 然后发现很相似 f(i)的次数与k相关而k很小 只有10

然后就试图用程序表达手推的过程 发现消元就可以了 然后就做了出来

最新文章

  1. WPF CheckBox样式 ScrollViewer样式 WrapPanel、StackPanel、Grid布局
  2. nyoj_34_韩信点兵
  3. Codeforces Round #250 (Div. 2) C、The Child and Toy
  4. 20145320 《Java程序设计》第2周学习总结
  5. 将Rmarkdown文件转为pdf文件
  6. CSharp设计模式读书笔记(17):迭代器模式(学习难度:★★★☆☆,使用频率:★★★★★)
  7. ubuntu显卡驱动安装及设置
  8. idea 远程调试
  9. 201521123087《Java程序设计》 第八周学习总结
  10. Powerdesigner+PostgreSQL
  11. MongoDB自学(3)
  12. .net 服务因为GC时遇到的问题和解决办法
  13. postMessage使用方法
  14. JavaScript之WebSocket技术详解
  15. oracle导入大sql文件
  16. C#:WebBrowser控件的使用教程及相关问题整理
  17. M公司的回忆录——L公司
  18. Cannot load supported formats: Cannot run program &quot;svn&quot;
  19. 2825 codevs危险的组合(递推)
  20. Hibernate基础(一)

热门文章

  1. 【BZOJ】1007 水平可见直线
  2. Android GUI系统学习1:Gralloc
  3. sanic官方文档解析之websocket(网络套接字)和handle decorators(处理程序装饰器)
  4. linux 一个超简单的makefile
  5. bzoj3727: PA2014 Final Zadanie
  6. netty codec部分剖析
  7. php判断某个变量是否存在
  8. [POI 2007] 办公楼
  9. Makefile的引入及规则
  10. java try&#183;&#183;&#183;&#183;&#183;catch&#183;&#183;&#183;&#183;&#183;异常处理学习