摘要: 两次被问到这题了一次谷歌,一次百度,有必要好好弄清楚。先看这个题目,再看这个题目的推广。你有两个杯子,容量分别是a和b,你周围有自来水管(水无限),问能否量出c升水,也就是要求最终两个杯子中的水加起来是c升(c<=a+b)解:(1)设a和b的最大公约数是x,那么能量出c,当且仅当x能整除c。因为***(a,b)=x,则必然存在p和q,使得a*p+b*q=x。可以看到p和q必然一正一负,我们假设q为负(p为负的情况分析类似)。那么我们先考虑如何量出x升水,从等式上看,过程就是我们设法灌满a水杯p次,再倒出q次b升水,剩下的就是恰好x升水。举个例子吧:假设a=4,b=9,则b-2*a=1,那 阅读全文
posted @ 2012-11-07 23:47 chkkch 阅读(540) 评论(2) 推荐(0) 编辑
摘要: 对于一个数组,找出这样一个序列对(i, j),满足A[i] < A[j],且使 j - i的值最大,输出j - i的值。这道题最初想到的是O(n^2)的解答,后来想到了用MergeSort时来记录最大序列对的方法,也可以用一个队列来做。总之解法还挺多。最后和http://ac.jobdu.com/problem.php?cid=1039&pid=19何海涛的这题非常相似。方法1:MergeSort,数组的元素需要记录原始的元素索引。 1 #include <iostream> 2 using namespace std; 3 4 struct Node 5 { 6 i 阅读全文
posted @ 2012-11-07 22:53 chkkch 阅读(490) 评论(0) 推荐(0) 编辑