蓝桥杯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

 

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

#include
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]

你可能感兴趣的:(双指针,蓝桥杯)