题意:给你n个闭区间,挑选k个区间并且把它们做交集,得到区间[L,R],定义f([L,R])=R-L+1;求所有可能的f值得和。

题解:

①当区间[L,R]出现的次数d>=k,则ans=C(n,k)*(R-L+1)

②数据比较大,需要把端点离散化,离散化时需把右端点+1,

③求组合需要用到除法,需把除法变为乘法,则要用到逆元,即a/b等于a*(b的逆元)

④求各个离散化后区间的f,并把它累加起来。

注意:中间过程防止爆int,鄙人经常爆,然后找BUG。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>using namespace std;#define maxn 200010
#define mod 1000000007long long f[maxn];
int l[maxn];
int r[maxn];
int hash[maxn*2];
int res[maxn*2];void fac()
{f[0]=1;for(int i=1;i<maxn;i++)f[i]=(f[i-1]*i)%mod;
}int qpow(long long x,int k)
{long long res=1;while(k){if(k&1) res = res * x % mod;x= x * x % mod;k>>=1;}return res;
}int inv(long long x)
{return qpow(x,mod-2);
}long long C(int n,int m)
{return f[n]*inv(f[m]*f[n-m]%mod)%mod;
}int main()
{fac();int n,k;scanf("%d%d",&n,&k);int cnt=0;for(int i=0;i<n;i++){scanf("%d%d",&l[i],&r[i]);hash[cnt++]=l[i];hash[cnt++]=++r[i];}sort(hash,hash+cnt);cnt=unique(hash,hash+cnt)-hash;for(int i=0;i<n;i++){int temp=lower_bound(hash,hash+cnt,l[i])-hash;res[temp]++;temp=lower_bound(hash,hash+cnt,r[i])-hash;res[temp]--;}int ans=0;int add=res[0];for(int i=1;i<cnt;i++){if(add>=k) ans=(ans+C(add,k)*(hash[i]-hash[i-1])%mod)%mod;add+=res[i];}printf("%d\n", ans);return 0;
}

View Code

转载于:https://www.cnblogs.com/mgxj/p/5663678.html

CodeForces 689E (离散化+逆元+组合)相关推荐

  1. Divide and Sum CodeForces - 1445D(排列组合+逆元)

    题意: 给定一个长度为2n的数组,将数组分成两个长度为n的数组p,q,将p从小到大排序,将q从大到小排序,对于每种分法,f(p,q)=∑i=1n\sum_{i=1}^{n}∑i=1n​|xi−yi|. ...

  2. CodeForces 630I Parking Lot (组合计数)

    题目链接:http://codeforces.com/problemset/problem/630/I #include<bits/stdc++.h> using namespace st ...

  3. CodeForces 997C-Sky Full of Stars〖容斥定理+组合计数〗

    网页链接:传送门 C. Sky Full of Stars time limit per test : 4 seconds memory limit per test : 256 megabytes ...

  4. Tennis Game CodeForces - 496D(唯一分解定理,费马大定理)

    Tennis Game CodeForces - 496D 通过排列组合解决问题. 首先两组不同素数的乘积,是互不相同的.这应该算是唯一分解定理的逆运用了. 然后是,输入中的素数,任意组合,就是n的因 ...

  5. 大数求乘法逆元c语言,乘法逆元(编程计算)+两道版题

    前言 看到这里的小盆友们千万不要以为这个东西很难,其实就是个1+1->1(1个定义+1个定理->1坨乘法逆元).Let's begin.web 有关乘法逆元定义 这个咱们就不要玩笑了,来, ...

  6. 收藏 | Google 发布关于机器学习工程的最佳实践

    来源:TensorFlow 本文约17800字,建议阅读10+分钟. 本文档旨在帮助已掌握机器学习基础知识的人员从 Google 机器学习的最佳实践中受益. 本文档旨在帮助已掌握机器学习基础知识的人员 ...

  7. 机器学习规则 (Rules of Machine Learning): 关于机器学习工程的最佳实践

    马丁·辛克维奇 本文档旨在帮助已掌握机器学习基础知识的人员从 Google 机器学习的最佳实践中受益.它介绍了一种机器学习样式,类似于 Google C++ 样式指南和其他常用的实用编程指南.如果您学 ...

  8. LR模型常见问题小议

     LR模型常见问题小议 标签: LR机器学习 2016-01-10 23:33 671人阅读 评论(0) 收藏 举报 本文章已收录于: 分类: 机器学习(10) 作者同类文章X 版权声明:本文为博 ...

  9. 你还不会用python进行数据分析吗

    你还不会用python进行数据分析吗 1.案例背景 用户价值细分是了解用户价值度的重要途径,而销售型公司中对于订单交易尤为关注,因此基于订单交易的价值度模型将更适合运营需求.针对交易数据分析的常用模型 ...

最新文章

  1. [原创] Matlab 指派问题模型代码
  2. 打印折痕方向(二叉树应用)
  3. gj4 深入类和对象
  4. Spring Boot笔记-利用Quartz进行定时任务,利用websocket推送到浏览器(界面为thymeleaf)
  5. Part1: Specification of Required Functions
  6. Linux echo
  7. 图 | 为什么存在关于图的研究
  8. 服务器上装的hadoop系统,在Ubuntu Server 18.04.1中安装Hadoop系统环境
  9. 【Alpha】Scrum Meeting 1
  10. 通达信 c 语言,通达信C
  11. 有哪些「饥饿营销」的失败案例?
  12. 十大实用的开源电子商务工具推荐
  13. 我就不信了,spring基础知识这么总结整理还拿不下大厂offer(一)
  14. LCD1602液晶显示屏使用方法
  15. 浅谈软件测试行业的前景,就业方向和薪资待遇
  16. Oracle中表的键和检查,Oracle 过程中检查数据表存在与否
  17. 猫狗大战使用CNN分类
  18. 1016: 银行利率 Python
  19. 【Python 爬虫小项目 01】租房数据
  20. 改变MacBook Pro的鼠标响应速度

热门文章

  1. iPhone黑屏幕转圈圈(解决办法)
  2. 系统吞吐量、TPS(也叫QPS)、用户并发量、性能测试概念和公式
  3. ERROR [com.netflix.discovery.TimedSupervisorTask] - task supervisor timed out
  4. RabbitMQ的三大交换器详解
  5. android设置webview缓存目录,Android基础入门教程——7.5.5 WebView缓存问题
  6. centos 6.5 yum
  7. ubuntu下针对php的thrift 安装折腾记录
  8. Oracle 11gR2 RAC OCR和votingdisk故障恢复案例
  9. HDU-时间挑战 树状数组
  10. 设置checkbox的只读