列表

详情


NC221660. 讲话

描述

牛牛还记得,自己和牛妹的相遇是在一次学校的讲座上......

会场有n列,编号分别为1,2,3,...,n-1,n。牛牛一行一共有m人,每个人有一个高度,第i个人的高度为a_i
为了方便讲话,牛牛一行必须坐在一起。牛牛打算带领大家坐最后一排。
不过,为了不让讲台上的校长发现,牛牛希望校长看不到他们,希望前面的同学们将它们挡住。会场前面都坐满了人,他们分别也有一个高度值,第i个人的高度为h_i
牛牛坐在同学中编号最小的一个位置,假设他坐的位置为k,同学们的入座位置分别为k到k+m-1。当同学们的身高分别小于等于前面同学的高度时,即是对于任意的一个数,都使时,同学们就不会被校长看到。
牛牛希望你帮他们选一个位置k,让大家都不被校长看见。如果有多个解,输出编号最小的符合要求的k,如果无解,就是怎么办都会被校长看到,那么输出-1。




输入描述

一共输入三行。
第一行输入两个整数n,m,表示会场的座位数量和同学人数。
第二行输入n个整数,表示会场前面人的身高。
第三行输入m个整数,表示同学们的身高。

输出描述

一共输出一行,一个整数k,表示牛牛也就是排头应该坐的位置。如果有多个解,输出编号最小的符合要求的k,如果无解,就是怎么办都会被校长看到,那么输出-1。

示例1

输入:

6 3
3 4 3 8 5 3
2 5 4

输出:

3

示例2

输入:

8 4
4 3 4 54 55 4 3 44
50 50 50 3

输出:

-1

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++ 解法, 执行用时: 7ms, 内存消耗: 400K, 提交时间: 2021-05-22 23:08:21

#include <iostream>

using namespace std;

const int N = 5e6+20, M = 5e6+20;
int n, m;
int a[N], b[M];
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];
    for(int i=1;i<=n-m+1;i++)
    {
    	
    	int flag = 1,cnt = 0;
    	for(int j=1;j<=m;j++)
    	{
    		if(a[i+cnt]<b[j]) flag = 0;
    		cnt++;
		}
		if(flag)
		{
			cout<<i<<endl;
			return 0;
		}
	}
	cout<<-1<<endl;
    return 0;
}
/*
1
a
5
aaaaa
*/

上一题