Permutations

Time Limit: 20000/10000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others)
SubmitStatus

Problem Description

给出两个正整数N、K,问存在多少个长度为N的排列,满足其峰顶数目为K。所谓排列就是有一个序列a[1] ...a[N],每个数均不相同,且都是1

<= a[i] <= N,a[i]是峰顶的意思是 a[i] > a[i - 1] && a[i] > a[i + 1],对于边界,我们假设a[0] = -1000000000 和 a[N +

1] = -1000000000

Input

多组数据,每组数据一行,N,K(1 <= N <= 10^18, 1 <= K <= 30)

Output

每组数据一行,你的答案 % 239

Sample Input

5 1
5 2
3 1
10 3

Sample Output

16
88
4
131

Hint

比如对于排列1 3 2 4 5,a[2] = 3和a[5] = 5都是峰顶,因此这个排列峰顶数目为2
 
 
 #include <iostream>
#include <string.h>
#include <algorithm>
#include <math.h>
#include <stdio.h>
using namespace std;
#define ll long long
#define MAX 32
#define mod 239
struct matrix
{
int a[MAX][MAX];
} origin,res,anss,ansa;
matrix multiply(matrix x,matrix y)
{
matrix temp;
memset(temp.a,,sizeof(temp.a));
int i,j,k;
for(k=; k<MAX; k++)
for(i=; i<MAX; i++)
if(x.a[i][k])
for(j=; j<MAX; j++)
temp.a[i][j]+=x.a[i][k]*y.a[k][j]%mod,temp.a[i][j]%mod;
return temp;
}
void calc(ll x)
{
memset(res.a,,sizeof(res.a));
int i;
for(i=; i<MAX; i++)
res.a[i][i]=;
while(x)
{
if(x&)
res=multiply(res,origin);
origin=multiply(origin,origin);
x>>=;
}
}
void init(int x)
{
memset(origin.a,,sizeof(origin.a));
int i,j;
for(i=; i<MAX; i++)
{
j=i-;
origin.a[i][i]=*i;
origin.a[i][j]=(x-*j)%mod;
}
}
int dp[][]= {},ans;
void init1()
{
int i,j;
dp[][]=;
for(i=; i<; i++)
for(j=; j<i; j++)
dp[i][j]=((dp[i-][j]**j)%mod+(dp[i-][j-]*max(,i-*j+))%mod)%mod;
}
int main()
{
init1();
ll n,k,i,m,j,kk;
while(~scanf("%lld%lld",&n,&k))
{
if(n<)
{
printf("%d\n",dp[n][k]);
continue;
}
n-=;
ans=;
memset(anss.a,,sizeof(anss.a));
for(i=; i<MAX; i++)anss.a[i][i]=;
for(kk=; kk<; kk++)
{
init(kk);
anss=multiply(origin,anss);
if((n%)==(kk%))
{
for(i=; i<MAX; i++)
for(j=; j<MAX; j++)
ansa.a[i][j]=anss.a[i][j];
}
}
n/=;
if(n)
{
for(i=; i<MAX; i++)
for(j=; j<MAX; j++)
origin.a[i][j]=anss.a[i][j];
calc(n);
ansa=multiply(ansa,res);
}
for(j=; j<MAX; j++)
{
ans+=(dp[][j]*ansa.a[k][j])%mod;
ans%=mod;
}
printf("%d\n",ans);
}
}

Permutations 好题的更多相关文章

  1. LightOJ 1023 Discovering Permutations 水题

    http://www.lightoj.com/volume_showproblem.php?problem=1023 题意:26字母全排列 思路:用next_permutation或者思维想一下都可以 ...

  2. POJ 2470 Ambiguous permutations(简单题 理解题意)

    [题目简述]:事实上就是依据题目描写叙述:A permutation of the integers 1 to n is an ordering of these integers. So the n ...

  3. leetcode -- Permutations II TODO

    Given a collection of numbers that might contain duplicates, return all possible unique permutations ...

  4. 杭电ACM分类

    杭电ACM分类: 1001 整数求和 水题1002 C语言实验题——两个数比较 水题1003 1.2.3.4.5... 简单题1004 渊子赛马 排序+贪心的方法归并1005 Hero In Maze ...

  5. 转载:hdu 题目分类 (侵删)

    转载:from http://blog.csdn.net/qq_28236309/article/details/47818349 基础题:1000.1001.1004.1005.1008.1012. ...

  6. [Codeforces Educational Round 71]Div. 2

    总结 手速场...像我这种没手速的就直接炸了... 辣鸡 E 题交互,少打了个 ? 调了半个小时... 到最后没时间 G 题题都没看就结束了...结果早上起来被告知是阿狸的打字机...看了看题一毛一样 ...

  7. lintcode 中等题:permutations II 重复数据的全排列

    题目 带重复元素的排列 给出一个具有重复数字的列表,找出列表所有不同的排列. 样例 给出列表 [1,2,2],不同的排列有: [ [1,2,2], [2,1,2], [2,2,1] ] 挑战 使用递归 ...

  8. lintcode 中等题:permutations 全排列

    题目 全排列 给定一个数字列表,返回其所有可能的排列. 您在真实的面试中是否遇到过这个题? Yes 样例 给出一个列表[1,2,3],其全排列为: [ [1,2,3], [1,3,2], [2,1,3 ...

  9. LeetCode第[46]题(Java):Permutations(求所有全排列) 含扩展——第[47]题Permutations 2

    题目:求所有全排列 难度:Medium 题目内容: Given a collection of distinct integers, return all possible permutations. ...

随机推荐

  1. 如何快速的理解JavaScript闭包?

    先看问题 1. 在js中的作用域是什么? 作用域就是作用范围,作用空间.作用域分为全局作用域和局部作用域.(这个东西大家都明白) 如果把局部作用域比作一个国家,那么全局作用域就是地球,地球上除了那个国 ...

  2. Jmeter+Jenkins的聚合报告中添加QPS栏目显示

    1.进入jmeter/extras目录,修改 jmeter-results-detail-report_21.xsl   2.打开文件修改 如上所示,在文件中添加6个地方关于QPS的显示即可, 然后替 ...

  3. 再起航,我的学习笔记之JavaScript设计模式18(观察者模式)

    观察者模式 观察者模式(Observer): 又被称为发布-订阅者模式或消息机制,定义了一种依赖关系,解决了主体对象与观察者之间功能的耦合. 创建一个观察者对象 首先我们创建一个闭包对象,让其在页面加 ...

  4. 安装mariadb二进制程序

    author:JevonWei 版权声明:原创作品 下载mariadb软件包 https://downloads.mariadb.org/mariadb/5.5.57/ 一.创建用户和准备数据目录 1 ...

  5. JS源生代码“增删改查”之增

    51呢最近在做一个管理数据的,第一次接触到用JS的源代码去实现一些功能,才知道网页里的许多功能都是依赖于“增删改查”完成的,下面的几张图片就是对于增的演示: 下面是有关HTML的代码:这个主要是弹窗部 ...

  6. 实现Spring RESTful服务的SSL

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt386 本文介绍如何让基于Spring的REST服务变得SSL/TSL化. 首 ...

  7. javascript中=,==,与===的区别;以及特殊值NaN的讲解

    1.在js中"="是作为赋值.var a;  a=3:给a赋值为3. 2."=="称作相等,"==="被称作严格相等.当使用"== ...

  8. 自制STP配置实验

    本图使用Gns模拟器 实验需求: 1.要求利用vtp实现vlan同步设置 2.要求vtp server实现备份冗余 3.创建vlan 1~10要求MLSW1 是奇数vlan主根 MLSW2 是偶数vl ...

  9. java四则运算

    题目描述: 从<构建之法>第一章的 "程序" 例子出发,像阿超那样,花二十分钟写一个能自动生成小学四则运算题目的命令行 "软件",满足以下需求: 除 ...

  10. 2nd_SE-结对编程1-基于flask框架的四则运算生成器

    0x00 Coding https://coding.net/u/nikochan/p/2nd_SE/git 0x01 写在前面 因为在上一个作业中,是基于python完成的Command程序.那么再 ...