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

arc127A 分巧克力

时间:2024-03-09 09:56:06浏览次数:25  
标签:巧克力 请求 大到 int arc127A 处理 rep

题面:有一块大小为H*W的巧克力,要分给n个人,第i个人要分边长为2^a[i]的正方形,问是否够分?
范围:H,W<=1E9; n<=1000; a[i]<=25

思路:贪心,关键是先处理大请求,并且要用大块来处理大请求。

  1. 将请求按从大到小依次处理,优先处理大请求,如果处理不了,则无解。
  2. 用大根堆维护剩余的巧克力大小,按短边从大到小的顺序弹出。
  3. 假设块大小为x*y,其中x<y,要划出边长为d的正方形,那么剩下两块矩形取(x1-d,y)与(d,y-d)更优。
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define rep(i,a,b) for(int i=a; i<=b; i++)
#define per(i,a,b) for(int i=b; i>=a; i--)

const int N = 1005;
int H, W, n, A[N];
void solve() {
    cin >> H >> W >> n;
    rep(i,1,n) cin >> A[i];
    sort(A+1, A+1+n);
    priority_queue<pair<int,int>> q;
    if (H > W) swap(H, W);
    q.push({H,W});
    per(i,1,n) {
        if (q.empty()) {
            cout << "No\n";
            return;
        }
        auto [x,y] = q.top(); q.pop();
        int d = 1<<A[i];
        if (x < d) {
            cout << "No\n";
            return;
        }
		q.push({min(x-d,y), max(x-d,y)});
		q.push({min(d,y-d), max(d,y-d)});
    }
    cout << "Yes\n";
}

signed main() {
    cin.tie(0)->sync_with_stdio(0);
    int t = 1;
    while (t--) solve();
    return 0;
}

标签:巧克力,请求,大到,int,arc127A,处理,rep
From: https://www.cnblogs.com/chenfy27/p/18062286

相关文章

  • P8647 [蓝桥杯 2017 省 AB] 分巧克力
    题目链接:小巧克力的边长一定在\(1\sim10^5\)之间。答案为在\(1\sim10^5\)之间找一个最大的数,使得所有\(h[i]/a*w[i]/a\)的和\(\geqslantk\)即可。#include<cstdio>#include<algorithm>constintN=1e5+10;intn,k,h[N],w[N];boolcheck(inta)......
  • [THUSCH2017] 巧克力
    [THUSCH2017]巧克力题目描述「人生就像一盒巧克力,你永远不知道吃到的下一块是什么味道。」明明收到了一大块巧克力,里面有若干小块,排成\(n\)行\(m\)列。每一小块都有自己特别的图案,它们有的是海星,有的是贝壳,有的是海螺……其中还有一些因为挤压,已经分辨不出是什么图案了。......
  • 肝脏不好,能吃巧克力吗
    在一个阳光明媚的早晨,位于美丽乡村的小学迎来了新的一天。校园里弥漫着朗朗的读书声,孩子们天真无邪的笑声在空气中回荡。在这个小学里,有一位叫小明的男孩,他是班上的佼佼者,勤奋好学,深受老师和同学们的喜爱。但是他有脂肪肝,还特别爱吃巧克力,那么肝病患者能吃巧克力吗肝病患者能吃巧......
  • leetcode 2706 购买两块巧克力
    题目: 2706购买两块巧克力思路:找两个最小值。分情况讨论 代码classSolution:defbuyChoco(self,prices:List[int],money:int)->int:#遍历一遍,找2个最小值#找一个最小值我们都会。#找次小值,就分两种情况,假设minPrice是最小......
  • P8647 [蓝桥杯 2017 省 AB] 分巧克力
    二分#include<iostream>#include<stdio.h>#include<algorithm>#include<cstring>#defineFor(i,j,n)for(inti=j;i<=n;++i)usingnamespacestd;constintN=1e5+5;intn,k,upb;inth[N],w[N];inlineintread(......
  • 第八届蓝桥杯赛题 分巧克力(用二分法实现)
    今日一道编程题  第八届蓝桥杯赛题中的分巧克力问题(用二分法实现)问题描述如下:儿童节那天有K位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友们。小明一共有N块巧克力,其中第i块是HixWi的方格组成的长方形。为了公平起见,小明需要从这N块巧克力中切出K块巧克力分给......
  • 分巧克力
    #include<iostream>usingnamespacestd;intmain(intargc,constchar*argv[]){intn,k;inth[100000];intw[100000];cin>>n>>k;for(inti=0;i<n;++i){cin>>h[i]>>w[i];......
  • 【洛谷 8647】[蓝桥杯 2017 省 AB] 分巧克力
    #[蓝桥杯2017省AB]分巧克力##题目描述儿童节那天有$K$位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友们。小明一共有$N$块巧克力,其中第$i$块是$H_i\timesW_i$的方格组成的长方形。为了公平起见,小明需要从这$N$块巧克力中切出$K$块巧克力分给小......
  • P7450 [THUSCH2017] 巧克力
    P7450[THUSCH2017]巧克力题意给定一张网格图,每个格子有两个权重,\((a,c)\),我们希望找出一个不包含\(c=-1\)的联通块并且\(a\)的中位数最大,同时还要包含\(k\)种颜色。题解套路题都是nb题。首先\(k\)比较小,我们可以考虑一个类似斯坦纳树的\(dp\)。\(f_{i,j,S}\)表......
  • 蓝桥杯 分巧克力
    https://www.lanqiao.cn/problems/99/learning/?page=3&first_category_id=1&sort=students_count&second_category_id=3暴力方法N,K=map(int,input().split())chocolates=[[int(n)fornininput().split()]for_inrange(N)]max_size=1forsizei......