题意:求使得C(n,k)=m的所有的n,k

根据杨辉三角可以看出,当k固定时,C(n,k)是相对于n递增的;当n固定且k<=n/2时,C(n,k)是相对于k递增的,因此可以枚举其中的一个,然后二分另一个。

我的方法是先预处理出2000以内的全部组合数,然后枚举n,二分找到对应的k<=n/2,然后把(n,k)和(n,n-k)加入到set中。

但这样做有一个缺陷,就是当k太小的时候,n可能会很大,数组存不下,因此当k比较小的时候,应该单独枚举k然后二分找到n。

k=1的时候不用算,直接加入即可。

注意溢出的问题。

 #include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef double db;
const ll N=+,inf=0x3f3f3f3f3f3f3f3f;
const ll up[]= {,,,,,};
ll m,C[N][N];
struct D {
ll n,k;
bool operator<(const D& b)const {return n!=b.n?n<b.n:k<b.k;}
};
set<D> ans;
ll c(ll n,ll k) {
ll ret=;
for(ll i=; i<=k; ++i)ret=ret*(n-i+)/i;
return ret;
}
ll bi(ll l,ll r,ll k) {
while(l<=r) {
ll mid=(l+r)>>;
ll t=c(mid,k);
if(t==m)return mid;
t<m?l=mid+:r=mid-;
}
return -;
}
int main() {
C[][]=;
for(ll i=; i<N; ++i)
for(ll j=; j<=i; ++j)
C[i][j]=j==||j==i?:min(inf,C[i-][j]+C[i-][j-]);
ll T;
for(scanf("%lld",&T); T--;) {
ans.clear();
scanf("%lld",&m);
for(ll i=; i<N; ++i) {
ll j=lower_bound(C[i],C[i]+i/+,m)-C[i];
if(C[i][j]==m)ans.insert({i,j}),ans.insert({i,i-j});
}
ans.insert({m,}),ans.insert({m,m-});
for(ll i=; i<=; ++i) {
ll j=bi(i,up[i],i);
if(j!=-)ans.insert({j,i}),ans.insert({j,j-i});
}
printf("%lld\n",ans.size());
ll f=;
for(D x:ans) {
f?f--:printf(" ");
printf("(%lld,%lld)",x.n,x.k);
}
puts("");
}
return ;
}

UVA - 1649 Binomial coefficients (组合数+二分)的更多相关文章

  1. UVA 1649 Binomial coefficients

    https://vjudge.net/problem/UVA-1649 题意: 输入m,求所有的C(n,k)=m m<=1e15 如果枚举n,那么C(n,k)先递增后递减 如果枚举k,那么C(n ...

  2. UVa 1649 Binomial coefficients 数学

    题意: \(C(n, k) = m(2 \leq m \leq 10^{15})\),给出\(m\)求所有可能的\(n\)和\(k\). 分析: 设\(minK = min(k, n - k)\),容 ...

  3. 紫书 习题 10-21 UVa 1649 (组合数)

    C(n, k) = m, 固定k,枚举k 这里用到了组合数的一个性质 当k固定的时候,C(2 * k, k) 最小 C(m, k)最大(对于这道题而言是这样,因为大于m 就最终答案不可能为m了) 所以 ...

  4. UVa 714 Copying Books(二分)

    题目链接: 传送门 Copying Books Time Limit: 3000MS     Memory Limit: 32768 KB Description Before the inventi ...

  5. UVA 10816 + HDU 1839 Dijstra + 二分 (待研究)

    UVA 题意:两个绿洲之间是沙漠,沙漠的温度不同,告诉起点,终点,求使得从起点到终点的最高温度最小的路径,如果有多条,输出长度最短的路径: 思路:用最小费用(最短路径)最大流(最小温度)也能搞吧,但因 ...

  6. UVA 10668 - Expanding Rods(数学+二分)

    UVA 10668 - Expanding Rods 题目链接 题意:给定一个铁棒,如图中加热会变成一段圆弧,长度为L′=(1+nc)l,问这时和原来位置的高度之差 思路:画一下图能够非常easy推出 ...

  7. zoj 1938 Binomial Showdown 组合数裸基础

    Binomial Showdown Time Limit: 2 Seconds      Memory Limit: 65536 KB In how many ways can you choose ...

  8. uva 10566 Crossed Ladders (二分)

    http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...

  9. UVa 10539 (筛素数、二分查找) Almost Prime Numbers

    题意: 求正整数L和U之间有多少个整数x满足形如x=pk 这种形式,其中p为素数,k>1 分析: 首先筛出1e6内的素数,枚举每个素数求出1e12内所有满足条件的数,然后排序. 对于L和U,二分 ...

随机推荐

  1. C#字符串内插-$

    1.字符串内插 $特殊字符将字符串文本标识未内插字符串,可能包含内插表达式的字符串文本. 将内插字符串解析为结果字符串,带有内插表达式的项会替换为表达式结果的字符串表示形式. 在C#6级更高版本语言中 ...

  2. python-Web-django-图片上传

    建路由 创建方法 渲染页面 下载plupload插件.将插件放在项目根目录下的static下 写页面,引入js,写html 这个容器:放上传的图片 当上传后,需要ul里放3要素: 元素1:隐藏Inpu ...

  3. 【Aizu - 0558】Cheese(bfs)

    -->Cheese 原文是日语,这里就写中文了 Descriptions: 在H * W的地图上有N个奶酪工厂,每个工厂分别生产硬度为1-N的奶酪.有一只老鼠准备从出发点吃遍每一个工厂的奶酪.老 ...

  4. Leetcode之动态规划(DP)专题-712. 两个字符串的最小ASCII删除和(Minimum ASCII Delete Sum for Two Strings)

    Leetcode之动态规划(DP)专题-712. 两个字符串的最小ASCII删除和(Minimum ASCII Delete Sum for Two Strings) 给定两个字符串s1, s2,找到 ...

  5. cisco路由器配置(三) 最终网关

    Gateway(config)#ip route 0.0.0.0 0.0.0.0 217.124.6.1  /*管理距离为1/orGateway(config)#ip route 0.0.0.0 0. ...

  6. 应用安全 - 工具|框架 - Java - Jenkins - 漏洞 - 汇总

    未授权访问 /script /manage/asynchPeople//config.xml CVE-2015-8103 Date 2015.11 类型反序列化导致远程命令执行 影响范围Jenkins ...

  7. TensorFlow实战第八课(卷积神经网络CNN)

    首先我们来简单的了解一下什么是卷积神经网路(Convolutional Neural Network) 卷积神经网络是近些年逐步兴起的一种人工神经网络结构, 因为利用卷积神经网络在图像和语音识别方面能 ...

  8. 【Linux开发】linux设备驱动归纳总结(四):4.单处理器下的竞态和并发

    linux设备驱动归纳总结(四):4.单处理器下的竞态和并发 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ...

  9. python+selenium显示等待、隐式等待和强制等待的区别

    在实际使用selenium或者appium时,等待下个等待定位的元素出现,特别是web端加载的过程,都需要用到等待,而等待方式的设置是保证脚本稳定有效运行的一个非常重要的手段,在selenium中(a ...

  10. SolidWorks学习笔记6抽壳,加强筋,扫描,放样

    抽壳 概念:移除一个或者多个面,然后将其余的模型外表面向内或者向外偏移相等或者不等的距离 针对不同面设置不同厚度 方向参考 有实体的一侧是内测, 没有实体的一侧是外侧 顺序 先圆角再抽壳 加强筋. 点 ...