首页 > 其他分享 >分巧克力

分巧克力

时间:2023-04-07 20:25:20浏览次数:44  
标签:巧克力 scanner int static new public

分巧克力

蓝桥杯分巧克力

image-20230407195627577

image-20230407195642629

思路:

  1. 发现可以分的块数是由 (Hi / a) * (Wi / a) 得来,a 正方形边长(原理:" / "自动向下取整)
  2. 观察数据量,10^5 时间 2 s
  3. 可以用二分来枚举正方形可能的边数
  4. 写一个 check 函数,对长度合理的边进行处理
public class N99 {
	static int N = 100010;// 多开10个
	static int n;
	static int[] w;
	static int[] h;
	static int k;

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		n = scanner.nextInt();
		k = scanner.nextInt();
		h = new int[n + 1];
		w = new int[n + 1];

		for (int i = 1; i <= n; i++) {
			h[i] = scanner.nextInt();
			w[i] = scanner.nextInt();
		}

		int l = 1;
		int r = 100000;
		int res = 0;// 这一个必须要有,因为 mid 不一定是最终答案,mid 的值是一直在变化的
		
		while (l <= r) {// 用二分法枚举每一个正方形边的可能性
			int mid = l + (r - l) / 2;
			if (check(mid)) {// 看右边是否有更大的边的可能性
				res = mid;
				l = mid + 1;
			} else {
				r = mid - 1;
			}
		}
		System.out.println(res);
	}

	/**
	 * 判断长为 a 的边是否符合条件,也就是能否够小朋友们分
	 */
	static boolean check(int a) {// 边长为 a 的正方形
		int sum = 0;
		for (int i = 1; i <= n; i++) {
			sum += (h[i] / a) * (w[i] / a);
		}
		if (sum >= k) {
			return true;
		}
		return false;
	}
}

说明:

未AC,两个测试点超时

标签:巧克力,scanner,int,static,new,public
From: https://www.cnblogs.com/ChuenSan/p/17297235.html

相关文章

  • 分巧克力 | 二分
      P8647[蓝桥杯2017省AB]分巧克力-洛谷|计算机科学教育新生态(luogu.com.cn)一图说清下述两种代码孰对孰错的原因:  错误代码:#include<iostream>#include<algorithm>#include<cmath>usingnamespacestd;#defineios_base\ios::sync_with_stdio(f......
  • 分巧克力(二分法)
    题目描述儿童节那天有K位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友们。小明一共有N块巧克力,其中第i块是Hi×Wi的方格组成的长方形。为了公平起见,小明需要从这N块巧克力中切出K块巧克力分给小朋友们。切出的巧克力需要满足:形状是正方形,边长是整数;......
  • 吃巧克力,容器vector、map,容器适配器 priority_queue,算法sort排序
     #include<algorithm>#include<queue>#include<map>#include<vector>#include<iostream>usingnamespacestd;structchocolate{longlonga;//价......
  • 蓝桥杯2021国赛:巧克力 【贪心】
    题目描述小蓝很喜欢吃巧克力,他每天都要吃一块巧克力。一天小蓝到超市想买一些巧克力。超市的货架上有很多种巧克力,每种巧克力有自己的价格、数量和剩余的保质期天数,小蓝......
  • 计算不同年龄男性需要维持体重所需要吃的巧克力数
    #include<stdio.h>intmain(){ floatm,h,a,BMR,n; printf("请输入你的体重m(kg):"); scanf_s("%f",&m); printf("请输入你的身高h(cm):"); scanf_s("%f",&h); ......
  • 1227. 分巧克力
    https://www.acwing.com/problem/content/1229/#include<cstdio>#include<algorithm>#include<cstring>#include<iostream>usingnamespacestd;intn,k;constin......