\(\mathcal{Description}\)

  Link.

  给定 \(n,k\),求 \(0\le b\le a\le n\) 的 \(\binom{a}{b}\) 的前 \(k\) 大。

  \(n\le10^6\),\(k\le10^5\)。

\(\mathcal{Solution}\)

  注意到 \(\binom{a}{b}<\binom{a+1}{b}\),所以把 \(\binom{n}i\) 塞进堆里,取走堆顶的 \(\binom{a}{b}\) 时顺手把 \(\binom{a-1}b\) 入堆就好。

  但组合数直接算会爆精度,取对数就能实现比较了。

\(\mathcal{Code}\)

#include <cmath>
#include <queue>
#include <cstdio> typedef std::pair<int, int> pii; const int MAXN = 1e6, MOD = 1e9 + 7;
int n, K, nfac[MAXN + 5], ifac[MAXN + 5];
double lfac[MAXN + 5]; inline double combl ( const int n, const int m ) {
return lfac[n] - lfac[m] - lfac[n - m];
} inline int combn ( const int n, const int m ) {
return 1ll * nfac[n] * ifac[m] % MOD * ifac[n - m] % MOD;
} inline int qkpow ( int a, int b, const int p = MOD ) {
int ret = 1;
for ( ; b; a = 1ll * a * a % p, b >>= 1 ) ret = 1ll * ret * ( b & 1 ? a : 1 ) % p;
return ret;
} struct cmp {
inline bool operator () ( const pii a, const pii b ) {
return combl ( a.first, a.second ) < combl ( b.first, b.second );
}
}; std::priority_queue<pii, std::vector<pii>, cmp> heap; int main () {
scanf ( "%d %d", &n, &K );
nfac[0] = nfac[1] = 1;
for ( int i = 2; i <= n; ++ i ) {
lfac[i] = lfac[i - 1] + log2 ( i );
nfac[i] = 1ll * i * nfac[i - 1] % MOD;
}
ifac[n] = qkpow ( nfac[n], MOD - 2 );
for ( int i = n - 1; ~ i; -- i ) ifac[i] = ( i + 1ll ) * ifac[i + 1] % MOD;
for ( int i = 0; i <= n; ++ i ) heap.push ( { n, i } );
int ans = 0;
while ( K -- ) {
pii t = heap.top (); heap.pop ();
ans = ( ans + combn ( t.first, t.second ) ) % MOD;
if ( t.first && t.first ^ t.second ) heap.push ( { t.first - 1, t.second } );
}
printf ( "%d\n", ans );
return 0;
}

最新文章

  1. Beta版本——用户试用与调研报告
  2. 一个简易的反射类库NMSReflector
  3. jQuery中关于height,innerWidth与outerWidth的区别
  4. 由一个订单推送想到了ObservableCollection的神奇用法
  5. 《CSS3实战》读书笔记 第4章:样式继承
  6. 开放产品开发(OPD):Archi 汉化工具下载
  7. 面向对象之struct
  8. emulatorarm.exe已停止工作
  9. 【HTML】Beginner8:Table
  10. Java---俄罗斯方块小游戏
  11. sqlite命令
  12. 使用 AngularJS 从零构建大型应用
  13. Android SurfaceView实战 带你玩转flabby bird (下)
  14. 【我们都爱Paul Hegarty】斯坦福大学IOS8公开组个人笔记28 ScrollView 幻灯片视图
  15. php,js 对字符串按位异或运算加密解密
  16. Problem E: 平面上的点和线——Point类、Line类 (V)
  17. Hibernate 再接触 总结
  18. mysql.user表中Host为%的含义
  19. 在引用的laravel的@include子模板中传递参数
  20. FluentScheduler

热门文章

  1. js知识框架图
  2. Kubernetes API作为权威接口,Kubernetes将成为软件的通用控制平面
  3. gopher协议在SSRF漏洞中的作用
  4. 园子的推广博文:欢迎收看 Apache Flink 技术峰会 FFA 2021 的视频回放
  5. Java 异步 I/O
  6. golang中的map
  7. APC 篇——备用 APC 队列
  8. JavaCV的摄像头实战之四:抓图
  9. 『无为则无心』Python基础 — 41、Python中文件的读写操作(一)
  10. 如何使用 pytorch 实现 SSD 目标检测算法