题意:求使得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 ;
}

最新文章

  1. 完美解决CodeSmith无法获取MySQL表及列Description说明注释的方案
  2. MYSQL-用户权限的验证过程
  3. 基于Metronic的Bootstrap开发框架经验总结(4)--Bootstrap图标的提取和利用
  4. EBS应用服务器启动指南
  5. Connecting my Particle Photon Internet of Things device to the Azure IoT Hub(Translation)
  6. ASP.NET MVC中的错误-友好的处理方法
  7. linux下centos安装android sdk最新全面教程【可行】
  8. 【转】10分钟了解设计模式(C#)
  9. [项目记录]一个.net下使用HAP实现的吉大校园通知网爬虫工具:OAWebScraping
  10. [js高手之路] es6系列教程 - 迭代器,生成器,for...of,entries,values,keys等详解
  11. LeetCode第七天
  12. 【BZOJ1084】最大子矩阵(动态规划)
  13. js点击出现二级菜单,点击二级菜单主菜单换成二级菜单
  14. css3之transform属性实现div不定宽高垂直水平居中
  15. poj3368 Frequent values(线段树)
  16. [转]你所不知的 CSS ::before 和 ::after 伪元素用法
  17. BroPHP使用心得
  18. 86. Partition List (List)
  19. 活动中使用提示框(Toast)
  20. Feature Pyramid Networks for Object Detection

热门文章

  1. Beego开启热升级
  2. python高级篇
  3. Django学习笔记(二)URL编写规则
  4. 华为HCNA乱学Round 6:PVID,TAG,TRUNK
  5. 用grok拆分java日志
  6. Django2.2 会话技术cookie session token的区别以及实例介绍
  7. Linux实用技巧
  8. 6.maven的安装
  9. MySQL两种内核对比
  10. Vue路由守卫之路由独享守卫