当前位置: 首页 > article >正文

AcWing 蓝桥杯集训·每日一题2025

题目链接 : 5437. 拐杖糖盛宴

题意: 有m个不同的糖果和n个不同高度的奶龙, 奶龙可以根据自己的身高去吃糖果,糖果垂直于地面,对于一个糖果都需要让每个奶龙尝试能否吃到,如果吃到则减去相应吃到的长度, 奶龙长高吃掉糖果的长度即可,根据长度进行判断, 分类讨论。

解题思路 :
根据糖果个数遍历, 外层遍历糖果, 内层遍历奶龙, 创建一个临时变量去记录每一层糖果目前已经吃掉的高度
如果 已经吃掉的糖果大于等于我们糖果的高度这代表糖果已经吃完, 我们更换下一个糖果, 如果当前奶龙的身高高于糖果的长度, 则比较,当前奶龙的身高能否够着现在糖果的高度 (1) 如果可以则当前奶龙身高加上他吃掉糖果的长度, 如果够不着则换下一个奶龙, 如果奶龙身高高于糖果的长度, 则奶龙吃掉目前糖果所剩所有长度

AC Code

// Problem: 拐杖糖盛宴
// Contest: AcWing
// URL: https://www.acwing.com/problem/content/description/5440/
// Memory Limit: 64 MB
// Time Limit: 1000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

#include<bits/stdc++.h>
typedef long long ll; // 确保 ll 在使用前被定义
using namespace std;
using i64 = long long;
#define f for(int i = 0; i < n;++i)
#define ff for(int i = 1; i <= n;++i)
#define int long long 
#define In ll n; std::cin >> n;

const int mod = 1e9 + 7, N = 1e7;

void solve(){
	int n, m ;std::cin >> n >> m;
	std::vector<int> a(n), b(m);
	f std::cin >> a[i];
	
	for(int i =  0 ; i < m; i++) std::cin >> b[i];
	
	for(int i = 0; i < m; i++) {
		int tmp = 0;
		for(int j = 0; j < n; j++) {
			if(tmp >= b[i]) {
				break;
			}
			if(a[j] <= b[i]) {
				if(a[j] > tmp) {
					int x = a[j];
					a[j] += (a[j] - tmp);
					tmp = std::max(tmp, x);
				} else continue;
			} else {
				a[j] += (b[i] - tmp);
				break;
			}
		}
	}
	
	f std::cout << a[i] << "\n";
}

signed main(){
	std::ios::sync_with_stdio(false);
	std::cin.tie(0); std::cout.tie(0);
	ll T = 1;
	//std::cin >> T;
	for(int i = 1; i <= T; ++i) solve();
}

Java

import java.util.*;
import java.io.*;
public class Main{
    public static void main(String args[]) throws IOException{
        BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer st=new StringTokenizer(bf.readLine());
        int n=Integer.parseInt(st.nextToken()),m=Integer.parseInt(st.nextToken());
        long a[]=new long[n];
        st=new StringTokenizer(bf.readLine());
        for(int j=0;j<n;j++){
            a[j]=Integer.parseInt(st.nextToken());
        }
        st=new StringTokenizer(bf.readLine());
        for(int j=0;j<m;j++){
            int b=Integer.parseInt(st.nextToken());
            if(b<=a[0]){
                a[0]+=b;
            }
            else{
                int low=0;
                for(int i=0;i<n;i++){
                    if(a[i]>=low){
                        long high=Math.min(a[i],b);//最高能吃到的高度
                        a[i]+=high-low;
                        low+=high-low;
                    }
                }
            }
        }
        for(long p:a){
            bw.write(p+"\n");
        }
        bw.flush();
    }
}

Python3

n,m=map(int,input().split())
a,b=list(map(int,input().split())),list(map(int,input().split()))

for i in range(0, m):
    tmp = 0
    for j in range(0, n):
        if tmp >= b[i]:
            break;
        if a[j] <= b[i]:
            if a[j] > tmp:
                x = a[j]
                a[j] += (a[j] - tmp)
                if x > tmp:
                    tmp = x
        else:
            a[j] += (b[i] - tmp)
            break
        

for i in range(0, n):
    print(a[i])

http://www.kler.cn/a/562347.html

相关文章:

  • Part-DB部署
  • redis检测大key
  • 【够用就好006】-PC桌面管理ECS服务器的实操步骤
  • 【C++篇】树影摇曳,旋转无声:探寻AVL树的平衡之道
  • FastAPI高级特性(二):错误处理、中间件与应用生命周期
  • Redis-列表结构实操
  • Python 环境管理介绍
  • Kafka客户端连接服务端异常 Can‘t resolve address: VM-12-16-centos:9092
  • QSNCTF-WEB做题记录(2)
  • 【STL】4.<list>
  • 车载诊断架构 --- LIN节点路由转发注意事项
  • smolagents学习笔记系列(六)Secure code execution
  • 文件上传漏洞学习笔记
  • VUE 获取视频时长,无需修改数据库,前提当前查看视频可以得到时长
  • 第15章-超声波避障功能 HC-SR04超声波测距模块详解STM32超声波测距
  • Fisher信息矩阵(Fisher Information Matrix, FIM)与自然梯度下降:机器学习中的优化利器
  • KafkaTool
  • 使用 Redis 实现分布式锁
  • P8597 [蓝桥杯 2013 省 B] 翻硬币
  • TCP fast open