https://vjudge.net/problem/Gym-102222I

居然补到个防ak,刚开始不知道啥是循环左移右移(只能移一次),不好想。。

题意:以冒泡排序为背景 给你n,k 问在1~n的n个数的全排列中有几个能经过k次遍历就排好序了(这里排好序是指最长上升子序列长度至少为n-1

for(int i=1;i<n;++i) if(a[i]>a[i+1]) swap(a[i],a[i+1]) 这算一次遍历
结果%mod(也给出来了

题解:冒泡k趟之后,新序列的第i项是原序列前min(i+k,n)项中未在新序列前i-1项中出现过的最小值。新序列的LIS>=n-1相当于在序列1,2,...,n中选择至多一个区间循环左移或右移。

于是可以枚举新序列,算出每个新序列元素在原序列中可能的位置个数,利用乘法原理计算方案数。

模拟下1,2,3,4,5,假设k=1

bit[4]=2^4是12345对应的原序列数量,此时就是sorted

接下来看almost sorted,

左移时,区间长度是2,3,4,假设len=2的话21345,13245,12435,len=3的话23145,13425...

右移时,2重复了不用算,3,4算一下就行了。

最后由于后k个已经定了,刚才算的原串数量还要扩倍。。例如k=2只算了12345没算12354...

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
int T,n,k,mod;
LL bit[55];
int main()
{
scanf("%d",&T);
for (int z=1;z<=T;++z)
{
scanf("%d%d%d",&n,&k,&mod);
printf("Case #%d: ",z);
if (k>=n)
{
LL ans=1;
for (int i=1;i<=n;++i) ans=ans*i%mod;
printf("%lld\n",ans);
continue;
}
bit[0]=1;
for (int i=1;i<=n;++i) bit[i]=1LL*bit[i-1]*(k+1)%mod;
LL ans=0;
//sorted
ans=bit[n-k];
//left shift
for (int len=2;len<=n-k;++len)
ans+=1LL*(n-k-len+1)*bit[n-k-1]%mod,ans%=mod;
//right shift
for (int len=3;len<=n-k;++len)
ans+=1LL*(n-k-len+1)*bit[n-k-len+1]%mod,ans%=mod;
//last k
for (int i=1;i<=k;++i) ans=ans*i%mod;
printf("%lld\n",ans);
}
return 0;
}

最新文章

  1. spring mvc 获取页面日期格式数据
  2. Android中自定义属性(attrs.xml,TypedArray的使用)
  3. PHP中使用redis执行lua脚本示例
  4. 【转载】C++ IO库
  5. 2015苹果WWDC开发者大会
  6. curl Protocol &#39;http not supported or disabled in libcurl
  7. Eralng 小知识点
  8. Java基础知识强化之集合框架笔记17:List集合的特有的遍历功能
  9. Cracking the coding interview--Q1.1
  10. Just Finish it up UVA - 11093
  11. xml的xPath解析规则
  12. 【c#】RabbitMQ学习文档(四)Routing(路由)
  13. MT【320】依次动起来
  14. Pytorch报错记录
  15. python zeros用法实例
  16. go基础之数组和切片
  17. 解决微软surface pro在某些情况下wifi转输速度过慢的问题 - z
  18. 自学Aruba7.1-Aruba安全认证-WPA2-PSK认证(web页面配置)
  19. elasticsearch 口水篇(8)分词 中文分词 ik插件
  20. 元素高度、宽度获取 style currentStyle getComputedStyle getBoundingClientRect

热门文章

  1. jmeter Linux环境执行总报错 cannot allocate memory
  2. 11. Java常用类
  3. 【POJ - 3258】River Hopscotch(二分)
  4. Linux及Windows下ActiveMQ下载与安装教程
  5. tensorflow学习笔记——使用TensorFlow操作MNIST数据(2)
  6. Python 命令行之旅 —— 初探 argparse
  7. powerdesign进军(三)--mysql驱动配置
  8. 就当我在扯淡,宇宙的bug
  9. 偏差和方差以及偏差方差权衡(Bias Variance Trade off)
  10. MyBatis的parameterType传入参数类型