【BZOJ 4517】【SDOI 2016 Round1 Day2 T2】排列计数
本蒟蒻第一次没看题解A的题竟然是省选$Round1$ $Day2$ $T2$ 这道组合数学题。
考试时一开始以为是莫队,后来想到自己不会组合数的一些公式,便弃疗了去做第三题,,,
做完第三题后再回来看这道题,想到暴力算$组合数×错排$,我记得有一天晚上$Snayvals$问过我错排公式怎么推,但我并没有在意!!!幸亏我知道错排可以线性推出来,便开始用笔推错排公式。推了$30min$发现有计算机为什么不用!!!便打了一个表,很快就找出了规律$f[i]=(f[i-1]*f[i-2])*(i-1)$
然后开始解决组合数问题。因为组合数特别大要取模,可是我忘了拓展欧几里得的模板$TwT$,一个月前看了好长时间都没有理解,后来弃疗背过模板一直用着,结果长时间不写就忘了$QAQ$。然后辛苦的回忆$zky学长$讲课时拓展欧几里得是怎么做的,想了一个小时终于通过普通的欧几里得回忆起了拓展欧几里得怎么做,以后再也不会忘了$QuQ$。
可以求逆元,可以线性时间求出错排数和阶乘,然后求出逆元的“前缀积”,$O(5nlogn)$时间内可以求出最大数据内的所有需要的值,离线一下就可以预处理后$O(1)$回答询问啦,就可以A啦~~~最后A掉了这道题,虽然是道水题,但是作为没看题解AC的第一道题心里还是有点激动。
PS:在BZOJ上凑个热闹233

省选时的AC代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
#define read(x) x=getint()
using namespace std;
const int p = 1E9 + 7;
int getint() {
int k = 0, fh = 1; char c = getchar();
for(; c < '0' || c > '9'; c = getchar())
if (c == '-') fh = -1;
for(; c >= '0' && c <= '9'; c = getchar())
k = k * 10 + c - '0';
return k * fh;
}
long long f[1000003], ni[1000003], nic[1000003], jc[1000003];
void mktb(int n) {
f[0] = 1;
f[1] = 0;
f[2] = 1;
for(int i = 3; i <= n; ++i)
f[i] = (((f[i - 1] + f[i - 2])%p) * (i - 1)) % p;
jc[1] = 1;
for(int i = 2; i <= n; ++i)
jc[i] = (jc[i - 1] * i) % p;
}
void exgcd(int a, int b, long long &x, long long &y) {
if (b == 0) {
x = 1; y = 0;
} else {
exgcd(b, a % b, x, y);
long long t = x;
x = y;
y = t - a / b * y;
}
}
void mkny(int n) {
long long x, y;
ni[1] = 1;
for(int i = 2; i <= n; ++i) {
exgcd(i, p, x, y);
ni[i] = x < 0 ? x + p : x;
}
nic[0] = 1;
nic[1] = 1;
for(int i = 2; i <= n; ++i)
nic[i] = (nic[i - 1] * ni[i]) % p;
} struct node {
int n, m;
} q[500003];
int upe = 0; long long Q(int n, int m) {
if (n < m) return 0;
long long ans = (jc[n] * nic[m]) % p;
ans = (ans * nic[n - m]) % p;
ans = (ans * f[n - m]) % p;
return ans;
}
int main() {
freopen("permutation.in", "r", stdin);
freopen("permutation.out", "w", stdout);
int T; read(T);
for(int i = 1; i <= T; ++i) {
read(q[i].n);
read(q[i].m);
if (q[i].n > upe)
upe = q[i].n;
}
mktb(upe);
mkny(upe);
for(int i = 1; i <= T; ++i)
printf("%I64d\n", Q(q[i].n, q[i].m));
fclose(stdin);
fclose(stdout);
return 0;
}
啦啦啦
【BZOJ 4517】【SDOI 2016 Round1 Day2 T2】排列计数的更多相关文章
- SDOI 2016 Round1 Day2
生成魔咒 /* 后缀数组+双向链表 参照:https://blog.csdn.net/clove_unique/article/details/53911757 */ #include<cstd ...
- 【BZOJ 4518】【SDOI 2016 Round1 Day2 T3】征途
比较明显的斜率优化DP,省选时因为时间太紧张和斜率DP写得不熟等原因只写了60分的暴力DP,其实当时完全可以对拍来检验标算的正确,但是我当时too naive- 很快打完了,调了将近一晚上QAQ,因为 ...
- 【BZOJ 4515】【SDOI 2016 Round1 Day1 T3】游戏
考场上写了lct,可惜当时对标记永久化的理解并不是十分深刻,导致调一个错误的程序调了4h+,最后这道题爆0了QwQ 现在写了树链剖分,用标记永久化的线段树维护轻重链,对于$s\rightarrow l ...
- 【NOIP 2015 & SDOI 2016 Round1 & CTSC 2016 & SDOI2016 Round2】游记
我第一次写游记,,,, 正文在哪里?正文在哪里?正文在哪里?正文在哪里?正文在哪里?正文在哪里?正文在哪里?正文在哪里?正文在哪里?正文在哪里?正文在哪里?正文在哪里?正文在哪里?正文在哪里?正文在哪 ...
- [BZOJ 4516] [SDOI 2016] 生成魔咒
Description 魔咒串由许多魔咒字符组成,魔咒字符可以用数字表示.例如可以将魔咒字符 1.2 拼凑起来形成一个魔咒串 [1,2]. 一个魔咒串 S 的非空字串被称为魔咒串 S 的生成魔咒. 例 ...
- SDOI 2016 Round1 Day1
储能表 /* 引自zyz大佬的数学思想 */ #include<cstdio> #include<iostream> using namespace std; typedef ...
- BZOJ 4517: [Sdoi2016]排列计数
4517: [Sdoi2016]排列计数 Time Limit: 60 Sec Memory Limit: 128 MBSubmit: 911 Solved: 566[Submit][Status ...
- 数学(错排):BZOJ 4517: [Sdoi2016]排列计数
4517: [Sdoi2016]排列计数 Time Limit: 60 Sec Memory Limit: 128 MBSubmit: 693 Solved: 434[Submit][Status ...
- BZOJ 4517: [Sdoi2016]排列计数 [容斥原理]
4517: [Sdoi2016]排列计数 题意:多组询问,n的全排列中恰好m个不是错排的有多少个 容斥原理强行推♂倒她 $恰好m个不是错排 $ \[ =\ \ge m个不是错排 - \ge m+1个不 ...
随机推荐
- url 特殊字符
URL中的特殊字符 有些符号在URL中是不能直接传递的,如果要在URL中传递这些特殊符号,那么就要使用他们的编码了.编码的格式为:%加字符的ASCII码,即一个百分号%,后面跟对应字符的ASCII(1 ...
- 原生的强大DOM选择器querySelector
在传统的 JavaScript 开发中,查找 DOM 往往是开发人员遇到的第一个头疼的问题,原生的 JavaScript 所提供的 DOM 选择方法并不多,仅仅局限于通过 tag, name, id ...
- FLEX的动画
1.使用自带效果 在Flex里面不像在Flash里面随意制作动画了,Flex更趋向于应用程序,而不是动画制作了,所以没有了时间轴的概念.在Flex中使用动画效果,可以用Flex自带的Effect,或者 ...
- 学习cocos 空程序
今天开始学习cocos代码,首先研究源码中的空程序. 在这个程序中,在main函数中,创建了一个Application: int APIENTRY _tWinMain(HINSTANCE hInsta ...
- django整合原有的mysql数据库
虽然django适合从零开始构建一个项目,但有时候整合原有的数据库也在所难免,下面以django整合我的mysql作说明. mysql数据是我从京东上抓取的数据,数据表名为jd,演示如图 下面将jd整 ...
- PL/SQL Developer 11 64bit 安装和配置
安装后, 1. 解压 instant client 到plsql developer 的安装目录 注意, 此版本只支持 instantclient_11_x, 不支持 instantclient ...
- [NOIP2010初赛]烽火传递+单调队列详细整理
P1313 [NOIP2010初赛]烽火传递 时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 烽火台又称烽燧,是重要的防御设施,一般建在险要处或交通要道上 ...
- 微软职位内部推荐-SDEII_ ECO
微软近期Open的职位: SDE II SDE II Organization Summary: Engineering, Customer interactions & Online (EC ...
- Linux system函数详解
system 功能:system()函数调用"/bin/sh -c command"执行特定的命令,阻塞当前进程直到command命令执行完毕 原型 int system(cons ...
- FineUI小技巧(1)简单的购物车页面
起因 最初是一位 FineUI 网友对购物车功能的需求,需要根据产品单价和数量来计算所有选中商品的总价. 这个逻辑最好在前台使用JavaScript实现,如果把这个逻辑移动到后台C#实现,则会导致过多 ...