原题链接:Problem - 1420D - Codeforces

题目大意:给你n个灯,和每个等的亮的时间段,问你有多少种可以有k个灯一起亮的种数(如果k = 3而且灯 1 2 3在几个时间点都可以一起亮,只算一种。

思路:用区间覆盖,{l, 1} {r + 1, -1},然后sort,维护时间点内灯的个数。每加进来一个等的时候,种数即为现在一定要这个灯,然后在剩下的灯中(维护的这个时间有的灯)选出k - 1个即为组合数,而且不会重复。

AC代码:

#include<bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f
typedef pair<int, int> PII;
const double pi = acos(-1.0);
#define rep(i, n) for (int i = 1; i <= (n); ++i)
#define rrep(i, n) for (int i = n; i >= (1); --i)
typedef long long ll;
#define sqar(x) ((x)*(x))const ll M = 998244353;
const int N = 3e5 + 10;
PII a[N << 1];
ll fac[N], invfac[N];inline ll qpow(ll a, ll n, ll p)// 快速幂
{ll ans = 1;while (n){if (n & 1)ans = ans % p * a % p;a = a % p * a % p;n >>= 1;}return ans;
}inline ll inv(ll a, ll p)
{return qpow(a, p - 2, p);
}void init()
{fac[0] = 1;for (int i = 1; i < N; ++i) fac[i] = (fac[i - 1] * i) % M;invfac[N - 1] = inv(fac[N - 1], M);for (int i = N - 2; i >= 0; --i) invfac[i] = (invfac[i + 1] * (i + 1)) % M;
}ll C(int n, int m)
{if (n < m || m < 0) return 0;return fac[n] * invfac[m] % M * invfac[n - m] % M;
}int main()
{int n, k;scanf("%d %d", &n, &k);int cnt = 0;init();rep(i, n){int l, r;scanf("%d%d", &l, &r);a[++cnt] = {l, 1};a[++cnt] = {r + 1, -1};}sort(a + 1, a + 1 + cnt);int num = 0;ll res = 0;rep(i, cnt){if(a[i].second == 1){res = (res + C(num, k - 1)) % M;num++;}else num--;}printf("%lld", res);return 0;
}

不会组合数学模板的去学!!

这里有前几天总结的用逆元快速幂求的模板(题目给的取模的模必须是质数才能用)。拿去不谢:

ll fac[N], invfac[N];inline ll qpow(ll a, ll n, ll p)// 快速幂
{ll ans = 1;while (n){if (n & 1)ans = ans % p * a % p;a = a % p * a % p;n >>= 1;}return ans;
}inline ll inv(ll a, ll p)
{return qpow(a, p - 2, p);
}void init() //注意要在主函数中init()!!!
{fac[0] = 1;for (int i = 1; i < N; ++i) fac[i] = (fac[i - 1] * i) % M;invfac[N - 1] = inv(fac[N - 1], M);for (int i = N - 2; i >= 0; --i) invfac[i] = (invfac[i + 1] * (i + 1)) % M;
}ll C(int n, int m)
{if (n < m || m < 0) return 0;return fac[n] * invfac[m] % M * invfac[n - m] % M;
}

我比较喜欢把模数写为M,如果你喜欢用mod就把M都改成mod

D. Rescue Nibel(cf) 区间覆盖 + 组合数学相关推荐

  1. HDU - 3974 Assign the task (DFS建树+区间覆盖+单点查询)

    题意:一共有n名员工, n-1条关系, 每次给一个人分配任务的时候,(如果他有)给他的所有下属也分配这个任务, 下属的下属也算自己的下属, 每次查询的时候都输出这个人最新的任务(如果他有), 没有就输 ...

  2. UVA10020(最小区间覆盖)

    题意:       给你一个区间[0,m]和一些小的区间[l,r]让你选择最少的小区间个数去把整个区间覆盖起来. 思路:       算是比较经典的贪心题目吧(经典于难度没什么对应关系),大体思路可以 ...

  3. 2016 Multi-University Training Contest 10 [HDU 5861] Road (线段树:区间覆盖+单点最大小)...

    HDU 5861 题意 在n个村庄之间存在n-1段路,令某段路开放一天需要交纳wi的费用,但是每段路只能开放一次,一旦关闭将不再开放.现在给你接下来m天内的计划,在第i天,需要对村庄ai到村庄bi的道 ...

  4. 高效算法——E - 贪心-- 区间覆盖

    E - 贪心-- 区间覆盖 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=85904#problem/E 解题思路: 贪心思想, ...

  5. P2082 区间覆盖(加强版)

    基础刷起来.水题刷起来... 其实区间覆盖的模板应该背这个... 同样维护left和right,只不过最后要加上r-l+1.里面维护的就有点不一样. 代码: #include<cstdio> ...

  6. *【UVA - 10382】Watering Grass(贪心,区间覆盖问题,思维)

    题干: 题目大意: 有一块草坪,长为l,宽为w,在它的水平中心线上有n个位置可以安装喷水装置,各个位置上的喷水装置的覆盖范围为以它们自己的半径ri为圆.求出最少需要的喷水装置个数,如果无论如何都不能覆 ...

  7. 【HDU - 1698】 Just a Hook(线段树模板 区间覆盖更新(laz标记) + 区间和查询 )

    题干: In the game of DotA, Pudge's meat hook is actually the most horrible thing for most of the heroe ...

  8. 【sdut 1751】 区间覆盖问题

    区间覆盖问题 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Description 设x1 ...

  9. 区间覆盖全部类型及部分精选习题汇总详解(贪心策略)

    内容如下: 1)区间完全覆盖问题 问题描述:给定一个长度为m的区间,再给出n条线段的起点和终点(注意这里是闭区间),求最少使用多少条线段可以将整个区间完全覆盖 样例: 区间长度8,可选的覆盖线段[2, ...

最新文章

  1. 使用大batch优化深度学习:训练BERT仅需76分钟 | ICLR 2020
  2. pil拷贝,剪切,缩放
  3. JDBC驱动程序的四种方式
  4. 体感Kinect手势识别开发基本原理
  5. AutoIT 实现Firefox下载
  6. MySQL管理员指南
  7. flash可以编辑html文本吗,flash中怎么插入并编辑文字字体样式?
  8. Android之动画
  9. x86架构下 CF与OF标志位 带符号和无符号运算 详解
  10. 戏耍Transaction,多个连接的Transaction处理(非COM+)
  11. Mysql学习总结(30)——MySQL 索引详解大全
  12. 大数据“杀熟不杀生”;微信朋友圈广告没完;美团打车撒币上海 | 一周业界事
  13. C++冒泡排序(初级版)
  14. Helm 3 完整教程(三):chart 的文件结构和字段详解
  15. python_sorted()详解
  16. WPF界面设计的模式
  17. 如何优雅的在word打公式
  18. ups机房动环监控系统方案
  19. HTML Purifier解决XSS问题
  20. Excel2003 去除重复项

热门文章

  1. 关于ADFS的局限性,你了解多少?
  2. dump文件深度分析
  3. Java中int的取值范围
  4. platform.js
  5. [渝粤教育] 中国地质大学 大学物理(上) 复习题
  6. 2015年09月29日
  7. 虚拟化技术-Qemu-KVM
  8. S3C2440 开发板实战(7):字符设备驱动框架+LED驱动
  9. 关于CORBA实现的介绍
  10. leetcode 5473. 灯泡开关 IV (阿里云周赛)