汕头市队赛 yyl杯1 T1
A SRM 05 - YYL 杯 R1
背景
傻逼题
描述
给一个序列,序列里只有两种元素1和2。现在要从序列里选出一些非空子序列使得子序列里两种元素数量相同。问有多少种方案数?
输入格式
多组数据
第一行一个正整数T,表示数据组数。
每组数据内
第一行 两个个正整数n,表示序列的长度
第二行 n个数字,表示整个序列。
输出格式
一个整数,表示方案数(mod 1e9+7)。
样例输入
1
3
2 2 1
样例输出
2
数据范围与约定
aaarticlea/png;base64,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" alt="" />
样例解释
在第一个样例中,两个子序列分别为{1,3},{2,3},集合中数字为元素下标。
这道题呢 很容易发现答案和数字的排列顺序无关 我们只需要统计1和2的个数 然后一波组合数就可以推出答案了对吧 23333
但是啊 这题n可以到1e6(但是实测没有....)所以我们不可能用o(n2)的递推预处理组合数 而且空间也不够
这时候我们可以想到预处理阶乘 时间空间都满足而且可以实现o(1)计算组合数的值
但是组合数C(n,m)=n!/m!(n-m)! 而除法是不满足除法过程中取模的
这个时候逆元的派上了用场 a/b==a*power(b,P-2)%P
所以乘法是满足取余性质的 我们就可以o(n)预处理出阶乘取模后的值了
又由费马小定理的 因为p为质数 所以我们可以推出b的逆元
只用一次快速幂就能算出1e6的逆元 然后利用公式
fac(i)=fac(i-1)*i
fac_inv(i-1)=fac_inv(i)*i
tips fac为阶乘fac_inv为阶乘逆元
就可以o(n)预处理逆元了
然后就枚举一波 i—min(cnt1,cnt2) 就可以算出答案了 23333
不过注意每乘一次就要取余一次 不然可能会炸longlong
#include<cstdio>
#include<cstring>
#include<algorithm>
#define LL long long
using namespace std;
const int mod=1e9+,M=;
LL read(){
LL ans=,f=,c=getchar();
while(c<''||c>''){if(c=='-') f=-; c=getchar();}
while(c>=''&&c<=''){ans=ans*+(c-''); c=getchar();}
return ans*f;
}
LL T,n,cnt1,cnt2,k,ans;
LL w[M],b[M];
LL qmod(LL a,LL b,LL c){
LL ans=;
while(b){
if(b&) ans=ans*a%c;
b=b/;
a=a*a%c;
}
return ans;
}
void prepare(){
int mx=; w[]=;
for(int i=;i<=mx;i++) w[i]=w[i-]*i%mod;
b[mx]=qmod(w[mx],mod-,mod); //printf("[%lld]\n",w[mx]);
for(int i=mx;i>=;i--) b[i-]=b[i]*i%mod; //printf("[%d]\n",b[0]);
}
int main()
{
prepare();
T=read();
while(T--){
n=read();
cnt1=; cnt2=; ans=;
for(int i=;i<=n;i++){
k=read();
if(k==) cnt1++;
else cnt2++;
}
for(int i=;i<=min(cnt1,cnt2);i++)
ans=(ans+w[cnt1]*b[i]%mod*b[cnt1-i]%mod*w[cnt2]%mod*b[i]%mod*b[cnt2-i]%mod)%mod;
printf("%lld\n",ans);
}
return ;
}
汕头市队赛 yyl杯1 T1的更多相关文章
- 汕头市队赛 yyl杯1 T2
B SRM 05 - YYL 杯 R1 背景&&描述 有一个拥有n个城市的国家.这个国家由n-1条边连接起来.有一天国家发生叛乱.叛军已占领了一些城市.如果叛军占领的城市中,存在两个城 ...
- 汕头市队赛 C KMP codeforces B. Image Preview
汕头市队赛题目传送门 codeforces题目传送门 这道题我的做法是 尝试先往左走然后往右走 或者先往右走然后往左走 然后注意一下枚举顺序就okay啦 #include<cstdio> ...
- 汕头市队赛 C SRM 05 - YYL 杯 R1 T3!
C SRM 05 - YYL 杯 R1 背景 tjmak 描述 给一个大小为n的序列V.序列里的元素有正有负.问至少要删除多少个元素使得序列里不存在区间(要求非空)和 >= S.如果答案大于m, ...
- 汕头市队赛SRM 20 T1魔法弹
T1 背景 “主角光环已经不能忍啦!” 被最强控制AP博丽灵梦虐了很长一段时间之后,众人决定联合反抗. 魂魄妖梦:“野怪好像被抢光了?” 十六夜咲夜:“没事,我们人多.” 然后当然是以失败告终了. 八 ...
- 汕头市队赛 SRM14 T1 计算几何瞎暴力
计算几何瞎暴力 (easy.pas/c/cpp) 128MB 1s 在平面上,给定起点和终点,有一面墙(看作线段)不能穿过,问从起点走到终点的最短路程. 输入格式 输入一行,包含8个用空格分隔的整数x ...
- 汕头市队赛 SRM1X T1
木之本樱 背景 “西瓜是可以种在树上的!”——木之本樱 描述 空地上,一排排的西瓜树拔地而起. 魔法世界里,空地是无限大的.所有的树排成了n条直线,每条直线也是向左右两端无限延伸的. 由于自己姓木(之 ...
- 汕头市队赛 SRM10 T1 贪心只能过样例
贪心只能过样例 SRM 10 描述 给出n个数a[i](1<=a[i]<=n),问最多能把这些数分成几组,使得每个数a[i]所在的组至少有a[i]个数 输入格式 第一行一个整数n,接下来n ...
- 汕头市队赛 SRM10 T1模拟只会猜题意
模拟只会猜题意 SRM 10 描述 有一本n个单词的词典,求按下列方法能造出的不相同的词汇数目. 1.词典中的单词是一个词. 2.能分为两部分的,其中前一部分是一个词典词或者其非空前缀,后一部分是一 ...
- 汕头市队赛SRM15
T1——czl SRM 15 众所周知,czl家养了一只可♂爱的***(已屏蔽),那只东西很贪吃,所以czl家很多零食仓库,然而这些仓库里有很多老鼠. 为了心爱的***,czl决定点燃纯艾条,用烟熏老 ...
随机推荐
- C#窗口抖动
用过QQ的窗口抖动功能吧.是不是觉得很神奇?很有意思?其实,仔细想想,使用的原理还是挺简单的:让窗口的位置不断快速地发生变化. 说出了原理,是不是一下恍然大悟?顿时理解了.我以前也想过如何实现这个功能 ...
- ionic 入口禁止加载其他页面
.state('memberOrders', { prefetchTemplate: false, url: '/memberOrders', templateUrl: '/MemberOrders' ...
- web入门脑图
- 【app.js】配置及App函数说明
app.js中的App函数用来注册一个小程序或设置全局变量. App函数: 语法:App(Object) 参数: Object json对象 说明: App函数必须在app.js中调用 ...
- Gym101981I Magic Potion(最大流)
Problem I. Magic Potion There are n heroes and m monsters living in an island. The monsters became v ...
- Go基础篇【第1篇】: 内置库模块 OS
os包提供了操作系统函数的不依赖平台的接口.设计为Unix风格的,虽然错误处理是go风格的:失败的调用会返回错误值而非错误码.通常错误值里包含更多信息.os包的接口规定为在所有操作系统中都是一致的.非 ...
- memcached简单介绍及在django中的使用
什么是memcached? Memcached是一个高性能的分布式的内存对象缓存系统,全世界有不少公司采用这个缓存项目来构建大负载的网站,来分担数据库的压力.Memcached是通过在内存里维护一个统 ...
- NO5——素数筛选
#include <stdio.h> int main() { ]={}; ;i<=;i++) a[i]=; ;i<=;i++) if(a[i]) ;j+=i) a[j]=; ...
- Linux arm64内核启动
原创翻译,转载请注明出处. arm64的异常模型由一组异常级别(EL0-EL3)组成.EL0,EL1有安全模式和非安全模式的区别.EL2是虚拟机管理级别并且只有非安全模式.EL3是最高优先级并且只存在 ...
- 关于org.springframework.web.filter.CharacterEncodingFilter的学习
介绍 org.springframework.web.filter.CharacterEncodingFilter 这是一个过滤器,是Spring在web请求中定义request和response的编 ...