站外题求助
查看原帖
站外题求助
1169788
xiaokang_suancai楼主2025/1/21 16:33

题目描述

马克家收藏了一套书,这套书叫《OIER故事集》,这套书有 nn 本,每本书有一个编号,从 11 号到 nn 号。

马克把这些书按照编号从小到大,从上往下摞成一摞。马克对这套书很珍视,不允许其他人动。

有一天一格到马克家玩,马克因为和妹子约会,就让一格自己呆在家里。一格因为对这套书非常好奇,偷偷的看了一下,结果发现书中竟然有 ljsljscommonccommonc 的故事。一格看的入了迷,结果把一摞书的顺序弄乱了。

眼看着马克就要回来了,一格需要把书恢复到原状,由于每本书都比较重,所以一格能做的操作是把一本书从书堆中抽出来,然后把这本书放到书堆的顶部。

给你打乱的书的顺序,你能帮一格算算最少需要几次上述操作,才能恢复书的顺序。

输入

第一行包含一格正整数T(T10)T(T \le 10),表示数据组数。

对于每组数据,第一行为一格整数 nn

接下来的一行有 nn 个用空格分开的正整数,表示一格打乱后的书的顺序,从上到下。

输出

对于每组数据,输出一行一个整数,表示一格最少经过几次操作才能恢复书的顺序。

样例

// input
2
4
4 1 2 3
5
1 2 3 4 5

// output
3
0

我的代码

#include<bits/stdc++.h>
using namespace std;
int t,n,a[500005],ans,last,head=250000;
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);
	cin>>t;
	while(t--)
	{
		cin>>n;
		ans=0;
		for(int i=head+1;i<=head+n;i++)
			cin>>a[i];
		last=a[head+n];
		while(last!=n)
		{
			a[--head]=last;
			ans++;
			last=a[head+n];
		}
		cout<<ans<<endl;
	}
	return 0;
}

可以过样例,但是改了半天还是 RERE,求条 QWQQWQ

2025/1/21 16:33
加载中...