【数论】贝壳找房计数比赛&&祭facinv
震惊!阶乘逆元处理背后竟有如此玄机……
题目描述
贝壳找房举办了一场计数比赛,比赛题目如下。
给一个字符串 s 和字符串 t,求出 s 的所有去重全排列中 t 出现的次数。比如aab的去重全排列为aab、aba、baa。注意aaaa算出现两次aaa。
你的老大希望你帮他写一个程序作弊。
输入格式
第一行一个整数 TT,表示数据组数。
每组数据中,第一行一个字符串 ss,第二行一个字符串 tt。
数据保证 1≤T≤100, 1≤∣t∣≤∣s∣≤105,t,s 只包含小写字母。
输出格式
输出一共 TT 行,每行一个整数,表示所求答案对 10^9+7取模的结果。
样例输入
2
aab
ab
aabb
ab
样例输出
2
6
题目分析
其实就是一道挺简单的数论基础题……
但是复赛时候我想复杂了很多,一直在考虑将目标串拆成多个原串后如何去重之类的问题。
例如原串=ab,目标串=ababaa。然后设t=ab,目标串就有taaab/ttaa这两种情况,于是陷入去重无法自拔……
呃实际上冷静分析就可以发现,只用考虑拆一次的结果,那么就套上可重全排列的公式就好了。
#include<bits/stdc++.h>
const long long MO = 1e9+;
const long long maxn = ; long long ans,inv[maxn],mp[maxn];
int n,tt;
char s[maxn],t[maxn];
bool fl; int main()
{
inv[] = inv[] = ;
for (int i=; i<maxn; i++)
inv[i] = (long long)(MO-MO/i)*inv[MO%i]*inv[i-]%MO;
scanf("%d",&tt);
while (tt--)
{
fl = ;
memset(mp, , sizeof mp);
scanf("%s%s",s,t);
for (int i=; s[i]; i++)
mp[s[i]]++;
for (int i=; t[i]; i++)
mp[t[i]]--, fl = fl||(mp[t[i]]<);
if (fl){
printf("0\n");
continue;
}
n = strlen(s)-strlen(t);
ans = n+;
while (n--) ans = ans*(n+)%MO;
for (char i='a'; i<='z'; i++)
ans = (long long)ans*inv[mp[i]]%MO;
printf("%lld\n",ans);
}
return ;
}
然而!上面这个程序是会WA的!
在历经好长一段时间的调试之后,终于发现facinv中间溢出了……
那么大不了就改成这样嘛,反正是多一个%MO的事情
inv[] = inv[] = ;
for (int i=; i<maxn; i++)
inv[i] = (MO-MO/i)%MO*inv[MO%i]%MO*inv[i-]%MO;
可是依旧WA :)
inv[] = inv[] = ;
for (int i=; i<maxn; i++)
inv[i] = (MO-MO/i)%MO*inv[MO%i]%MO;
for (int i=; i<maxn; i++) inv[i] = inv[i-]*inv[i]%MO;
最后只能改成上面这个样子……
行吧终于过了。
END
【数论】贝壳找房计数比赛&&祭facinv的更多相关文章
- 2019 贝壳找房java面试笔试题 (含面试题解析)
本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.贝壳找房等公司offer,岗位是Java后端开发,因为发展原因最终选择去了贝壳找房,入职一年时间了,也成为了面 ...
- 最新 贝壳找房java校招面经 (含整理过的面试题大全)
从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.贝壳找房等10家互联网公司的校招Offer,因为某些自身原因最终选择了贝壳找房.6.7月主要是做系统复习.项目复盘.Leet ...
- 2018 计蒜之道 初赛 第五场 A 贝壳找房搬家
贝壳找房换了一个全新的办公室,每位员工的物品都已经通过搬家公司打包成了箱子,搬进了新的办公室了,所有的箱子堆放在一间屋子里(这里所有的箱子都是相同的正方体),我们可以把这堆箱子看成一个 x*y*z 的 ...
- 2018 计蒜之道复赛 贝壳找房魔法师顾问(并查集+dfs判环)
贝壳找房在遥远的传奇境外,找到了一个强大的魔法师顾问.他有 22 串数量相同的法力水晶,每个法力水晶可能有不同的颜色.为了方便起见,可以将每串法力水晶视为一个长度不大于 10^5105,字符集不大于 ...
- 上海二手房8月排名:链家、悟空找房、中原、太平洋、我爱我家、易居、房天下、iwjw、房多多、房好多、q房网、、、
房产网站总结 链家: 悟空找房: 中原: 太平洋: 我爱我家: 易居: 房天下: iwjw:有较多二手房信息 链家称王 房多多领跑电商平台 近日,云房数据公布了8月上海房产中介成交数据,从排行榜来看, ...
- 【BZOJ5332】[SDOI2018]旧试题(数论,三元环计数)
[BZOJ5332][SDOI2018]旧试题(数论,三元环计数) 题面 BZOJ 洛谷 题解 如果只有一个\(\sum\),那么我们可以枚举每个答案的出现次数. 首先约数个数这个东西很不爽,就搞一搞 ...
- 上海租房找房建议及条件,上海IT行业开发常见公司的位置地点
上海租房,找房条件 以2号地铁线为中心,优先选择(回家方便,重点!),交通设施较集中地铁:2,3,4 区:普陀区,静安区,长宁区,闸北区,浦东新区,闵行区,徐汇区 路:镇坪路,威宁路,娄山关路,中山公 ...
- (转) Arcgis4js实现链家找房的效果
http://blog.csdn.net/gisshixisheng/article/details/71009901 概述 买房的各位亲们不知是否留意过链家的"地图找房",这样的 ...
- 【数论,找规律】Uva 11526 - H(n)
原来做过的题再看还是没想出来,看来当时必然没有真正理解.这次回顾感觉理解更透彻了. 网上的题解差不多都是一个版本,而且感觉有点扯.根据n=20猜出来的? 好吧哪能根据一个就猜到那么变态的公式.其实这题 ...
随机推荐
- python操作redis之String操作
# __author__ = 'STEVEN' import redis,time # 方式1,直接链接操作 # r = redis.Redis(host='192.168.43.22',port=6 ...
- [软件工程基础]PhyLab 功能规格说明书
前言 Sigma 团队想要在 PhyLab 上做的增量改进见需求分析.六个功能中只有题库和图文流程需要对界面进行大的改动,剩下的功能在用户看来仅仅是在原有界面上有内容上的扩充,因此不在功能规格说明书的 ...
- Unity Shader入门精要学习笔记 - 第6章 开始 Unity 中的基础光照
转自冯乐乐的<Unity Shader入门精要> 通常来讲,我们要模拟真实的光照环境来生成一张图像,需要考虑3种物理现象. 首先,光线从光源中被发射出来. 然后,光线和场景中的一些物体相交 ...
- ecshop的商品列表输出中多出一条空记录
这个是ECSHOP的一个BUG, 在模板中显示商品列表的位置,加一句{if $goods}判断商品存在才显示: {foreach from=$goods_list item=goods} {if $g ...
- PHP采集利器 Snoopy 试用心得
Snoopy是什么? Snoopy是一个php类,用来模仿web浏览器的功能,它能完成获取网页内容和发送表单的任务. Snoopy的一些特点: * 方便抓取网页的内容 * 方便抓取网页的文本内容 (去 ...
- 图像处理库CImg
CImg 是一个用C++编写的开源数字图像处理库. 作者介绍 作者David Tschumperlé, 之前是法国La Rochelle大学的一名教授,现受雇于CNRS 图像组.据说作者从19 ...
- Mvc 多级控制器 路由重写 及 多级Views目录 的寻找视图的规则
1.那么我们再来看我们需要的访问方式,如下图 如果我们要访问Admin下的TestController里面的Index页面,那么我们输入Test/Index,这个肯定不行的.因为TestControl ...
- 12.JAVA-基本数据类型的包装类操作
1.基本数据类型的包装类 java是一个面向对象编程语言,也就是说一切操作都要用对象的形式进行.但是有个矛盾: 基本数据类型(char,int,double等)不具备对象特性(不携带属性和方法) 这样 ...
- 修改Magento默认Export Customers功能
Magento 1.x的Export功能可以很方便地对Customers的数据进行导出,但是存在几个不足(或者说不方便)的地方: 1. 默认导出的 .CSV文件是以UTF-8格式编码的,而MS Exc ...
- CSS子元素设置margin-top作用于父容器?
CSS子元素设置margin-top作用于父容器? 原因: In this specification, the expression collapsing margins means that ad ...