LINK:牛牛与序列

(牛客div1的E题怎么这么水... 还没D难.

定义一个序列合法 当且仅当存在一个位置i满足 $a_i>a_,a_j<a_$且对于所有的位置i,$1 \leq a_i\leq k$

人话解释:一个合法序列 每个数字都在1~k之间 且有两个相邻数字是递增关系两个相邻数字是递减关系。

发现我们枚举某两个位置递增递减再进行计数会重复 而且很难减掉重复方案。这个不能代表元容斥。

考虑总方案-不合法方案。发现不合法方案就两种不增,不降.

显然不增翻转一下就是不降 考虑求出不增的方案数 考虑从前往后放数字且数字大小递减 每个数字都可以分到一些位置。

容易发现是一个隔板法 所以总方案数为C(n+k-1,k-1).

值得注意的是 最后要加上k 因为所有数字都相同时 同时为不增和不降。

这个组合数可以O(k)计算。可以通过此题。

而题解上给了一个dp 这个dp也很显然f[i][j]表示前i个数字使用的最小数字为j的方案数。

最后答案为$\sum_^f[n][i]$ 更扯得是 需要打标发现是上述的组合数 再接一个数学归纳法证明。

我觉得很麻烦 可能正因为如此 出题人才把这道题放到E吧.

const ll MAXN=100010;
ll n,k,T;
ll ans;
inline ll ksm(ll b,ll p)
{
ll cnt=1;
while(p)
{
if(p&1)cnt=cnt*b%mod;
b=b*b%mod;p=p>>1;
}
return cnt;
}
signed main()
{
freopen("1.in","r",stdin);
get(T);
while(T--)
{
get(n);get(k);
ans=ksm(k,n%(mod-1))+k;
ll cnt=1,ww=1;
fep(n+k-1,n+1,i)cnt=cnt*i%mod,ww=ww*(i-n)%mod;
ww=ksm(ww,mod-2);
putl(((ans-cnt*ww%mod*2%mod)%mod+mod)%mod);
}
return 0;
}

最新文章

  1. [原创]mybatis详解说明
  2. Android学习---数据库的增删改查(sqlite CRUD)
  3. WCF初探-10:WCF客户端调用服务
  4. (转)Unity3d中的属性(Attributes)整理
  5. MVC项目中应用富文本编辑器UEditor中的几个坑
  6. C实现类封装、继承、多态
  7. python 传入参数返回的时候好像有些时候会出现莫名其妙的循环
  8. SQL Server 内存使用量下降问题
  9. winform使用xml作为数据源
  10. 一起C语言中程序时序问题的排查过程
  11. 采用objdump调试驱动程序
  12. 拿到月薪30K,必选一些Python好书!
  13. java continue break 关键字 详解 区别 用法 标记 标签 使用 示例 联系
  14. puppet 横向扩展(一)
  15. 在windows下安装Redis
  16. 如何修改 FastAdmin 弹窗大小?
  17. dp练习(9)——最大乘积
  18. 如使用Typescript撸Vue(Vue2 + TS +TSX+CSS module)
  19. swift 分页视图
  20. 利用html5调用本地摄像头拍照上传图片[转]

热门文章

  1. NOI 2003 逃学的小孩 (树的直径)
  2. python—模块optparse的用法
  3. 蒲公英 &#183; JELLY技术周刊 Vol.13 跟 VSCode 学习如何开发大型 IDE 项目
  4. Python GIL(全局解释器锁)
  5. WPF中国地图
  6. 初学linux常见问题
  7. shell专题(一):Shell概述
  8. web 部署专题(五):nginx 安装(一) 树莓派
  9. Python2爬取学生名单
  10. 小书MybatisPlus第4篇-表格分页与下拉分页查询