CodeForcesGym 100729A Binomial coefficients
2015-11-08 21:31
176 查看
给一个数m,求所有满足C(n,k)==m的二元组(n,k)
由组合数的对称性,如果只算左边,k<=27,另一半对称可得
还有个爆long long的问题,取个上界即可
同学算了上界,直接拿来用
由组合数的对称性,如果只算左边,k<=27,另一半对称可得
还有个爆long long的问题,取个上界即可
同学算了上界,直接拿来用
#include <bits/stdc++.h> using namespace std; typedef long long ll; struct P { ll n, k; P(){} P(ll _n, ll _k){n = _n; k = _k;} }; bool operator < (P a, P b) { if(a.n != b.n) return a.n < b.n; return a.k < b.k; } ll C(ll n, ll k) { ll res = 1; for(int i = 1; i <= k; i++) res = res * (n - i + 1) / i; return res; } int main() { ll f[30]={0,1e15,5e7,2e5,13000,2700,950,500,300,200,150,120,100,90,80,72,67,63,61,60,60,60,55,55,55,55,55,55,55,55}; int T; scanf("%d", &T); while(T--) { ll M; scanf("%lld", &M); vector<P> ans; for(int k = 1; k <= 27; k++) { ll l = k, r = f[k]; while(l != r) { ll m = (l + r) >> 1; if(C(m, k) < M) l = m + 1; else r = m; } if(C(l, k) == M) { ans.push_back(P(l, k)); if(l - k > 27) ans.push_back(P(l, l - k)); } } sort(ans.begin(), ans.end()); printf("%d\n", ans.size()); for(int i = 0; i < ans.size(); i++) printf("(%lld,%lld) ", ans[i].n, ans[i].k); printf("\n"); } return 0; }
相关文章推荐
- HotSpot VM GC 的种类
- linux select 网络模型
- JavaScript执行环境及作用域
- 数据结构之简单队列的实现
- 2. javascript 引擎Rhino源代码分析 简单代码分析
- 传感器
- Qt从零开始制作串口调试助手-(第一章、工程文件建立)-Creator_Ly
- Activity launchMode之singleTask与taskAffinity扫盲
- 高通平台Camera录像过程-- 数据流浅析
- Session cookie
- 个人阅读博客2
- IT讲师的挑战
- Android中Application类用法(转)
- Reverse digits of an integer(数字倒换)
- C#串口 Demo
- C语言实现链表之单向链表(十一)设置结点数据与获取结点数据
- HttpClient使用第一弹,多线程+IP代理扫描未注册域名
- 博客之开篇
- 小旭的互联网营销之故事中的营销
- linux安装