列表

详情


NC200375. 友军寻路算法

描述

不善使用地图的比速度队一直使用友军寻路算法寻找报道、吃饭和吃饭的地方,简单地说就是,找到一个队伍,然后跟着走。

友军偶尔会因为路口转弯而在可视范围内消失,不过不要紧,只要到达路口后还能看见友军就可以继续跟着走,否则的话就是跟丢了。

现在距离前面L米处有一队友军,比速度队用相同的步行速度跟在后面。

根据上帝视角我们知道(但比速度队并不知道),友军接下来会经历n个路口转弯,并且友军从他们的当前位置步行l_i米后会经历第i个路口转弯。

请问比速度队是否会跟丢,如果没有跟丢输出OK,否则输出GG。

输入描述

多组输入,其中每组:

第1行:两个由空格分开的正整数n, L,分别表示路口数以及两队之间的距离

第2行:n个由空格分开的正整数l_i,第i个数表示步行l_i米后会经历第i个路口转弯







数据保证每组的l_i都是严格递增的

输出描述

对于每组输入,输出1行:OK或GG

示例1

输入:

3 3
3 6 9
3 3
3 6 8
3 3
2 5 8

输出:

OK
GG
OK

原站题解

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

C++14(g++5.4) 解法, 执行用时: 7ms, 内存消耗: 504K, 提交时间: 2019-12-14 15:49:26

#include<iostream>
using namespace std;
int main()
{
	ios::sync_with_stdio(false);
	int n,l,li,lj,ind;
	while(cin>>n){
		cin>>l;
		ind=0;
		for(int i=1;i<=n;++i){
			lj=li;
			cin>>li;
			if(i>1){
				if(li-lj<l) ind=1;
			}
		}
		if(ind) cout<<"GG"<<endl;
		else cout<<"OK"<<endl;
	}
	return 0;
}

C(clang 3.9) 解法, 执行用时: 3ms, 内存消耗: 308K, 提交时间: 2019-12-14 15:43:40

#include<stdio.h>
int main()
{
	int n,l,i;
	int a[110];
	while(scanf("%d%d",&n,&l)!=EOF)
	{
	for(i=0;i<n;i++)
	scanf("%d",&a[i]);
	for(i=0;i<n-1;i++)
	{
		if(a[i+1]-a[i]<l)
		break;
	}
	if(i>=n-1)
	printf("OK\n");
	else
	printf("GG\n");
}
	return 0;
 } 

C++11(clang++ 3.9) 解法, 执行用时: 5ms, 内存消耗: 484K, 提交时间: 2019-12-14 15:34:37

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int n,a[100000],d,p;
	while(cin>>n>>d)
	{
		p=0;
		for(int i=0;i<n;i++)
		{
			cin>>a[i];
			if(a[i]-a[i-1]<d&&i!=0) p=1;
		}
		if(p==0) cout<<"OK\n";
		else cout<<"GG\n";
	}
	
    return 0;
}

Python3(3.5.2) 解法, 执行用时: 29ms, 内存消耗: 3416K, 提交时间: 2019-12-13 23:02:04

while True:
    try:
        n,l=map(int,input().split())
        a=list(map(int,input().split()))
        print('GG' if any(a[i]-a[i-1]<l for i in range(1,len(a))) else 'OK')
    except:
        break

上一题