调酒壶里的酸奶

1978: 调酒壶里的酸奶


最近小w学了一手调酒的技巧,这么帅的操作,说不定能靠这个俘获女神的芳心,为了在女神面前露一手,他想在学校里建一个”pub”,但是显然学校不可能让他真的建一个”pub”,那么他退而求次,想建一个”Yogurt shop”,不能用酒,那用酸奶也行啊!
今天女神终于来光顾小w的酸奶店了!兴奋的小w拿出自己准备已久每天都仔细擦干净的装备——调酒壶、果汁机、隔冰器和计量杯、砧板、小刀….准备露一手给女神看看
但是女神却没有那么多耐心,女神只是觉得,自己买一瓶大酸奶喝不完,小瓶酸奶不够喝,所以在小w的酸奶店,说不定她可以想买多少就买多少。
于是女神告诉了小w她想要多少体积的酸奶,而小w却依旧想秀一下自己的操作,于是他决定用仅有的两个调酒壶为女神倒出女神想要的酸奶….
小w的两个调酒壶体积是不同的(一开始都是空的),小w每次可以选择一个调酒壶倒入另一个调酒壶(若A倒入B,A倒完或B倒满则停止),或者选择一个调酒壶倒光,或者选择一个调酒壶去接满酸奶…..
满心失望的小w想找一朵花,一瓣一瓣的撕下来,问问花朵女神到底喜不喜欢他…虽然这个答案是显而易见的,但是他还是想找一朵花…然而找花未果,反正花瓣不是偶数就是奇数,那他索性就用自己的操作次数作为花瓣个数吧!(找不到花我还不能脑补一朵吗…)
但是小w已经没有心情去想答案了…那么你能告诉他,需要多少步操作才能倒出女神想要的酸奶吗?

Input

输入包含多组数据,每行三个正整数a,b,c分别表示两个调酒壶的容量以及女神想要的酸奶体积,a,b的范围都在[0,100],c<=max(a,b)

Output

一行包含一个整数表示完成要求的最少操作次数,若达不到则输出”impossible”(没有双引号)

Sample Input

10 15 11
6 5 4

Sample Output

impossible
4

HINT

我不知道为什么酸奶可以倒进调酒壶,我也不知道为什么女神不喜欢小w,我只知道凭小w的想象力,游泳池都行更别说一朵花了!


这个题目基本读懂样例之后就会知道该如何搜索了,两杯容量一共6种变换,所以直接暴力就好,话不多说,直接上代码:

#include<iostream>
#include<cstring>
#define ll long long
using namespace std;
int a,b,c,ans;
int v[105][105];
int gcd(int a,int b)
{
    return b?gcd(b,a%b):a;
}
void dfs(int A,int B,int step)
{

    //cout<<A<<" "<<B<<" step:"<<step<<endl;
    if(A==c||B==c)
    {
        if(ans>step)
            ans=step;
        return;
    }
    v[A][B]=1;

    if(A+B>=a)
    {
       if(!v[a][A+B-a]&&(A+B-a<b))
       {
           dfs(a,A+B-a,step+1);   //B-->A杯,A被装满;
           v[a][A+B-a]=0;
       }

    }
    else
    {
        if(!v[A+B][0])
        {
           dfs(A+B,0,step+1);    //B-->A杯,B被倒光;
           v[A+B][0]=0;
        }

    }

    if(A+B>=b)
    {
       if(!v[A+B-b][b]&&(A+B-b<a))
       {
          dfs(A+B-b,b,step+1);   //A-->B杯,B被装满;
          v[A+B-b][b]=0;
       }

    }
    else
    {
        if(!v[0][A+B])
        {
            dfs(0,A+B,step+1);    //A-->B杯,A被倒光;
            v[0][A+B]=0;
        }

    }


    if(A<a&&!v[a][B])
    {
       dfs(a,B,step+1);    //A杯接满;
       v[a][B]=0;
    }


    if(B<b&&!v[A][b])
    {
        dfs(A,b,step+1);   //B杯接满;
        v[A][b]=0;
    }


    if(A>0&&!v[0][B])
    {
        dfs(0,B,step+1);    //A杯被倒光;
        v[0][B]=0;
    }


    if(B>0&&!v[A][0])
    {
        dfs(A,0,step+1);    //B杯被倒光;
        v[A][0]=0;
    }


}
int main()
{
    int n,m;
    while(cin>>a>>b>>c)
    {
        if(b>a)
            swap(a,b);
        if(c%gcd(a,b))
        {
           cout<<"impossible"<<endl;
           continue;
        }

        memset(v,0,sizeof(v));
        ans=100*100;
        dfs(0,0,0);
        cout<<ans<<endl;

    }
    return 0;
}



/**************************************************************
    Problem: 1978
    User: HUCM201711
    Language: C++
    Result: Accepted
    Time:44 ms
    Memory:1524 kb
****************************************************************/

此番昆明之行,与陈程洁的三脸天真干克了一下下,最后还是人家扬长而去,她们用E题甩开了我们,可是她们居然会摔在这道暴力搜索上,所以一定要从基础出发,搜索的三部曲:条件判断–>进入下一层–>消除标记;

<think>好的,用户想了解如何调酒。首先,我需要确定他们的知识水平,可能是初者,所以要从基础开始。调酒的基本步骤通常包括选择基酒、准备工具、掌握技巧等。 首先,得介绍调酒的基本工具,比如摇酒器、量杯、搅拌匙这些,可能用户还不清楚需要哪些工具。然后,调酒的方法,比如摇和法、搅拌法、直接倒入法,每种方法适合什么类型的酒,比如摇和法用于有果汁或奶类的鸡尾酒。 接下来,常见的鸡尾酒配方是重点,用户可能想尝试简单的经典款,比如莫吉托、马天尼、玛格丽特。这些配方需要准确的比例和步骤,比如莫吉托需要青柠汁、薄荷叶、糖、朗姆酒和苏打水。 另外,注意事项也很重要,比如冰的使用,材料的新鲜度,卫生问题,还有提醒适量饮酒。用户可能没考虑到这些细节,需要强一下。 需要确保使用正确的LaTeX格式,比如变量和公式用$...$,独立公式用$$...$$,但调酒步骤可能数公式不多,但如果有涉及比例或计算的地方要注意格式。比如1盎司可以写成$1$盎司,不过可能这用文字更合适。 结构要清晰,分步骤讲解,用标题和列表帮助阅读。检查是否有专业术语需要解释,比如“基酒”是什么,可能需要简单说明。最后,鼓励用户实践,提醒注意安全。确保内容准确,参考可靠的调酒资料,避免错误信息。</think>好的!调酒是一门结合技巧与创意的艺术,以下将分步骤为您介绍基础知识和实用技巧: --- ### 一、调酒基础工具 1. **摇酒器(Shaker)** - 用于混合含果汁、糖浆或蛋清的酒 - 类型:三段式(波士顿摇酒器)或两段式(柯林斯摇酒器) 2. **量杯(Jigger)** - 标准容量为$1.5$盎司(大端)和$1$盎司(小端) 3. **吧勺(Bar Spoon)** - 长柄设计便于搅拌,通常附带叉头用于取装饰物 4. **滤冰器(Strainer)** - 防止冰块倒入杯中(用于摇和法调酒) 5. **其他工具** - 榨汁器、捣棒、冰夹、砧板等 --- ### 二、调酒基本技法 1. **摇和法(Shake)** - **适用酒类**:含果汁、奶制品或糖浆的鸡尾酒(如**玛格丽特**) - **步骤**: - 向摇酒器中加冰至$2/3$满 - 按配方加入材料 - 摇动$10$–$15$秒后滤出 2. **搅拌法(Stir)** - **适用酒类**:纯烈酒基底的透明鸡尾酒(如**马天尼**) - **步骤**: - 在搅拌杯中加入冰块和材料 - 用吧勺沿杯壁匀速搅拌$30$秒 3. **直法(Build)** - **适用酒类**:简单分层的短饮(如**金汤力**) - **步骤**: - 直接在杯中加冰并依次倒入材料 - 轻微搅拌混合 --- ### 三、经典鸡尾酒配方示例 1. **莫吉托(Mojito)** $$ \text{材料:白朗姆酒} \ 2\ \text{盎司},\ 青柠汁\ 1\ \text{盎司},\ 糖浆\ 0.5\ \text{盎司},\ 薄荷叶\ 8\ \text{片},\ 苏打水 $$ **步骤**: - 杯底捣压薄荷叶与糖浆 - 加冰后倒入朗姆酒和青柠汁 - 补满苏打水并搅拌 2. **古典鸡尾酒(Old Fashioned)** $$ \text{材料:波本威士忌} \ 2\ \text{盎司},\ 方糖\ 1\ \text{块},\ 苦精\ 3\ \text{滴} $$ **步骤**: - 方糖用苦精浸润后捣碎 - 加冰搅拌威士忌$2$分钟 - 橙皮装饰 --- ### 四、进阶技巧 1. **风味平衡公式** 基础比例公式: $$ \text{基酒} : \text{酸甜剂} : \text{稀释物} = 2 : 1 : 1 $$ (例:**威士忌酸**=波本$2$ + 柠檬汁$1$ + 糖浆$1$) 2. **创意调酒方法** - **浸泡法**:用基酒浸泡水果/香料(如**菠萝伏特加**) - **烟熏法**:用橡木片熏杯增添风味层次 --- ### 五、注意事项 1. **冰的质量**:使用纯净水制冰,避免杂质影响口感 2. **新鲜材料**:柠檬汁需现榨,薄荷叶避免过度捣压产生苦味 3. **卫生安全**:生鸡蛋调酒需选用可生食鸡蛋 4. **饮酒适量**:建议单杯酒精含量不超过$1.5$盎司(约$44$毫升) --- **实践建议**:从经典配方入手,掌握基础后再尝试创新,记录每次整的比例(例如:$x$毫升糖浆对口感的影响)。调酒的核心在于平衡与个性化,祝您探索愉快! 🍸
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值