博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
清北考前刷题day5早安
阅读量:4593 次
发布时间:2019-06-09

本文共 2572 字,大约阅读时间需要 8 分钟。

 

/*C(n,k)*/#include
#include
#include
#define ll long long#define N 1000007#define M 1000000007using namespace std;ll n,k,ans,cnt1,cnt0;ll inv[N]={
1,1},fac[N]={
1,1},f[N]={
1,1};inline ll read(){ int x=0,f=1;char c=getchar(); while(c>'9'||c<'0'){
if(c=='-')f=-1;c=getchar();} while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();} return x*f;}inline void init(){ for(int i=2;i<=N;i++) { fac[i]=(fac[i-1]%M*i%M)%M; f[i]=((M-M/i)%M*f[M%i])%M; inv[i]=(inv[i-1]*f[i]%M)%M; }}inline ll C(ll a,ll b){ return fac[a]%M*inv[b]%M*inv[a-b]%M;}int main(){ freopen("cube.in","r",stdin); freopen("cube.out","w",stdout); n=read();k=read();init(); printf("%I64d\n",C(n,k)); return 0;}

 

 

 

/*做最大生成树时标记哪些边被加了进去。然后把这些边排序。如果询问权值w的货物,就在边中查找小于w的最大值假设拍第k大答案就是k+1。 复杂度O(qlogn) */#include
#include
#include
#include
#define N 100007using namespace std;int n,m,q,ans,cnt,num;int head[N],fa[N];struct edge{ int u,v,w,net,pos; bool operator < (const edge &a) const{ return w>a.w; }}e[N<<1],E[N],tmp[N<<1];inline int read(){ int x=0,f=1;char c=getchar(); while(c>'9'||c<'0'){
if(c=='-')f=-1;c=getchar();} while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();} return x*f;}inline void add(int u,int v,int w){ e[++cnt].u=u;e[cnt].v=v;e[cnt].w=w; e[cnt].net=head[u];head[u]=cnt;}int find(int x){
return fa[x]==x?x:fa[x]=find(fa[x]);}void kruskal(){ int r1,r2; sort(E+1,E+m+1); for(int i=1;i<=m;i++) { r1=find(E[i].u),r2=find(E[i].v); if(r1==r2)continue; fa[r1]=r2;num++; add(E[i].u,E[i].v,E[i].w);add(E[i].v,E[i].u,E[i].w); tmp[num].pos=num;tmp[num].u=E[i].u,tmp[num].v=E[i].v;tmp[num].w=E[i].w; if(num==n-1) break; }}int serch(int x){ int l=1,r=n-1,mid; while(l<=r) { mid=l+r>>1; if(tmp[mid].w>=x) l=mid+1; else ans=mid,r=mid-1; }return num-ans+1;}int main(){ freopen("warehouse.in","r",stdin); freopen("warehouse.out","w",stdout); int x,y,z,k; n=read();m=read();q=read(); for(int i=1;i<=n;i++) fa[i]=i; for(int i=1;i<=m;i++) { E[i].u=read();E[i].v=read();E[i].w=read(); }kruskal(); for(int i=1;i<=q;i++) { x=read(); if(x<=e[cnt].w){printf("1\n");continue;} if(x>e[1].w){printf("%d\n",n);continue;} k=serch(x); printf("%d\n",k+1); } return 0;}

 

 

 

转载于:https://www.cnblogs.com/L-Memory/p/7768618.html

你可能感兴趣的文章
JSON跨域原理实现
查看>>
wiringPi 库下用C控制GPIO
查看>>
Excel-单条件和多条件匹配搜索
查看>>
Android bluetooth low energy (ble) writeCharacteristic delay callback
查看>>
Delphi7使用一段时间后抽风提示注册
查看>>
intent介绍
查看>>
css元素垂直居中
查看>>
启用WCF测试客户端(WCF Test Client)的相关技巧
查看>>
用 XML 文件持久化和恢复图片信息
查看>>
完美洗牌算法
查看>>
Redis-数据操作
查看>>
noip 2012 Day2 T2 借教室
查看>>
Css:背景色透明,内容不透明之终极方法!兼容所有浏览器
查看>>
Atitit 常用比较复杂的图像滤镜 attilax大总结
查看>>
给大忙人看的Java核心技术笔记(1、基本的编程结构)
查看>>
C++设计模式:Template Method
查看>>
Exponential-time Algorithm
查看>>
廖---高级特性 生成器 迭代器
查看>>
C-字符串和格式化输入\输出
查看>>
虚拟化的一些基本常识
查看>>