解题说明:本题给你一列数,执行把第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; }