1733.ranking
题目描述
小x有n个小姊妹(根据典故,我们假设n≤3000)。他每天都喜欢按不同标准给小姊妹们排(da)序(fen)。今天,他突然对小姊妹们的名字产生了兴趣。他觉得小姊妹的魅力和她们的名字有密切联系,于是他觉得所有有相似的名字的小姊妹必须排在一起。
相似是指,名字的开头一个或若干个连续字母相同。于是,小x定下了如下规则:在任何以同样的字母序列开头的名字之间,所有名字开头必须是同样的字母序列。
比如,像MARTHA和MARY这两个名字,它们都以MAR开头,所以像MARCO或MARVIN这样的名字可以插入这两个名字中间,而像MAY这样的就不行。
显然,按字典序排序是一个合法的排序方案,但它不是唯一的方案。你的任务就是计算出所有合法的方案数。考虑到答案可能很大,输出答案 mod 1 000 000 007。
输入
第一行一个整数n,小x的小姊妹个数。
第2~n+1行,每行一个字符串,代表这个小姊妹的名字。
输出
一行一个整数,合法的方案数。
数据范围限制
对于60%的数据:3 ≤ n ≤ 10。
对于100%的数据:3 ≤ n ≤ 3000,1 ≤ 字符串长度 ≤ 3000,并且只含有大写字母。
Code
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <string>
using namespace std;
int n;
long long fac[3010];
long long ans;
string a[3010];
const int mod = 1e9 + 7;
long long factor(int k)
{if(k == 0)return 0;if(fac[k])return fac[k];fac[k] = (factor(k - 1) * k) % mod;return fac[k];
}
long long dg(int k,int beg,int len)
{if(len == 1)return 1;int buc[30];int begin[30];int count = 0;memset(buc,0,sizeof buc);memset(begin,0,sizeof begin);long long ret = 1;for(register int i = beg + len - 1;i >= beg;--i){if(k >= a[i].length()){++buc[0],begin[0] = i;continue;}++buc[a[i][k] - 'A' + 1],begin[a[i][k] - 'A' + 1] = i;}for(register int i = 0;i <= 26;++i)if(buc[i])ret = (ret * dg(k + 1,begin[i],buc[i])) % mod,++count;return (ret * factor(count)) % mod;
}
int main()
{freopen("ranking.in","r",stdin);freopen("ranking.out","w",stdout);scanf("%d",&n);fac[1] = 1;for(register int i = 1;i <= n;++i)cin >> a[i];sort(a + 1,a + n + 1);ans = dg(0,1,n);printf("%lld\n",ans);
}
1733.ranking相关推荐
- 一文理解Ranking Loss/Margin Loss/Triplet Loss
点击蓝字 关注我们 作者丨土豆@知乎 来源丨https://zhuanlan.zhihu.com/p/158853633 本文已获授权,未经作者许可,不得二次转载. 前言 Ranking loss在 ...
- 《Revisiting Salient Object Detection! Simultaneous Detection, Ranking, and Subitizing of Multiple Sa
<Revisiting Salient Object Detection! Simultaneous Detection, Ranking, and Subitizing of Multiple ...
- Ranking relevance in yahoo search (2016)论文阅读
文章链接 https://www.kdd.org/kdd2016/papers/files/adf0361-yinA.pdf abstract 点击特征在长尾query上的稀疏性问题 基础相关性三大技 ...
- POJ 1733 Parity game(带权并查集)
题目链接:http://poj.org/problem?id=1733 题目大意:给你m条信息,每条信息告诉你区间l~r的1的个数是奇数还是偶数,如果后面出现信息跟前面矛盾则这条信息是错误的,问在第一 ...
- Crawling - Computing Ranking 很长时间, 怎么办?
MOSS中遇到爬网状态保持Crawling - Computing Ranking不变. 你可以尝试编写SharePoint Object Model的代码来解决这个问题. 关键代码如下: Micro ...
- 论文笔记之:End-to-End Localization and Ranking for Relative Attributes
End-to-End Localization and Ranking for Relative Attributes arXiv Paper 摘要:本文提出一种 end-to-end 的属性识别方 ...
- POJ 3275 Ranking the Cows (floyd传递闭包)
Ranking the Cows Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 2248 Accepted: 1045 ...
- 知乎推荐页Ranking构建历程和经验分享
本次分享主题主要从以下是三个方面展开: 知乎推荐页场景和Ranking历程介绍: 深度学习在Ranking中的尝试和应用现状: Ranking面临的问题和未来研究方向. 首先大家看一下知乎APP的推荐 ...
- PAT甲级1141 PAT Ranking of Institutions :[C++题解]结构体、排序、哈希表、结构体构造函数、结构体内写函数、排名
文章目录 题目分析 题目来源 题目分析 来源:acwing 分析:和下面这题是一道题: PAT甲级1137 Final Grading:[C++题解]结构体.排序.哈希表.结构体构造函数.结构体内写函 ...
最新文章
- BigInteger类实例的构造过程——JDK源码解析
- android:layout_marginbottom=,Android: Retrieve layout_marginBottom programmatically?
- Exec l 中分列的作用
- 选股方法-陶博士-月线反方法的思路来源
- SAPUI5教程——URLHelper的使用技巧
- C/C++ Npcap包实现数据嗅探
- Xcode升级之后,报 Moudule ‘xxx‘ not found,或 Could not find module ‘xxx‘ for target ‘arm64-apple-ios
- word之中快速插入已有公式的几种方法
- network secruity studay day2
- 数据用什么挖?数据挖掘常用工具分享
- 安装 OpenCC 简繁体中文转换
- python手把手安装_小白手把手搭建python开发环境
- / 和 /* 的区别
- Android--微信支付
- OSAL系统框架专题
- Qt中的网络编程(TCP)
- 【读书笔记】金字塔原理-学习总结
- Win7及以上系统自带Windows 光盘映像刻录机
- html 制作人物模型,3dsmax动漫人物制作教程
- 今日芯声 | 美团王兴回应不支持支付宝:淘宝为什么不支持微信支付?