题意:求使得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的时候不用算,直接加入即可.…
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…
题意: \(C(n, k) = m(2 \leq m \leq 10^{15})\),给出\(m\)求所有可能的\(n\)和\(k\). 分析: 设\(minK = min(k, n - k)\),容易看出\(minK\)的值绝对不会太大. 因为\(n \geq 2minK\),经过简单的计算可以知道\(minK\)不超过\(26\). 所以,可以枚举\(minK\),二分\(n\)来求解,二分的范围是\([minK,m]\). 二分的过程中需要比较\(C(n,k)\)和\(m\)的大小,因为\…
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…
题目链接: 传送门 Copying Books Time Limit: 3000MS     Memory Limit: 32768 KB Description Before the invention of book-printing, it was very hard to make a copy of a book. All the contents had to be re-written by hand by so called scribers. The scriber had b…
UVA 题意:两个绿洲之间是沙漠,沙漠的温度不同,告诉起点,终点,求使得从起点到终点的最高温度最小的路径,如果有多条,输出长度最短的路径: 思路:用最小费用(最短路径)最大流(最小温度)也能搞吧,但因为题意是看着博客做的,不小心看到了他的思路,就自己实现了一遍,二分温度,假设当前温度为x,求保证最大温度为x的情况下的最短路:打印路径就是递归打印. #include <iostream> #include <cstdio> #include <cstdlib> #incl…
UVA 10668 - Expanding Rods 题目链接 题意:给定一个铁棒,如图中加热会变成一段圆弧,长度为L′=(1+nc)l,问这时和原来位置的高度之差 思路:画一下图能够非常easy推出公式,设圆弧扇形部弧度r,那么能够计算出铁棒长度为lr/sin(r)这个公式在[0, pi/2]是单调递增的,所以能够用二分法去求解 要注意的一点是最后答案计算过程中带入mid,之前是带入x(二分的左边值),可实际上x是可能等于0的,而带入mid,因为是double型,所以mid实际上表示是一个很趋…
Binomial Showdown Time Limit: 2 Seconds      Memory Limit: 65536 KB In how many ways can you choose k elements out of n elements, not taking order into account? Write a program to compute this number. Input The input will contain one or more test cas…
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1507 比较简单的一题,直接对答案二分.因为对于同一组case,答案m越大,交点的高度就越小,可以从计算交点的函数中看出来.计算交点,假设mx=sqrt(sqr(x)-sqr(m)),my=sqrt(sqr(y)-sqr(m)),这两个是梯子跟两堵墙的交点.那么,交点的高度就是mx*my/(m…
题意: 求正整数L和U之间有多少个整数x满足形如x=pk 这种形式,其中p为素数,k>1 分析: 首先筛出1e6内的素数,枚举每个素数求出1e12内所有满足条件的数,然后排序. 对于L和U,二分查找出小于U和L的最大数的下标,作差即可得到答案. #include <cstdio> #include <cmath> #include <algorithm> typedef long long LL; ; ; ]; ; LL a[maxn], cnt = ; void…