[蓝桥杯]真题讲解:合并数列(双指针+贪心)

[蓝桥杯]真题讲解:班级活动(贪心)

一、视频讲解

[蓝桥杯]真题讲解:合并数列(双指针+贪心)

二、正解代码

1、C++

cpp 复制代码
#include<bits/stdc++.h>
#define int long long
using namespace std;


signed main(){
	int n, m; cin >> n >> m;
	vector<int>a(n), b(m);
	for(int i = 0; i < n; i ++) 
		cin >> a[i];
	for(int j = 0; j < m; j ++)
		cin >> b[j];

	int p1 = 0, s1 = a[0], p2 = 0, s2 = b[0];

	int ans = 0;
	while(p1 < n || p2 < m) {
		if(s1 < s2) {
			p1 ++;
			s1 += a[p1];
			ans ++;
		} else if(s1 > s2) {
			p2 ++;
			s2 += b[p2];
			ans ++;
		}else{
			p1 ++;
			p2 ++;
			if(p1 < n)
				s1 = a[p1];
			if(p2 < m)
				s2 = b[p2];
		}
	}
	cout << ans << endl;
	return 0;
}

2、python3

python 复制代码
n, m = map(int, input().split())
a = list(map(int, input().split()))
b = list(map(int, input().split()))
p1, s1, p2, s2 = 0, a[0], 0, b[0]
ans = 0
while p1 < n or p2 < m:
    if s1 < s2:
        p1 += 1
        s1 += a[p1]
        ans += 1
    elif s1 > s2:
        p2 += 1
        s2 += b[p2]
        ans += 1
    else:
        p1 += 1
        p2 += 1
        if p1 < n:
            s1 = a[p1]
        if p2 < m:
            s2 = b[p2]

print(ans)

3、Java

java 复制代码
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();
        List<Integer> a = new ArrayList<>();
        List<Integer> b = new ArrayList<>();
        for(int i = 0; i < n; i ++) {
            int x = sc.nextInt();
            a.add(x);
        }
        for(int i = 0; i < m; i ++) {
            int x = sc.nextInt();
            b.add(x);
        }
        int p1 = 0, s1 = a.get(0), p2 = 0, s2 = b.get(0);
        int ans = 0;
        while(p1 < n || p2 < m) {
            if(s1 < s2){
                p1 ++;
                s1 += a.get(p1);
                ans ++;
            }else if(s1 > s2){
                p2 ++;
                s2 += b.get(p2);
                ans ++;
            }else{
                p1 ++;
                p2 ++;
                if(p1 < n)
                    s1 = a.get(p1);
                if(p2 < m)
                    s2 = b.get(p2);
            }
        }
        System.out.println(ans);
    }
}
相关推荐
XH华4 小时前
备战蓝桥杯,第九章:结构体和类
学习·蓝桥杯
园小异5 小时前
2026年技术面试完全指南:从算法到系统设计的实战突破
算法·面试·职场和发展
Epiphany.5568 小时前
蓝桥杯备赛题目-----爆破
算法·职场和发展·蓝桥杯
YuTaoShao8 小时前
【LeetCode 每日一题】1653. 使字符串平衡的最少删除次数——(解法三)DP 空间优化
算法·leetcode·职场和发展
Ll130452529813 小时前
Leetcode二叉树part4
算法·leetcode·职场和发展
夏鹏今天学习了吗14 小时前
【LeetCode热题100(99/100)】柱状图中最大的矩形
算法·leetcode·职场和发展
_OP_CHEN15 小时前
【算法基础篇】(五十八)线性代数之高斯消元法从原理到实战:手撕模板 + 洛谷真题全解
线性代数·算法·蓝桥杯·c/c++·线性方程组·acm/icpc·高斯消元法
仰泳的熊猫16 小时前
题目1453:蓝桥杯历届试题-翻硬币
数据结构·c++·算法·蓝桥杯
零售ERP菜鸟1 天前
范式革命:从“信息化”到“数字化”的本质跃迁
大数据·人工智能·职场和发展·创业创新·学习方法·业界资讯
网络安全-杰克1 天前
2026面试自动化测试面试题【含答案】
自动化测试·软件测试·面试·职场和发展