UVA 1649 Binomial coefficients
https://vjudge.net/problem/UVA-1649
题意:
输入m,求所有的C(n,k)=m
m<=1e15
如果枚举n,那么C(n,k)先递增后递减
如果枚举k,那么C(n,k)单调递增
所以可以枚举k,二分n,直至C(n,k)=m
k枚举到什么时候?
根据公式 C(n,k)=C(n,n-k)
所以只管那个小的k
k<n-k 即 k<n/2,
也就是对于每个n,k只算到n/2
所以 当C(k*2,k)>m 时,停止枚举
然后对于这个k,二分n
边界:l=k*2,r=m
#include<queue>
#include<cstdio>
#include<iostream>
using namespace std;
#define pairr pair<long long,long long>
#define make(a,b) make_pair(a,b)
priority_queue<pairr,vector<pairr>,greater<pairr> >q;
long long n;
long long C(long long m,long long k)
{
long long x=;
for(int i=;i<=k;i++)
{
if(x/i>n/(m-i+)) return n+;
x*=m-i+;
x/=i;
}
return x;
}
void solve()
{
long long l,r,mid,tmp;
for(int k=;C(k<<,k)<=n;k++)
{
l=k<<;
r=n;
while(l<=r)
{
mid=l+r>>;
tmp=C(mid,k);
if(tmp<n) l=mid+;
else if(tmp==n)
{
q.push(make(mid,k));
if(mid!=k<<) q.push(make(mid,mid-k));
break;
}
else r=mid-;
}
}
}
int main()
{
int T;
scanf("%d",&T);
long long siz;
while(T--)
{
scanf("%lld",&n);
solve();
siz=q.size();
printf("%d\n",siz);
while(siz--)
{
printf("(%lld,%lld)",q.top().first,q.top().second);
if(siz) printf(" ");
else printf("\n");
q.pop();
}
}
}
UVA 1649 Binomial coefficients的更多相关文章
- UVa 1649 Binomial coefficients 数学
题意: \(C(n, k) = m(2 \leq m \leq 10^{15})\),给出\(m\)求所有可能的\(n\)和\(k\). 分析: 设\(minK = min(k, n - k)\),容 ...
- UVA - 1649 Binomial coefficients (组合数+二分)
题意:求使得C(n,k)=m的所有的n,k 根据杨辉三角可以看出,当k固定时,C(n,k)是相对于n递增的:当n固定且k<=n/2时,C(n,k)是相对于k递增的,因此可以枚举其中的一个,然后二 ...
- 51nod1245 Binomial Coefficients Revenge
题目来源: HackerRank 基准时间限制:2 秒 空间限制:131072 KB 分值: 640 C(M,N) = M! / N! / (M - N)! (组合数).给出M和质数p,求C(M,0 ...
- 51nod 1245 Binomial Coefficients Revenge
Description C(M,N) = M! / N! / (M - N)! (组合数).给出M和质数p,求C(M,0), C(M,1)......C(M,M)这M + 1个数中,有多少数不是p的倍 ...
- 紫书 习题 10-21 UVa 1649 (组合数)
C(n, k) = m, 固定k,枚举k 这里用到了组合数的一个性质 当k固定的时候,C(2 * k, k) 最小 C(m, k)最大(对于这道题而言是这样,因为大于m 就最终答案不可能为m了) 所以 ...
- 【51nod 1245】Binomial Coefficients Revenge
题目大意 C(M,N) = M! / N! / (M - N)! (组合数).给出M和质数p,求C(M,0), C(M,1)......C(M,M)这M + 1个数中,有多少数不是p的倍数,有多少是p ...
- Some series and integrals involving the Riemann zeta function binomial coefficients and the harmonic numbers
链接:http://pan.baidu.com/s/1eSNkz4Y
- 99 Lisp Problems 列表处理(P1~P28)
L-99: Ninety-Nine Lisp Problems 列表处理类问题的解答,用Scheme实现,首先定义几个在后续解题中用到的公共过程: ; common procedure (define ...
- UVA10375 Choose and divide 质因数分解
质因数分解: Choose and divide Time Limit: 3000MS Memory Limit: Unknown 64bit IO Format: %lld & %l ...
随机推荐
- ServiceStack.Ormlit 使用Insert的时候自增列不会被赋值
Insert签名是这样的,将第2个参数设置为true就会返回刚插入的自增列ID了,然后可以手工赋值到对象上面去 public static long Insert<T>(this IDbC ...
- nodejs反向代理插件anyproxy安装
目前我使用的是Anyproxy,AnyProxy .这个软件的特点是可以获取到https链接的内容.在2016年年初的时候微信公众号和微信文章开始使用https链接.并且Anyproxy可以通过修改r ...
- 自测之Lesson14:多线程编程
题目:创建一个线程,并理清主线程结束时会发生什么. 代码: #include <stdio.h> #include <pthread.h> #include <unist ...
- 九度oj 题目1495:关键点
题目描述: 在一个无权图中,两个节点间的最短距离可以看成从一个节点出发到达另一个节点至少需要经过的边的个数. 同时,任意两个节点间的最短路径可能有多条,使得从一个节点出发可以有多条最短路径可以选择,并 ...
- Nautilus-Share-Message: Called "net usershare info" but it failed: Failed to
See what nautilus processes are running : ps aux | grep nautilus Kill all nautilus processes you see ...
- oracle怎样查询索引的使用情况
查询用户的索引select index_name,table_name,tablespace_name, index_type,uniqueness , status from dba_indexes ...
- Kafka性能之道
Kafka高性能之道 高效使用磁盘 零拷贝 批处理和压缩 Partition ISR 高效使用磁盘 >顺序写cipan >Append Only(数据不更新,无记录级的数据删除,只会整个s ...
- Dubbo和Spring Cloud开发框架对比
前言 微服务架构是互联网很热门的话题,是互联网技术发展的必然结果.它提倡将单一应用程序划分成一组小的服务,服务之间互相协调.互相配合,为用户提供最终价值.虽然微服务架构没有公认的技术标准和规范或者草案 ...
- 使用户浏览器添加没有的字体@font-face
@font-face的用法 @font-face { font-family: 'MyWebFont'; src: url('webfont.eot'); /* IE9 Compat Modes */ ...
- wpf DataGrid加载行号
<DataGrid Name="tkdg" HorizontalContentAlignment="Center" AutoGenerateColumns ...