Read problems statements in Mandarin Chineseand Russian.

Little Elephant from Zoo of Lviv likes to watch movies.

There are N different movies (numbered from 0 to N − 1) he wants to watch in some order. Of course, he will watch each movie exactly once. The priority of ith movie is Pi.

A watching of a movie is called exciting if and only if one of the following two conditions holds:

  • This is the first watching.
  • The priority of this movie is strictly greater than the maximal priority of the movies watched so far.

Let us call the number of exciting watchings the excitingness of the order.

Help him to find the number of different watching orders whose excitingness does not exceed K. Since the answer can be large, print it modulo 1000000007 (109+7).

Input

The first line of input contains an integer T, denoting the number of test cases. Then T test cases follow.

The first line of each test case contains two space-separated integers N and K. The next line contains N space-separated integers P1P2, ..., PN.

Output

For each test case, print the number of different watching orders having at most Kexcitingness modulo 1000000007 (109+7).

Constraints

  • 1 ≤ T ≤ 10
  • 1 ≤ K ≤ N ≤ 200
  • 1 ≤ Pi ≤ 200

Example

Input:
2
3 1
3 1 2
4 3
1 2 2 3 Output:
2
24

Explanation

In the first case, there are two boring watching orders whose excitingness not greater than K=1[3, 1, 2][3, 2, 1]. Both watching orders have one excitingwatching: the first watching.

In the second case, every watching order has at most 3 excitingness.

一般的排列问题都可以转化成把元素以一定顺序插入进序列来做。这个题如果按照升序来插入的话,后插入的元素会挡住前面插入的元素,没法算;

而如果按照降序插入的话,影响是很好计算的:插入的元素不会挡住前面的,而且只有放在最前面会对 激动值 +1。

有很多重复的元素的话,我们就可重集组合一下,不过对激动值的 影响最大还是1,因为相同元素也会挡住。

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=405;
const int ha=1000000007;
int jc[maxn],ni[maxn],T,n,k;
int dp[maxn],num[maxn],N,f[maxn]; inline int add(int x,int y){
x+=y;
return x>=ha?x-ha:x;
} inline int ksm(int x,int y){
int an=1;
for(;y;y>>=1,x=x*(ll)x%ha) if(y&1) an=an*(ll)x%ha;
return an;
} inline void getC(){
jc[0]=1;
for(int i=1;i<=400;i++) jc[i]=jc[i-1]*(ll)i%ha;
ni[400]=ksm(jc[400],ha-2);
for(int i=400;i;i--) ni[i-1]=ni[i]*(ll)i%ha;
} inline int C(int x,int y){ return x<y?0:jc[x]*(ll)ni[y]%ha*(ll)ni[x-y]%ha;} inline void init(){
memset(dp,0,sizeof(dp));
memset(num,0,sizeof(num));
} inline void solve(){
dp[0]=1;
for(int i=200,A=0,P=0,tot,lef;i;i--) if(num[i]){
lef=C(A+num[i]-1,num[i])*(ll)jc[num[i]]%ha,tot=add(C(A+num[i],num[i])*(ll)jc[num[i]]%ha,ha-lef); memset(f,0,sizeof(f));
for(int j=min(P,k);j>=0;j--){
f[j+1]=add(f[j+1],dp[j]*(ll)tot%ha);
f[j]=add(f[j],dp[j]*(ll)lef%ha);
}
memcpy(dp,f,sizeof(f)); P++,A+=num[i];
} int ans=0;
for(int i=0;i<=k;i++) ans=add(ans,dp[i]);
printf("%d\n",ans);
} int main(){
getC();
scanf("%d",&T);
while(T--){
init(),scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++) scanf("%d",&N),num[N]++;
solve();
}
return 0;
}

  

CodeChef - LEMOVIE Little Elephant and Movies的更多相关文章

  1. CodeChef Little Elephant and Movies [DP 排列]

    https://www.codechef.com/FEB14/problems/LEMOVIE 题意: 对于一个序列,定义其“激动值”为序列中严格大于前面所有数的元素的个数.给定n个数p1;,p2.. ...

  2. CodeChef LEMOVIE

    题意:给你n个数字(下标不同数值相同的数字应当被认为是不同的数字),有n!种排列方式.每种排列方式的价值定义为:第一次出现时比前面的所有数字都大的数值个数. 比如1,2,2,3这个排列中,1,2,3这 ...

  3. scau 2015寒假训练

    并不是很正规的.每个人自愿参与自愿退出,马哥找题(马哥超nice么么哒). 放假第一周与放假结束前一周 2015-01-26 http://acm.hust.edu.cn/vjudge/contest ...

  4. codechef Little Elephant and Permutations题解

    The Little Elephant likes permutations. This time he has a permutation A[1], A[2], ..., A[N] of numb ...

  5. CodeChef Little Elephant and Mouses [DP]

    https://www.codechef.com/problems/LEMOUSE 题意: 有一个n *m的网格.有一头大象,初始时在(1,1),要移动到(n,m),每次只能向右或者向下走.有些格子中 ...

  6. codechef Little Elephant and Bombs题解

    The Little Elephant from the Zoo of Lviv currently is on the military mission. There are N enemy bui ...

  7. CodeChef:Little Elephant and Colored Coins

    类似墨墨的等式 设f[2][j][k]表示a[i].c是否和当前颜色相同,到当前枚举到的颜色为止,颜色数为j,对mnv取模为k的最小数 这是个无限循环背包,用spfa优化 #include<cs ...

  8. CodeChef Little Elephant and Balance

    Given an array A1,A2...AN, you have to print the size of the largest contiguous subarray such that L ...

  9. 【BZOJ-3514】Codechef MARCH14 GERALD07加强版 LinkCutTree + 主席树

    3514: Codechef MARCH14 GERALD07加强版 Time Limit: 60 Sec  Memory Limit: 256 MBSubmit: 1288  Solved: 490 ...

随机推荐

  1. luogu P2574 XOR的艺术 (线段树)

    luogu P2574 XOR的艺术 (线段树) 算是比较简单的线段树. 当区间修改时.\(1 xor 1 = 0,0 xor 1 = 1\)所以就是区间元素个数减去以前的\(1\)的个数就是现在\( ...

  2. Pycharm快捷键及Python常用转义符

    不管是windows.xshell或者pycharm,学会使用快捷键都会使学习工作达到事半功倍的效果.这篇博客收集了部分常用的pycharm快捷键,分享给大家,希望对大家有用. 1. 常用快捷键 Py ...

  3. PyCharm 社区版创建Django项目的一个方法

    PyCharm 社区版创建项目无法选择Django等项目,只能选择Python项目. 你在进行练习的时候为了方便,可以用过期了的PyCharm专业版在可用的30分钟内创建社区版本不支持的项目,再用Py ...

  4. 使用VMware克隆出来的新虚拟机无法联网-问题解决记录

    背景: 使用VMware克隆出来的新虚拟机无法联网,重启网卡出现如下图提示: 继续输入#ifup ens33 提示: ens33: unknown interface: No such device ...

  5. java之 List、Set、ArraylIst、 LinkList

    LIst与set概述 List Set 1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构.      2.对于随机访问get和set,ArrayList优于 ...

  6. Python9-继承1-day24(大年初一)

    #面向对象编程:'''思想:角色的抽象,创建类,创建角色,面对对象的关键字class 类名: 静态属性 = ‘aaa' def __init__(self):pass 类名.静态属性 ———存储在类的 ...

  7. 代理授权验证_web客户端授权验证

    HTTPPasswordMgrWithDefaultRealm() HTTPPasswordMgrWithDefaultRealm()类将创建一个密码管理对象,用来保存 HTTP 请求相关的用户名和密 ...

  8. 【01】webpack的安装过程截图

    [05](moyu:最好安装在C盘.默认的安装地址.) []全局安装 01,首先要安装Node.js, Node.js 自带了软件包管理器 npm. 02,Webpack 需要 Node.js v0. ...

  9. 【01】国内外git托管平台(总结by魔芋)

    [01]国内git托管平台介绍 01, github:代码协作平台,协同开发. 代码托管平台. git:项目版本控制系统 02, 最好的托管方式: github 关闭或小众的托管方式: geakit( ...

  10. Appium+python自动化-环境搭建

    一.前言 本文是在windows10  X64系统下搭建appium,流程如下: 1.安装jdk1.8+python3.6 (64位) 2.安装node.js 3.安装Appium-desktop 4 ...