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

蓝桥杯14届国赛 合并数列

问题描述

小明发现有很多方案可以把一个很大的正整数拆成若干正整数的和。他采取了其中两种方案,分别将他们列为两个数组 {a1,a2,...,an} 和 {b1,b2,...,bm}。两个数组的和相同。

定义一次合并操作可以将某数组内相邻的两个数合并为一个新数,新数的值是原来两个数的和。小明想通过若干次合并操作将两个数组变成一模一样,即 n=m 且对于任意下标 i 满足 ai=bi​。请计算至少需要多少次合并操作可以完成小明的目标。

输入格式

输入共 3 行。

第一行为两个正整数 n, m。

第二行为 n 个由空格隔开的整数 a1,a2,...,an​。

第三行为 m 个由空格隔开的整数 b1​,b2​,...,bm​。

输出格式

输出共 1 行,一个整数。

样例输入

4 3
1 2 3 4
1 5 4

样例输出

1

样例说明

只需要将 a2 和 a3​ 合并,数组 a 变为 {1,5,4},即和 b 相同。

评测用例规模与约定

对于 20% 的数据,保证 n, m≤10^{3}

对于 100% 的数据,保证 n, m≤10^{5},0<ai​, bi≤10^{5}

 

合并规则:按照从左至右的顺序依次比较两个数组中的对应元素,优先选取较小元素与其右边的元素进行合并。

#include<iostream>
using namespace std;const int N = 1e5+10;
int n, m;
int a[N], b[N];int ans;int main()
{cin>>n>>m;for(int i=1; i<=n; ++i) cin>>a[i];for(int i=1; i<=m; ++i) cin>>b[i];//i 和 j 同步递增,使用while循环 int i=1, j=1;while(i<=n && j<=m){if(a[i]<b[j]){a[i+1] += a[i];  //合并到下一个元素i++;ans++;}else if(b[j]<a[i]){b[j+1] += b[j];j++;ans++;}else{i++;j++;}}cout<<ans;return 0;
}
http://www.xdnf.cn/news/5440.html

相关文章:

  • 【Python 算法零基础 2.模拟 ⑤ 基于栈和队列】
  • 【JEECG 组件扩展】JSwitch开关组件扩展单个多选框样式
  • 【AI智能推荐系统】第八篇:可解释AI在推荐系统中的实践与价值
  • 深度优先与广度优先:如何用算法思维优化学习策略?
  • 250510-Linux离线配置N8N环境+屏蔽外网请求
  • python使用AES进行加密和解密
  • JavaSE基础
  • python: 为项目创建单独的虚拟环境步骤
  • QSS样式表的选择器
  • 蓝牙RFCOMM协议概述
  • 第二十一节:图像金字塔-高斯金字塔
  • TTS-Web-Vue系列:移动端侧边栏与响应式布局深度优化
  • OSCP备战-kioptrixvm3详细解法
  • [Java实战]Spring Boot 中Starter机制与自定义Starter实战(九)
  • Linux为啥会重新设置中断请求号与中断向量号之间的关系?
  • vector--OJ1
  • 【外网下载Jar包】
  • AI技术驱动SEO关键词智能布局
  • go程序编译成动态库,使用c进行调用
  • linux--------------Ext系列⽂件系统(下)
  • QOwnNotes:功能强大的跨平台笔记应用程序
  • FreeRTOS静态任务的创建、删除和软件定时器的开启(尚硅谷学习笔记)
  • 监控易一体化运维:任务计划管理的关键作用
  • 王道计算机网络知识点总结
  • 动态路由实现原理及前端控制与后端控制的核心差异
  • Linux:43线程封装与互斥lesson31
  • 前端Web开发HTML5+CSS3+移动web(基础-flex)
  • 基于Python的网络电子书阅读系统
  • 在Python中计算函数耗时并超时自动退出
  • 英语听力口语词汇--2.宣传类