<题目链接>

题目大意:

给以一段字符串,其中只包含"BSC"这三个字符,现在有一定量免费的'B','S','C‘,然后如果想再买这三个字符,就要付出相应的价格。现在总共有tot元,问你最多能够组成几个这样的字符串。

解题分析:

开始还以为是模拟,但是看到总价的范围,达到了1e12,并且模拟的情况非常复杂。最后用二分答案求解。

  1. #include <cstdio>
  2. #include <cstring>
  3. using namespace std;
  4.  
  5. typedef long long ll;
  6. const ll maxn = 1e12+100; //本题二分答案的上界
  7. char str[110];
  8. int base[4],price[4],ned[4];
  9. ll tot;
  10.  
  11. bool juge(ll x) { //判断是否能够买这么多汉堡,即验证二分答案的正确性
  12. ll sum = 0;
  13. for (int i = 1; i <=3; i++) {
  14. if (base[i] < x*ned[i]) {
  15. sum += (price[i] * (x*ned[i] - base[i]));
  16. if(sum>tot)return false;
  17. }
  18. }
  19. return true;
  20. }
  21. ll binary_ans(){
  22. ll l=0,r=maxn,ans=0;
  23. while(l<=r){
  24. ll mid=(l+r)>>1;
  25. if(juge(mid))ans=mid,l=mid+1;
  26. else r=mid-1;
  27. }return ans;
  28. }
  29. int main() {
  30. scanf("%s",str);
  31. memset(ned, 0, sizeof(ned));
  32. for (int i = 0; i < strlen(str); i++) {
  33. if (str[i] == 'B')ned[1]++;
  34. if (str[i] == 'S')ned[2]++;
  35. if (str[i] == 'C')ned[3]++;
  36. }
  37. for (int i = 1; i <= 3; i++)
  38. scanf("%d", &base[i]);
  39. for (int i = 1; i <= 3; i++)
  40. scanf("%d", &price[i]);
  41. scanf("%lld", &tot);
  42. printf("%lld\n", binary_ans());
  43. return 0;
  44. }

  

CodeForces 371C Hamburgers(经典)【二分答案】的更多相关文章

  1. [Codeforces 1199C]MP3(离散化+二分答案)

    [Codeforces 1199C]MP3(离散化+二分答案) 题面 给出一个长度为n的序列\(a_i\)和常数I,定义一次操作[l,r]可以把序列中<l的数全部变成l,>r的数全部变成r ...

  2. Codeforces 371C Hamburgers (二分答案)

    题目链接 Hamburgers 二分答案,贪心判断即可. #include <bits/stdc++.h> using namespace std; #define REP(i,n) fo ...

  3. Codeforces 772A Voltage Keepsake - 二分答案

    You have n devices that you want to use simultaneously. The i-th device uses ai units of power per s ...

  4. 2018.12.08 codeforces 939E. Maximize!(二分答案)

    传送门 二分答案好题. 题意简述:要求支持动态在一个数列队尾加入一个新的数(保证数列单增),查询所有子数列的 最大值减平均值 的最大值. 然而网上一堆高人是用三分做的. 我们先考虑当前的答案有可能由什 ...

  5. Educational Codeforces Round 21 Problem F (Codeforces 808F) - 最小割 - 二分答案

    Digital collectible card games have become very popular recently. So Vova decided to try one of thes ...

  6. 洛谷 P2678 跳石头【经典二分答案/贪心】

    题目描述 这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石.组委会已经选择好了两块岩石作为比赛起点和终点.在起点和终点之间,有 NN 块岩石(不含起点和终点的岩石).在比赛过程中,选手们将从 ...

  7. CodeForces 371C Hamburgers

    B题又耽误时间了...人太挫了.... C. Hamburgers time limit per test 1 second memory limit per test 256 megabytes i ...

  8. Codeforces 700A As Fast As Possible(二分答案)

    [题目链接] http://codeforces.com/problemset/problem/700/A [题目大意] 有一辆限载k人速度为v2的车,n个步行速度均为v1的人要通过一段长度为l的距离 ...

  9. Codeforces Round #276 (Div. 1) E. Sign on Fence (二分答案 主席树 区间合并)

    链接:http://codeforces.com/contest/484/problem/E 题意: 给你n个数的,每个数代表高度: 再给出m个询问,每次询问[l,r]区间内连续w个数的最大的最小值: ...

随机推荐

  1. Markdown 简介及基础语法

    一.Markdown 简介 Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式. 二.Markdown 基础语法 1. Markdown ...

  2. Oracle 所有字典

    select * from DBA_CONS_COLUMNS ; ---Information about accessible columns in constraint definitions s ...

  3. Confluence 6 任务的类型

    下面是有关你可以调整的计划任务列表. Confluence 备份(Back Up Confluence) 对 Confluence 站点执行备份操作. 每集群(Per cluster) At 2am ...

  4. Confluence 6 配置日志

    我们推荐你根据你的需求来配置你自己的 Confluence 日志.你可以有下面 2 种方法来修改你的日志: 通过 Confluence 管理员控制台进行配置 – 你的修改仅在本次修改有效,下次重启后将 ...

  5. Confluence 6 使用一个主题到站点

    主题被用来在你的 Confluence 站点中应用表现形式.请查看 Working with Themes 页面来查看如何应用你的整个站点和如何添加更多的主题. 希望在站点中应用主题: 进入  > ...

  6. nginx安装目录详解(针对centos)

  7. 给artDialog插件增加动画效果

    领导想给弹窗增加几种动画效果,以前用过layer弹窗,效果不错,它的动画是用的样式,实现很简单,所以把动画拷贝了过来,打包到现在的artDialog.js里... 使用方式:新增配置参数{anim:4 ...

  8. laravel 5 优化

    性能一直是 Laravel 框架为人诟病的一个点,所以调优 Laravel 程序算是一个必学的技能. 接下来分享一些开发的最佳实践,还有调优技巧,大家有别的建议也欢迎留言讨论. 这里是简单的列表: 配 ...

  9. CSS----布局不理解

    正常情况 正常显示 如果往div标签中添加汉字 出现显示(不理解) 解决方式 加上vertical-align:top

  10. mysql 文件导入

    load data infile 文件路径 into table 表 fields terminated by ',' lines terminated '\n'