现在的位置: 首页 > 综合 > 正文

A. Shooshuns and Sequence

2012年08月09日 ⁄ 综合 ⁄ 共 1666字 ⁄ 字号 评论关闭
time limit per test

2 seconds

memory limit per test

256 megabytes

input

standard input

output

standard output

One day shooshuns found a sequence of n integers, written on a blackboard. The shooshuns can perform one operation with it, the operation
consists of two steps:

  1. Find the number that goes k-th in the current sequence and add the same number to the end of the sequence;
  2. Delete the first number of the current sequence.

The shooshuns wonder after how many operations all numbers on the board will be the same and whether all numbers will ever be the same.

Input

The first line contains two space-separated integers n and k (1 ≤ k ≤ n ≤ 105).

The second line contains n space-separated integers: a1, a2, ..., an (1 ≤ ai ≤ 105)
— the sequence that the shooshuns found.

Output

Print the minimum number of operations, required for all numbers on the blackboard to become the same. If it is impossible to achieve, print -1.

Sample test(s)
input
3 2
3 1 1
output
1
input
3 1
3 1 1
output
-1
Note

In the first test case after the first operation the blackboard will have sequence [1, 1, 1]. So, one operation is enough to make all numbers
the same. Thus, the answer equals one.

In the second test case the sequence will never consist of the same numbers. It will always contain at least two distinct numbers 3 and 1. Thus, the answer equals -1.

解题说明:本题给你一列数,执行把第k个数移动到最后和删去第一个数的操作,最终要判断经过多少步能使这列数完全相同。经过分析可以发现,只要是第K个数前面的数字都可以删除,但是从第K个数开始之后的数字是永远无法删除的,因为每次都作为新数附加在最后了。由此问题得到了简化,首先判断后面的数是否完全一致,不完全相同则无法实现目标,然后再找出前K-1个数中与后面不相同的数字,这里需要找出下标最大的相异数,没有的话输出0即可

#include<cstdio>
#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;

int main()
{
	int n,k,i,j;
	int a[100001];
	scanf("%d %d",&n,&k);
	for(i=0;i<n;i++)
	{
		scanf("%d",&a[i]);
	}
	for(i=k;i<n;i++)
	{
		if(a[i]!=a[k-1])
		{
			printf("-1\n");
			break;
		}
	}
	if(i==n)
	{
		for(j=k-2;j>=0;j--)
		{
			if(a[j]!=a[k-1])
			{
				printf("%d\n",j+1);
				break;
			}
		}
		if(j==-1)
		{
			printf("0\n");
		}
	}
	return 0;
}

抱歉!评论已关闭.