美文网首页
P8647 [蓝桥杯 2017 省 AB] 分巧克力

P8647 [蓝桥杯 2017 省 AB] 分巧克力

作者: louyang | 来源:发表于2024-10-08 16:51 被阅读0次

从最小的可能解,到最大的可能解之间,通过二分查找,验证每一个mid是否为解。
二分的过程是这样的:
定义变量ans,储存当前优解。定义闭区间[left, right],代表程序当前正在此闭区间内寻找答案(寻找潜在的比ans更优的解)。
令mid = (left + right)/2
若mid为解,则ans = max(ans, mid), left = mid + 1. 此时我们更新了最优解,同时在最优解的右侧寻找潜在的更优解。
若mid不为解,则right = mid - 1. mid不是解,因此我们在mid左边寻找更优解。
重复上述过程,直到left > right时跳出循环,ans即为最优解。


#include <iostream>
using namespace std;

int h[100001], w[100001], n, k;

bool check(int x) {
  int s = 0;
  for (int i = 1; i <= n; i++) {
    s += (h[i]/x) * (w[i]/x);
  }
  return s >= k;
}

int main() {
  cin >> n >> k;
  for (int i = 1; i <= n; i++) {
    cin >> h[i] >> w[i];
  }
  
  int low = 1, high = 10000, ans = 0;
  while (low <= high) {
    int mid = low + (high-low)/2;
    if (check(mid)) {
      low = mid + 1;
      ans = max(ans, mid);
    } else {
      high = mid - 1;
    }
  }

  cout << ans << endl;
  return 0;
}

相关文章

  • 蓝桥杯-分巧克力

    分巧克力儿童节那天有K位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友们。小明一共有N块巧克力,其中第i块是...

  • 蓝桥杯真题题解收藏

    收藏一些在网上发现的,觉得写的不错的蓝桥杯真题题解内容,给学生练习备战蓝桥杯时所用。2020蓝桥杯省赛第二场C组_...

  • 蓝桥杯17年 切巧克力

    标题: 分巧克力 例如一块6x5的巧克力可以切出6块2x2的巧克力或者2块3x3的巧克力。1x6 ...

  • 蓝桥杯 分糖果

    逻辑在代码中描述很清楚了,若是有比笔者更好的方法,希望一起讨论

  • 蓝桥杯-分糖果

    问题描述 有n个小朋友围坐成一圈。老师给每个小朋友随机发偶数个糖果,然后进行下面的游戏:每个小朋友都把自己的糖果分...

  • 分巧克力

    第八届蓝桥杯省赛Java B组第九题儿童节那天有K位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友们。小明一...

  • 接下来半学期的计划

    自从参加蓝桥杯国赛的消息敲定后,大三开学之前的计划我就基本上定好了,由于蓝桥杯省赛的比赛时间比拟定的时间早...

  • 2019年蓝桥杯省赛总结

    这次蓝桥杯的话,做的不怎么理想。主要归结于几个原因吧,第一就是JAVA其实我写的比较少,语法其实不是怎么熟,平时一...

  • 蓝桥杯

    明天就是蓝桥杯省赛了,今天早点睡吧,没事就是一个小比赛,没什么的。大不了就去打打酱油吧。早早洗漱好,就上了床,可是...

  • 蓝桥杯

    一周前才开始意识到蓝桥杯又要来了,赶快找大佬聊聊怎么准备 “只要你掌握了最近十年的7道题以上省一几乎没问题 4-6...

网友评论

      本文标题:P8647 [蓝桥杯 2017 省 AB] 分巧克力

      本文链接:https://www.haomeiwen.com/subject/zetvrjtx.html