Hamburgers 假定解是否可行

Hamburgers

Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u

Submit Status

Description

Polycarpus loves hamburgers very much. He especially adores the hamburgers he makes with his own hands. Polycarpus thinks that there are only three decent ingredients to make hamburgers from: a bread, sausage and cheese. He writes down the recipe of his favorite "Le Hamburger de Polycarpus" as a string of letters ‘B‘ (bread), ‘S‘ (sausage) и ‘C‘ (cheese). The ingredients in the recipe go from bottom to top, for example, recipe "ВSCBS" represents the hamburger where the ingredients go from bottom to top as bread, sausage, cheese, bread and sausage again.

Polycarpus has nb pieces of bread, ns pieces of sausage and nc pieces of cheese in the kitchen. Besides, the shop nearby has all three ingredients, the prices are pb rubles for a piece of bread, ps for a piece of sausage and pc for a piece of cheese.

Polycarpus has r rubles and he is ready to shop on them. What maximum number of hamburgers can he cook? You can assume that Polycarpus cannot break or slice any of the pieces of bread, sausage or cheese. Besides, the shop has an unlimited number of pieces of each ingredient.

Input

The first line of the input contains a non-empty string that describes the recipe of "Le Hamburger de Polycarpus". The length of the string doesn‘t exceed 100, the string contains only letters ‘B‘ (uppercase English B), ‘S‘ (uppercase English S) and ‘C‘ (uppercase English C).

The second line contains three integers nbnsnc (1 ≤ nb, ns, nc ≤ 100) — the number of the pieces of bread, sausage and cheese on Polycarpus‘ kitchen. The third line contains three integers pbpspc (1 ≤ pb, ps, pc ≤ 100) — the price of one piece of bread, sausage and cheese in the shop. Finally, the fourth line contains integer r (1 ≤ r ≤ 1012) — the number of rubles Polycarpus has.

Please, do not write the %lld specifier to read or write 64-bit integers in С++. It is preferred to use the cin, cout streams or the %I64dspecifier.

Output

Print the maximum number of hamburgers Polycarpus can make. If he can‘t make any hamburger, print 0.

Sample Input

Input

BBBSSC6 4 11 2 34

Output

2

Input

BBC1 10 11 10 121

Output

7

Input

BSC1 1 11 1 31000000000000

Output

200000000001

 1 #include <stdio.h>
 2 #include <string.h>
 3
 4 const int inf=0x3f3f3f3f;
 5 const long long INF=1e14+7;
 6 char a[105];
 7 long long b,s,c,nb,ns,nc,pb,ps,pc,r;
 8
 9 bool C(long long x)
10 {
11     long long rb,rs,rc;
12     rb=(x*b-nb)>=0?(x*b-nb):0,rs=(x*s-ns)>=0?(x*s-ns):0,rc=(x*c-nc)>=0?(x*c-nc):0;
13     if((rb*pb+rs*ps+rc*pc)<=r)
14         return true;
15     else
16         return false;
17 }
18
19 int main()
20 {
21     int i,j,k;
22     while(scanf("%s",a)!=EOF)
23     {
24         b=0,s=0,c=0;
25         for(i=0;a[i]!=‘\0‘;i++)
26         {
27             if(a[i]==‘B‘)
28                 b++;
29             else if(a[i]==‘S‘)
30                 s++;
31             else if(a[i]==‘C‘)
32                 c++;
33         }
34         //printf("%d %d %d",b,s,c);
35         scanf("%I64d %I64d %I64d %I64d %I64d %I64d",&nb,&ns,&nc,&pb,&ps,&pc);
36         scanf("%I64d",&r);
37         long long lb=0,ub=INF;
38
39         while(ub-lb>1)
40         {
41             long long mid=(lb+ub)/2;
42             if(C(mid))
43                 lb=mid;
44             else
45                 ub=mid;
46         }
47
48         printf("%I64d\n",lb);
49     }
50
51     return 0;
52 }

时间: 2024-10-08 00:35:24

Hamburgers 假定解是否可行的相关文章

【判断解是否可行-二分】POJ1064-Cable master

http://poj.org/problem?id=1064 [题目大意] 给出几条绳子的长度,问如果要切出k条长度相等的绳子,这k条绳子最常多长? [思路] 二分.把下界设为0,上界设为所有绳子长度总和,每次取mid,判断如果每条绳子长为mid切出条数是否≥k,满足则将下边界设为mid,否则把上边界设为mid.因为是要保留小数的,所以通过循环来进行精确. 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring&g

面试高级算法梳理笔记

面试高级算法梳理笔记 1.1 说明 本篇为<挑战程序设计竞赛(第2版)>读书笔记系列,旨在: 梳理算法逻辑 探索优化思路 深入代码细节 1.2 目录 原文首发于个人博客Jennica.Space,按算法难度划分为初中高三个级别,详细目录及链接如下: 初级篇 穷竭搜索 贪心 动态规划 数据结构 图论 数论 中级篇 二分搜索 常用技巧 数据结构(二) 动态规划(二) 网络流 计算几何 高级篇 数论(二) 博弈论 图论(二) 常用技巧(二) 智慧搜索 分治 字符串 1.3 题解 配套习题及详解同步发

KM算法详解[转]

KM算法详解 原帖链接:http://www.cnblogs.com/zpfbuaa/p/7218607.html#_label0 阅读目录 二分图博客推荐 匈牙利算法步骤 匈牙利算法博客推荐 KM算法步骤 KM算法标杆(又名顶标)的引入 KM流程详解 KM算法博客推荐 0.二分图 二分图的概念 二分图又称作二部图,是图论中的一种特殊模型. 设G=(V, E)是一个无向图.如果顶点集V可分割为两个互不相交的子集X和Y,并且图中每条边连接的两个顶点一个在X中,另一个在Y中,则称图G为二分图. 可以

阿里巴巴2014笔试题详解(9月22北京)(转)

转:http://blog.csdn.net/zs634134578/article/details/21101971 第一部分  单选题(前10题,每题2分:后10题,每题3分.选对得满分,选错倒扣1分,不选得0分) 1.一次内存访问,SSD硬盘访问和SATA硬盘随机访问的时间分别是() A.几微秒,几毫秒,几十毫秒     B.几十纳秒,几十毫秒,几十毫秒 C.几十纳秒,几十微秒,几十毫秒 D.几微秒,几十微秒,几十毫秒 解析:内存访问速度通常在50ns到80ns范围内,SSD硬盘的访问速度

某次模拟赛 数字对

题目描述 Description 小 H 是个善于思考的学生,现在她又在思考一个有关序列的问题.她的面前浮现出一个长度为 n 的序列{ai},她想找出一段区间[L, R](1 <= L <= R <= n).这个特殊区间满足,存在一个 k(L <= k <= R),并且对于任意的 i(L <= i <= R),ai 都能被 ak 整除.这样的一个特殊区间 [L, R]价值为 R - L.小 H 想知道序列中所有特殊区间的最大价值是多少,而有多少个这样的区间呢?这些

codeforce C. Success Rate

写完这道题目才发现自己对二分的理解太浅了 这题是典型的利用二分"假定一个问题可行并求最优解" 二分是通过不断缩小区间来缩小解的范围,最终得出解的算法 我们定义一个c(x) 表示判断函数 如果对任意y>=x 当x满足条件的时候 y也满足条件 那么我们就一个不断缩小区间范围来确定最后的解 好扯了这么多犊子 来说下这道题目.. 我们的目的是对A,B 有 (x+A)/(y+B) == (p/q) 其中A<=B 那么可以转换为 A+x=k*p  B+y=k*q; 既 A=k*p-x,

BZOJ1088(SCOI2005)

枚举第一行第一个格子的状态(有雷或者无雷,0或1),然后根据第一个格子推出后面所有格子的状态.推出之后判断解是否可行即可. 1 #include <bits/stdc++.h> 2 3 using namespace std; 4 5 #define REP(i,n) for(int i(0); i < (n); ++i) 6 #define rep(i,a,b) for(int i(a); i <= (b); ++i) 7 #define dec(i,a,b) for(int i

TYVJ P1736 创意吃鱼法 Label:dp || 前缀和

题目描述 回到家中的猫猫把三桶鱼全部转移到了她那长方形大池子中,然后开始思考:到底要以何种方法吃鱼呢(猫猫就是这么可爱,吃鱼也要想好吃法 ^_*).她发现,把大池子视为01矩阵(0表示对应位置无鱼,1表示对应位置有鱼)有助于决定吃鱼策略. 在代表池子的01矩阵中,有很多的正方形子矩阵,如果某个正方形子矩阵的某条对角线上都有鱼,且此正方形子矩阵的其他地方无鱼,猫猫就可以从这个正方形子矩阵“对角线的一端”下口,只一吸,就能把对角线上的那一队鲜鱼吸入口中. 猫猫是个贪婪的家伙,所以她想一口吃掉尽量多的

一个Json结构对比的Python小工具兼谈编程求解问题

先上代码. jsondiff.py #_*_encoding:utf-8_*_ import argparse import json import sys reload(sys) sys.setdefaultencoding('utf-8') def parseArgs(): description = 'This program is used to output the differences of keys of two json data.' parser = argparse.Arg