紫书 习题 10-21 UVa 1649 (组合数)
C(n, k) = m, 固定k,枚举k
这里用到了组合数的一个性质
当k固定的时候,C(2 * k, k) 最小
C(m, k)最大(对于这道题而言是这样,因为大于m 就最终答案不可能为m了)
所以就二分去枚举2*k到m之间了。
最后注意算组合数的时候超过m可以直接返回,同时比较时候可能会超出long long
有小技巧可以避免,看代码。
#include<cstdio>
#include<vector>
#include<algorithm>
#define REP(i, a, b) for(int i = (a); i < (b); i++)
using namespace std;
typedef long long ll;
ll m;
vector<pair<ll, ll> > g;
ll c(ll n, int k)
{
ll ret = 1;
REP(i, 1, k + 1)
{
if ((ret / i) > (m / (n - i + 1))) return m + 1; //注意这里可能会爆long long,所以要换一种写法
ret = ret * (n - i + 1) / i;
}
return ret;
}
void solve()
{
for(int k = 1; c(2 * k, k) <= m; k++)
{
ll l = 2 * k - 1, r = m + 1;
while(l + 1 < r)
{
ll mid = (l + r) >> 1;
ll t = c(mid, k);
if(t == m)
{
g.push_back(make_pair(mid, k));
if(mid != k * 2)
g.push_back(make_pair(mid, mid - k));
break;
}
else if(t < m) l = mid;
else r = mid;
}
}
}
int main()
{
int T;
scanf("%d", &T);
while(T--)
{
g.clear();
scanf("%lld", &m);
solve();
sort(g.begin(), g.end());
printf("%d\n(%lld,%lld)", g.size(), g[0].first, g[0].second);
REP(i, 1, g.size()) printf(" (%lld,%lld)", g[i].first, g[i].second);
puts("");
}
return 0;
}
紫书 习题 10-21 UVa 1649 (组合数)的更多相关文章
- 紫书 习题 11-9 UVa 12549 (二分图最小点覆盖)
用到了二分图的一些性质, 最大匹配数=最小点覆盖 貌似在白书上有讲 还不是很懂, 自己看着别人的博客用网络流写了一遍 反正以后学白书应该会系统学二分图的,紫书上没讲深. 目前就这样吧. #includ ...
- 紫书 习题 11-8 UVa 1663 (最大流求二分图最大基数匹配)
很奇怪, 看到网上用的都是匈牙利算法求最大基数匹配 紫书上压根没讲这个算法, 而是用最大流求的. 难道是因为第一个人用匈牙利算法然后其他所有的博客都是看这个博客的吗? 很有可能-- 回归正题. 题目中 ...
- 紫书 习题8-12 UVa 1153(贪心)
本来以为这道题是考不相交区间, 结果还专门复习了一遍前面写的, 然后发现这道题的区间是不是 固定的, 是在一个范围内"滑动的", 只要右端点不超过截止时间就ok. 然后我就先考虑有 ...
- 紫书 习题8-7 UVa 11925(构造法, 不需逆向)
这道题的意思紫书上是错误的-- 难怪一开始我非常奇怪为什么第二个样例输出的是2, 按照紫书上的意思应该是22 然后就不管了,先写, 然后就WA了. 然后看了https://blog.csdn.net/ ...
- 紫书 习题 11-10 UVa 12264 (二分答案+最大流)
书上写的是UVa 12011, 实际上是 12264 参考了https://blog.csdn.net/xl2015190026/article/details/51902823 这道题就是求出一种最 ...
- 紫书 习题 10-13 UVa 11526(打表找规律+分步枚举)
首先看这道题目,我预感商数肯定是有规律的排列的,于是我打表找一下规律 100 / 1 = 100 100 / 2 = 50 100 / 3 = 33 100 / 4 = 25 100 / 5 = ...
- 紫书 习题 10-12 UVa 557(概率计算)
开始的时候我没有考虑1/2的概率,直接一波组合数,然后WA 后来去看题解发现我们可以反过来想,求最后两个人不一样的情况 这个时候肯定会抛到最后的 所以每一种可能就是(0.5)^(n - 2),然后一共 ...
- 紫书 习题7-13 UVa 817(dfs+栈求表达式的值)
题目链接 点击打开链接 这道题分为两个部分, 一用搜索枚举每种可能, 二计算表达式的值, 有挺多细节需要注意 特别注意我的代码中在计算表达式的值中用到了一个!(代码枚举中的!表示不加符号, 我现在说 ...
- 紫书 习题7-8 UVa 12107 (IDA*)
参考了这哥们的博客 https://blog.csdn.net/hyqsblog/article/details/46980287 (1)atoi可以char数组转int, 头文件 cstdlib ...
随机推荐
- 架构设计--用户端全http參数接口具体说明v1
1. 用户端全http參数接口具体说明v1.doc 1 2. change histor 1 3. 接口通用參数说明 1 4. 函数注冊接口(规划中) 3 5. 用户权限模块 3 5.1. 用户注冊接 ...
- QtWebkit里RenderLayer树的绘制具体流程分析
更新:RenderLayer树的绘制对RenderObject的绘制.同一时候补足绘制阶段的描写叙述. QtWebkit里,QWebView,QWebPage和QWebFr ...
- IP地址的规划和设计方法(二)
五,IP地址规划方法 (1)IP地址规划的基本步骤 网络地址规划须要按下面6步进行: a)推断用户对网络与主机数的需求: ...
- 使用IIS承载WCF服务
作者:jiankunking 出处:http://blog.csdn.net/jiankunking 1.WCF能够方便的通过IIS承载,此承载模型与ASP.NET和ASP.NET Web Servi ...
- 大话html5应用与app应用优缺点
在这个app横飞的年代,对于整个产品研发团队来讲,高速的迭代,爆炸式的功能追加已经成为了互联网行业的时代标签,以小时甚至分钟为单位的进度度量成为了常态.在这个市场大环境下,浪里淘沙的不单单是商业模式. ...
- spark 卡在spark context,运行出现spark Exception encountered while connecting to the server : javax.security.sasl.SaslException
原因: 使用root用户运行spark代码 解决方法:使用非管理员账户运行spark即可 [userone@localhost bin]$ ./add-user.sh What type of use ...
- JavaScript总结(3)
第3章 获取用户的输入 <script>10 intA=prompt("请输入第一个数字","");11 intB=prompt("请输入 ...
- 《剑指offer》矩形覆盖
一.题目描述 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形.请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? 二.输入描述 输入n 三.输出描述 输出有多少种不同的覆 ...
- dedecms4张关键表解析之2
4张核心表的具体情况: 1.第一张表:dede_arctype 栏目表 字段解析: topid:上一级的id(0表示为顶级,1表示为下一级....) typename: 栏目名称 typedir:栏 ...
- vue子组件使用指令 同时绑定v-model 指令没有作用
//这里直接上代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...