题目描述

LYK喜欢字符串,它认为一个长度为n的字符串一定会有n*(n+1)/2个子串,但是这些子串是不一定全部都不同的,也就是说,不相同的子串可能没有那么多个。LYK认为,两个字符串不同当且仅当它们的长度不同或者某一位上的字符不同。LYK想知道,在字符集大小为k的情况下,有多少种长度为n的字符串,且该字符串共有m个不相同的子串。

由于答案可能很大,你只需输出答案对1e9+7取模后的结果即可。

输入格式(string.in)

一行3个数n,m,k。

输出格式(string.out)

一行,表示方案总数。

输入样例

2 3 3

输出样例

6

样例解释

共有6种可能,分别是ab,ac,ba,bc,ca,cb。

数据范围

对于20%的数据:1<=n,k<=5。

对于40%的数据:1<=n<=5,1<=k<=1000000000。

对于60%的数据:1<=n<=8,1<=k<=1000000000。

对于100%的数据:1<=n<=10,1<=m<=100,1<=k<=1000000000。

分析:很容易想歪的一道题.

   一开始想到dp,这要怎么dp呢?状压dp吗?状态不好用0/1表示......

   考虑到n很小,尝试搜索. 搜第i位的字符是哪一个?显然不行,字符集太大了. 其实不同子串的个数只与每个字符的相对大小有关.所以搜每一位的字符的相对大小即可.  如果最后搜出来的有k个不同相对大小的字符,答案乘上A(k,i)即可(排列数).

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm> using namespace std; typedef long long ll; const ll mod = 1e9+; ll n,m,k,f[][][],vis[],tot,cnt,num[],a[],ans; void solve()
{
cnt = ;
tot = ;
memset(vis,,sizeof(vis));
for (int i = ; i <= n; i++)
{
if (!vis[num[i]])
{
tot++;
vis[num[i]] = ;
}
}
for (int i = ; i <= n; i++)
for (int j = ; j <= n; j++)
{
int r = i + j - ;
if (r > n)
break;
ll temp = ;
for (int k = j; k <= r; k++)
temp = temp * + num[k];
a[++cnt] = temp;
}
sort(a + ,a + + cnt);
cnt = unique(a + ,a + + cnt) - a - ;
f[n][cnt][tot]++;
} void dfs(int dep)
{
if (dep == n + )
{
solve();
return;
}
memset(vis,,sizeof(vis));
tot = ;
for (int i = ; i < dep; i++)
{
if (!vis[num[i]])
{
tot++;
vis[num[i]] = ;
}
}
num[dep] = tot + ;
dfs(dep + );
int flag[];
memset(flag,,sizeof(flag));
for (int i = ; i < dep; i++)
{
if (!flag[num[i]])
{
flag[num[i]] = ;
num[dep] = num[i];
dfs(dep + );
}
}
} ll A(ll x,ll y)
{
ll res = ;
for (ll i = ; i <= y; i++)
res = res * (x - i + ) % mod;
return res % mod;
} int main()
{
scanf("%lld%lld%lld",&n,&m,&k);
dfs();
for (int i = ; i <= n; i++)
{
ans += f[n][m][i] * A(k,i) % mod;
ans %= mod;
}
printf(" %lld\n",ans % mod); return ;
}

省选模拟赛 LYK loves string(string)的更多相关文章

  1. 省选模拟赛 LYK loves rabbits(rabbits)

    题目描述 LYK喜欢兔子,它在家中养了3只兔子. 有一天,兔子不堪寂寞玩起了游戏,3只兔子排成一排,分别站在a,b,c这3个位置. 游戏的规则是这样的,重复以下步骤k次:选择两个不同的兔子A和B,假如 ...

  2. 省选模拟赛 LYK loves graph(graph)

    题目描述 LYK喜欢花花绿绿的图片,有一天它得到了一张彩色图片,这张图片可以看做是一张n*m的网格图,每个格子都有一种颜色去染着,我们用-1至n*m-1来表示一个格子的颜色.特别地,-1代表这个颜色是 ...

  3. 【洛谷比赛】[LnOI2019]长脖子鹿省选模拟赛 T1 题解

    今天是[LnOI2019]长脖子鹿省选模拟赛的时间,小编表示考的不怎么样,改了半天也只会改第一题,那也先呈上题解吧. T1:P5248 [LnOI2019SP]快速多项式变换(FPT) 一看这题就很手 ...

  4. @省选模拟赛03/16 - T3@ 超级树

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 一棵 k-超级树(k-SuperTree) 可按如下方法得到:取 ...

  5. 3.28 省选模拟赛 染色 LCT+线段树

    发现和SDOI2017树点涂色差不多 但是当时这道题模拟赛的时候不会写 赛后也没及时订正 所以这场模拟赛的这道题虽然秒想到了LCT和线段树但是最终还是只是打了暴力. 痛定思痛 还是要把这道题给补了. ...

  6. NOI2016模拟赛Zbox loves stack

    #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #i ...

  7. 「HGOI#2019.4.19省选模拟赛」赛后总结

    t1-Painting 这道题目比较简单,但是我比较弱就只是写了一个链表合并和区间DP. 别人的贪心吊打我的DP,嘤嘤嘤. #include <bits/stdc++.h> #define ...

  8. [luogu#2019/03/10模拟赛][LnOI2019]长脖子鹿省选模拟赛赛后总结

    t1-快速多项式变换(FPT) 题解 看到这个\(f(x)=a_0+a_1x+a_2x^2+a_3x^3+ \cdots + a_nx^n\)式子,我们会想到我们学习进制转换中学到的,那么我们就只需要 ...

  9. FCS省选模拟赛 Day3

    Description  Solution T1 game 咕咕咕 T2 string fail树各个节点的深度之和怎么求? 我们考虑每个前缀的深度是什么 发现这个值就相当于有多少个前缀等于它的后缀 ...

随机推荐

  1. OA系统与Exchange 日历打通

    目前我碰到好几个案例是希望将客户以后的OA系统与Exchange中的日历系统相结合,比如致远或者泛微的OA系统. 客户的需求如下: 1.有了OA系统 2.客户使用Outlook当邮件客户端 3.客户希 ...

  2. Matplotlib外观和基本配置笔记

    title: matplotlib 外观和基本配置笔记 notebook: Python tags:matplotlib --- 参考资料,如何使用matplotlib绘制出数据图形,参考另一篇mat ...

  3. Amazon.com 购物 信用卡预售期

    I understand and thanks for confirming. In this case, the $1.00 is not a charge.  It is an authoriza ...

  4. 卡特兰数(Catalan)及其应用

    卡特兰数 大佬博客https://blog.csdn.net/doc_sgl/article/details/8880468 卡特兰数是组合数学中一个常出现在各种计数问题中出现的数列. 卡特兰数前几项 ...

  5. 关于《数据结构》课本KMP算法的理解

    数据结构课上讲的KMP算法和我在ACM中学习的KMP算法是有区别的,这里我对课本上的KMP算法给出我的一些想法. 原理和之前的KMP是一样的https://www.cnblogs.com/wkfvaw ...

  6. Bate版本控制报告

    报告beta阶段2周中,项目的版本控制情况,不包括未在coding.net的部分. 包括不限于:check in (不是push)次数; 总词数为29次 check in log(时间.人员.mess ...

  7. 前端获取URL和SESSON中的值

    .CS中代码 public ActionResult Index(string viewname, bool partial = false) { //获取URL中的 foreach (var key ...

  8. 《JavaScript》页面跳转

    window.location.href: <i onclick="window.location.href = '/Form/Form_Write/Index?viewname=Fo ...

  9. Android源码项目目录结构

    src: 存放java代码 gen: 存放自动生成文件的. R.java 存放res文件夹下对应资源的id project.properties: 指定当前工程采用的开发工具包的版本 libs: 当前 ...

  10. IHttpModule的那些事

    写在前面 关于IHttpModule的相关内容,在面试的时候也被问到过,当时也是隐隐约约的感觉这个接口有一个Init方法,可以在实现类中的Init方法注册一系列的事件,说句实话,具体哪些事件,忘了差不 ...