zoukankan      html  css  js  c++  java
  • AOJ 789.买酒

    Time Limit: 1000 ms   Case Time Limit: 1000 ms   Memory Limit: 64 MB
    Total Submission: 43   Submission Accepted: 6
    Description
    众所周知,西瓜是一个很爱喝酒的人。有一天西瓜和朋友去酒楼喝酒,却发现酒楼在大酬宾,活动规则如下。
    1.全场只要买酒可以买二送一,买2瓶酒就可以送一瓶酒,买4瓶酒就送两瓶酒。
    2.4个空瓶可以换一瓶酒。
    3.10个酒瓶盖可以换一瓶酒。
    4.拿瓶子和盖子换酒可以享受换二送一的优惠(比如8个空瓶可以换两瓶酒,然后再送一瓶;12个空瓶+10个盖子可以换4瓶酒,再送两瓶),并且换来的酒产生的的瓶盖和空瓶依旧可以继续拿给酒楼换酒。
    现在西瓜和朋友们的钱一共有N元, 酒一瓶M元,请问他们最多可以喝多少瓶酒。
    Input
    题目包含多组输入,EOF结束,数据最多不超过1000组,对于每组数据包含两个数字N,M表示西瓜和朋友们所有钱的数量和一瓶酒的单价,其中1<=N<=1000000, 1<=M<=50
    Output
    对于每组输入,输出单独一行,表示西瓜和他的朋友们最多能喝到多少瓶酒。
    Sample Input
    Original Transformed
    500 10
    50 5
    Sample Output
    Original Transformed
    154
    27
    
    Hint
    trick较多,请谨慎读题并且思考情况
     
     
    题意比较简单,但是需要考虑的情况比较多
    由于需要最大程度多买酒,而且其中有买两瓶送一瓶的优惠,所以,我们应该尽可能地成对买酒。
     
    有以下情况需要单独考虑:
    1. 能兑换奇数瓶酒,把其中一瓶不兑换,留着以后组成一对兑换
    2. 留着待兑换的一瓶酒不能再组上队,只能直接兑换
    3. 留着待兑换的一瓶酒不能组上队,但兑换后又可以兑换酒//最早未考虑到这种情况
     1 /*
     2 By:OhYee
     3 Github:OhYee
     4 Email:oyohyee@oyohyee.com
     5 Blog:http://www.cnblogs.com/ohyee/
     6 
     7 かしこいかわいい?
     8 エリーチカ!
     9 要写出来Хорошо的代码哦~
    10 */
    11 
    12 #include <cstdio>
    13 #include <algorithm>
    14 #include <cstring>
    15 #include <cmath>
    16 #include <string>
    17 #include <iostream>
    18 #include <vector>
    19 #include <list>
    20 #include <queue>
    21 #include <stack>
    22 using namespace std;
    23 
    24 #define REP(n) for(int o=0;o<n;o++)
    25 
    26 int Do(int N,int M) {
    27     int b = 0,a = 0,ans = 0;
    28     //a酒瓶 b酒瓶盖
    29     ans = N / M;//能买的酒数目
    30 
    31     ans += ans / 2;
    32 
    33     a = ans;
    34     b = ans;
    35 
    36     int t = 0;
    37     while(!(a < 4 && b < 10 && t != 1)) {
    38         t += a / 4 + b / 10;
    39         a -= (a / 4) * 4;
    40         b -= (b / 10) * 10;
    41         int add = (t / 2) * 2;
    42 
    43         //如果这一轮没有不能兑换,则兑换之前没兑换的
    44         if(add == 0)
    45             add = t;
    46         
    47         t -= add;
    48         add += add / 2;
    49         ans += add;
    50         a += add;
    51         b += add;
    52     }
    53     return ans;
    54 }
    55 
    56 int main() {
    57     int a,b;
    58     while(scanf("%d%d",&a,&b) != EOF) {
    59         printf("%d
    ",,Do(a,b));
    60     }
    61     return 0;
    62 }
     
  • 相关阅读:
    LeetCode: 18. 4Sum
    LeetCode:15. 3Sum
    Leetcode:1. Two Sum
    tensorflow placeholder
    Tensorflow变量
    13.git的简单使用
    13.Django1.11.6文档
    12.python进程协程异步IO
    12.Flask-Restful
    12.Django思维导图
  • 原文地址:https://www.cnblogs.com/ohyee/p/5374959.html
Copyright © 2011-2022 走看看