Chat Group gym101775A(逆元,组合数)
题意:一个宿舍中又n个人,最少k(k >= 3)个人就可以建一个讨论组,问最多可以建多少个不同的讨论组。
思路:求组合数的和,因为涉及除法取余,所以要求逆元来解题。
虽然之前看到过有关逆元的知识,但是一直没有弄明白逆元的应用。嗯~~挖下的坑终于把自己给坑了。这次认栽!!
最终的结果是:C(n,k)+C(n,k+1)+.......+C(n,n) = 2^n - ( C(n,0) + C(n,1) + C(n,2) + ......+C(n,k-1)
(a / b)%mod = a % mod *(b关于模mod的逆元);
复习逆元相关知识:Click hear
代码:
费马小定理求逆元法:
#include <bits/stdc++.h>
using namespace std;
const int MOD = 1e9+;
const int maxn = 1e5;
typedef long long ll;
int n,k;
ll qpow(ll a,ll b)
{
ll res = ;
while(b)
{
if(b&)
res = res*a%MOD;
a = a*a%MOD;
b>>=;
}
return res;
} int main()
{
int T,cnt = ;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&k);
ll c = ;
ll sum = ;
for(int i = ; i<=k-; i++)
{
c = ((c*(n-i+)%MOD)*qpow(i,MOD-))%MOD;
sum = (sum + c)%MOD;
}
ll M = qpow(,n) - ;
printf("Case #%d: %lld\n",++cnt,(M - sum + MOD)%MOD);//将结果转为正数
}
return ;
}
线性求逆元:
#include <bits/stdc++.h>
using namespace std;
const int MOD = 1e9+;
const int maxn = 1e5;
typedef long long ll;
int n,k;
ll qpow(ll a,ll b)
{
ll res = ;
while(b)
{
if(b&)
res = res*a%MOD;
a = a*a%MOD;
b>>=;
}
return res;
}
ll inv[maxn]; void getInv()
{
inv[] = ;
for(int i = ; i<maxn; i++)
{
inv[i] = (MOD-MOD/i)*inv[MOD%i]%MOD;
}
} int main()
{
int T,cnt = ;
scanf("%d",&T);
while(T--)
{
getInv();
scanf("%d%d",&n,&k);
ll c = ;
ll sum = ;
for(int i = ; i<=k-; i++)
{
c = (c*(n-i+)%MOD*inv[i])%MOD;
sum = (sum + c)%MOD;
}
ll M = qpow(,n) - ;
printf("Case #%d: %lld\n",++cnt,(M - sum + MOD)%MOD);
}
return ;
}
Chat Group gym101775A(逆元,组合数)的更多相关文章
- A - Chat Group Gym-101775A
题目连接:https://codeforces.com/gym/101775/problem/A 题解:就是累加组合数 但是直接由K累加到N肯定会TLE ,所以我们不妨判断不能组成group的情况,即 ...
- Gym - 101775A Chat Group 组合数+逆元+快速幂
It is said that a dormitory with 6 persons has 7 chat groups ^_^. But the number can be even larger: ...
- Gym 101775A - Chat Group - [简单数学题][2017 EC-Final Problem A]
题目链接:http://codeforces.com/gym/101775/problem/A It is said that a dormitory with 6 persons has 7 cha ...
- 组合数+逆元 A - Chat Group Gym - 101775A
题目链接:https://cn.vjudge.net/contest/274151#problem/A 具体思路:我们可以先把所有的情况算出来,为2^n.然后不合法的情况减去就可以了.注意除法的时候要 ...
- UVALive 7040 Color (容斥原理+逆元+组合数+费马小定理+快速幂)
题目:传送门. 题意:t组数据,每组给定n,m,k.有n个格子,m种颜色,要求把每个格子涂上颜色且正好适用k种颜色且相邻的格子颜色不同,求一共有多少种方案,结果对1e9+7取余. 题解: 首先可以将m ...
- Bzoj 1856: [Scoi2010]字符串 卡特兰数,乘法逆元,组合数,数论
1856: [Scoi2010]字符串 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1194 Solved: 651[Submit][Status][ ...
- HDU 6114 Chess【逆元+组合数】(组合数模板题)
<题目链接> 题目大意: 車是中国象棋中的一种棋子,它能攻击同一行或同一列中没有其他棋子阻隔的棋子.一天,小度在棋盘上摆起了许多車……他想知道,在一共N×M个点的矩形棋盘中摆最多个数的車使 ...
- HDU4869:Turn the pokers(快速幂求逆元+组合数)
题意: 给出n次翻转和m张牌,牌相同且一开始背面向上,输入n个数xi,表示xi张牌翻转,问最后得到的牌的情况的总数. 思路: 首先我们可以假设一开始牌背面状态为0,正面则为1,最后即是求ΣC(m,k) ...
- The 2018 ACM-ICPC Asia Qingdao Regional Contest(部分题解)
摘要: 本文是The 2018 ACM-ICPC Asia Qingdao Regional Contest(青岛现场赛)的部分解题报告,给出了出题率较高的几道题的题解,希望熟悉区域赛的题型,进而对其 ...
随机推荐
- java有用的启动参数
三大类选项: 1. 标准选项: 功能是很稳定的,所有的标准选项都是以-开头,比如-version, -server等. 2. X选项:以-X开头,这类选项的功能还是很稳定,但官方的说法是它们的行为可能 ...
- ubuntu16.04安装flash player
ubuntu16.04安装flash player sudo apt-get install flashplugin-installer 1 2019: apt-get install browser ...
- vs2010 下使用C#开发activeX控件
1.创建一个类库 2.项目属性-应用程序-程序集信息-"使程序集COM可见"勾上; 3.项目属性-生成-"为COM互操作注册"勾上.(这个折腾一天,否则注册事件 ...
- istio-禁用/允许sidecar设置
一.在namespace设置自动注入: 给 default 命名空间设置标签:istio-injection=enabled: $ kubectl label namespace default is ...
- 【已解决】Makefile执行过程中出错:make: *** No rule to make target ` ‘, needed by xxx. Stop(转载)
转自: http://www.crifan.com/makefile_error_make_no_rule_to_make_target_needed_by_stop/ [问题] 有个已有的Makef ...
- [Swift通天遁地]七、数据与安全-(2)对XML和HTML文档的快速解析
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- NS2学习笔记(四)
这几天学习NS2,虽然国内很多人使用,但系统的教材资料不多,只能一边看中文教材,一边看英文手册,知识点也是零零散散.过段时间等能将所有知识点串上,再总结总结.现只讲一些零碎的点记录一下. 添加新的协议 ...
- python自动化测试学习笔记-6redis应用
上次我们学到了redis的一些操作,下面来实际运用以下. 这里我们先来学习一下什么是cookie和session. 什么是Cookie 其实简单的说就是当用户通过http协议访问一个服务器的时候,这个 ...
- tomcat解决 java.lang.IllegalArgumentException: Request header is too large
tomcat运行项目时,有一个请求过去后,后台报这样的错java.lang.IllegalArgumentException: Request header is too large 原因:请求头超过 ...
- strcpy 和 memcpy自实现
都是套路,详见代码注释: #include <stdio.h> #include <assert.h> #include <iostream> using name ...