洛谷 P1292 倒酒】的更多相关文章

P1292 倒酒 题目描述 Winy是一家酒吧的老板,他的酒吧提供两种体积的啤酒,a ml和b ml,分别使用容积为a ml和b ml的酒杯来装载. 酒吧的生意并不好.Winy发现酒鬼们都非常穷.有时,他们会因为负担不起aml或者bml啤酒的消费,而不得不离去.因此,Winy决定出售第三种体积的啤酒(较小体积的啤酒). Winy只有两种杯子,容积分别为a ml和b ml,而且啤酒杯是没有刻度的.他只能通过两种杯子和酒桶间的互相倾倒来得到新的体积的酒. 为了简化倒酒的步骤,Winy规定: (1)a…
题目描述 Winy是一家酒吧的老板,他的酒吧提供两种体积的啤酒,a ml和b ml,分别使用容积为a ml和b ml的酒杯来装载. 酒吧的生意并不好.Winy发现酒鬼们都非常穷.有时,他们会因为负担不起aml或者bml啤酒的消费,而不得不离去.因此,Winy决定出售第三种体积的啤酒(较小体积的啤酒). Winy只有两种杯子,容积分别为a ml和b ml,而且啤酒杯是没有刻度的.他只能通过两种杯子和酒桶间的互相倾倒来得到新的体积的酒. 为了简化倒酒的步骤,Winy规定: (1)a≥b: (2)酒桶…
P1292 倒酒这个题有很多模型,这个是一个变形.我令一个解为x两个整数Pa和Pb,分别表示从体积为a ml的酒杯中倒出酒的次数和将酒倒入体积为b ml的酒杯中的次数(酒杯一开始为空).b最后是0,所有倒入b中的都会倒入a中,而每次a倒出都是从满的状态倒出来,所以剩下的x=Pb*b-Pa*a. 因为a和b要互质,所以x一定是gcd(a,b)的整数倍,不然令两边同时除以gcd(a,b),左边就是分数了,而右边要求的Pa和Pb包括a,b都是整数,那就无解了.那x最小就是gcd(a,b).然后扩欧求出…
原题传送门 题目描述 Winy是一家酒吧的老板,他的酒吧提供两种体积的啤酒,a ml和b ml,分别使用容积为a ml和b ml的酒杯来装载. 酒吧的生意并不好.Winy发现酒鬼们都非常穷.有时,他们会因为负担不起aml或者bml啤酒的消费,而不得不离去.因此,Winy决定出售第三种体积的啤酒(较小体积的啤酒). Winy只有两种杯子,容积分别为a ml和b ml,而且啤酒杯是没有刻度的.他只能通过两种杯子和酒桶间的互相倾倒来得到新的体积的酒. 为了简化倒酒的步骤,Winy规定: (1)a≥b:…
洛谷1118 数字三角形游戏 题目描述 有这么一个游戏: 写出一个1-N的排列a[i],然后每次将相邻两个数相加,构成新的序列,再对新序列进行这样的操作,显然每次构成的序列都比上一次的序列长度少1,直到只剩下一个数字位置.下面是一个例子:     3   1   2   4       4   3   6         7   9          16 最后得到16这样一个数字. 现在想要倒着玩这样一个游戏,如果知道N,知道最后得到的数字的大小sum,请你求出最初序列a[i],为1-N的一个…
什么毒瘤... 解:n = 1的,发现就是一个二次函数,解出来一个v的取值范围,选最大的即可. n = 2的,猜测可以三分.于是先二分给第一段路多少能量,然后用上面的方法求第二段路的最短时间.注意剩余能量不足跑完第二段路的时候,返回INF. 正解是啥拉格朗日乘子法,完全搞不倒... /** * There is no end though there is a start in space. ---Infinity. * It has own power, it ruins, and it go…
遇见的第一道决策单调性优化DP,虽然看了题解,但是新技能√,很开森. 先%FlashHu大佬,反正我是看了他的题解和精美的配图才明白的,%%%巨佬. 废话不多说,看题: 题目大意 已知一个长度为n的序列a1,a2,...,an. 对于每个1<=i<=n,找到最小的非负整数p满足 对于任意的j, aj < = ai + p - sqrt(abs(i-j)) 数据范围 洛咕上也没给,我能怎么办啊 非正解做法一:暴力 应该都会吧,\(O(n^2)\)枚举.洛谷上貌似40pts. 非正解做法二:…
Problem 洛谷P1127-词链 Accept: 256    Submit: 1.3kTime Limit: 1000 mSec    Memory Limit : 128MB Problem Description 如果单词 XXX 的末字母与单词 YYY 的首字母相同,则 XXX 与 YYY 可以相连成 X.YX.YX.Y .(注意: XXX . YYY 之间是英文的句号“.”).例如,单词dog与单词gopher,则dog与gopher可以相连成dog.gopher. 另外还有一些例…
这道题想了很久,发题解是为了理解的更深刻一点...(管理放我过好嘛qwq) 步入正题:这道题应该是很多做法,我选择的是离线+树状数组. 首先输入数组.用fisrt数组先记录元素最开始出现的位置,对应的每一个树状数组的位置add一下(树状数组洛谷也有模板题的了解一下就ok啦). rep(i,1,n){//for循环的意思(1,n)闭区间 scanf("%d",&a[i]); if(!first[a[i]]){ first[a[i]]=i; add(i);//若第一次出现 则在树状…
BZOJ原题链接 洛谷原题链接 发现正着想毫无思路,所以我们可以考虑倒着思考,把摧毁变成建造. 这样很容易想到用并查集来维护连通块,问题也变的很简单了. 建原图,先遍历一遍所有边,若某条边的两端点未被摧毁,那么合并两个点,再倒着去枚举被摧毁的点,对于一个点遍历它的边,若是未摧毁的点,那么就用并查集将两个连通块合并,并记录答案即可. #include<cstdio> using namespace std; const int N = 4e5 + 10; struct eg { int x, y…