51NOD1799 二分答案 【组合+分块打表】
来源:互联网 发布:健身能保持年轻吗 知乎 编辑:程序博客网 时间:2024/06/04 18:37
传送门
显然确定了2分的结果下标,模拟一下即可得到途经的所有mid
记录a[mid]>m 和 a[mid]<=m的mid数量分别为larger,samller
要求解1e9!,分块打表即可
#include<stdio.h>#include<bits/stdc++.h>#define ll long long#define pii pair<int,int>#define pll pair<ll,ll>#define MEM(a,x) memset(a,x,sizeof(a))#define lowbit(x) ((x)&-(x))using namespace std;const int inf=1e9+7;const int INF = inf;pll arr[]={ {1,1},{10000000,682498929},{20000000,491101308},{30000000,76479948},{40000000,723816384},{50000000,67347853},{60000000,27368307},{70000000,625544428},{80000000,199888908},{90000000,888050723},{100000000,927880474},{110000000,281863274},{120000000,661224977},{130000000,623534362},{140000000,970055531},{150000000,261384175},{160000000,195888993},{170000000,66404266},{180000000,547665832},{190000000,109838563},{200000000,933245637},{210000000,724691727},{220000000,368925948},{230000000,268838846},{240000000,136026497},{250000000,112390913},{260000000,135498044},{270000000,217544623},{280000000,419363534},{290000000,500780548},{300000000,668123525},{310000000,128487469},{320000000,30977140},{330000000,522049725},{340000000,309058615},{350000000,386027524},{360000000,189239124},{370000000,148528617},{380000000,940567523},{390000000,917084264},{400000000,429277690},{410000000,996164327},{420000000,358655417},{430000000,568392357},{440000000,780072518},{450000000,462639908},{460000000,275105629},{470000000,909210595},{480000000,99199382},{490000000,703397904},{500000000,733333339},{510000000,97830135},{520000000,608823837},{530000000,256141983},{540000000,141827977},{550000000,696628828},{560000000,637939935},{570000000,811575797},{580000000,848924691},{590000000,131772368},{600000000,724464507},{610000000,272814771},{620000000,326159309},{630000000,456152084},{640000000,903466878},{650000000,92255682},{660000000,769795511},{670000000,373745190},{680000000,606241871},{690000000,825871994},{700000000,957939114},{710000000,435887178},{720000000,852304035},{730000000,663307737},{740000000,375297772},{750000000,217598709},{760000000,624148346},{770000000,671734977},{780000000,624500515},{790000000,748510389},{800000000,203191898},{810000000,423951674},{820000000,629786193},{830000000,672850561},{840000000,814362881},{850000000,823845496},{860000000,116667533},{870000000,256473217},{880000000,627655552},{890000000,245795606},{900000000,586445753},{910000000,172114298},{920000000,193781724},{930000000,778983779},{940000000,83868974},{950000000,315103615},{960000000,965785236},{970000000,492741665},{980000000,377329025},{990000000,847549272},{1000000000,698611116}};const int N = 50 + 5;int larger,smaller;void binS(int n,int k){ larger=smaller=0; int l=1,r=n; int mid=(l+r)/2; while (l<=r) { if (mid<=k){ l=mid+1; ++smaller; } else{ r=mid-1; ++larger; } mid=(l+r)/2; }}ll getFact(ll n){ if(n<=0){ return 1; } int m=sizeof(arr)/sizeof(*arr); pll*it=lower_bound(arr,arr+m,make_pair(n,(ll)0)); ll ans; if(it->first>n){ --it; } ans=it->second; while(n>it->first){ ans=(ans*n)%inf; --n; } return ans;}ll slove(int n,int m){ ll ans=1; for(int i=0;i<larger;++i){ ans=(ans*(n-m-i))%inf; } for(int i=0;i<smaller;++i){ ans=(ans*(m-i))%inf; } return (ans*getFact(n-smaller-larger))%inf;}int main(){ //freopen("/home/lu/code/r.txt","r",stdin); //freopen("/home/lu/code/w.txt","w",stdout); int n,m,k; while(~scanf("%d%d%d",&n,&m,&k)){ binS(n,k); printf("%lld\n",slove(n,m)); } return 0;}
阅读全文
0 0
- 51NOD1799 二分答案 【组合+分块打表】
- 51nod1799 二分答案(分块打表)
- 51nod1799 二分答案
- 【51Nod1799】二分答案
- 51nod 1799 二分答案(分块打表+组合数)
- 51nod 1799 二分答案 思维 + 分块打表
- 51nod 1799 思维 二分 数论 分块打表
- 51nod 1799 二分答案 (打表)
- 分块打表
- [排列组合 + 分段打表] 51nod 算法马拉松25 A. 二分答案
- 西南交通大学第十三届ACM决赛-重现赛-C(组合数+容斥+分块打表)
- NP(分块打表)
- Bzoj 3343: 教主的魔法(分块+二分答案)
- 组合数学打表
- BZOJ 3758 数数 分块打表
- lightoj 1234 - Harmonic Number 【分块打表】
- bzoj 3758: 数数 分块打表
- [分块打表] [Luogu P1822] 魔法指纹
- czl蒻蒟的OI之路9
- 计算机网络第一次作业
- 如何防止网站被攻击
- Linux 防火墙笔记
- MySQL 的 select count() 优化
- 51NOD1799 二分答案 【组合+分块打表】
- 关于数据序列化(3),JSON的方式,FastJson序列化对象和List集合示例
- Freemarker实例教程
- JavaScript:void(0)含义
- PowerPoint, Word, Ole操作
- ajax请求导致status为canceled的原因
- Linux驱动的并发处理---原子操作
- 各种排序算法(JS实现)
- SpringMVC