站外题求助
  • 板块题目总版
  • 楼主skyx
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/9/28 21:25
  • 上次更新2024/9/29 08:31:58
查看原帖
站外题求助
1228886
skyx楼主2024/9/28 21:25

我的处理思路是找到类似于环的数字位置统计并输出,比如示例给出的 "3 4 5 2 1" 分别搜索出3 5 1和2 4,但是TLETLE

#include <bits/stdc++.h>
using namespace std;
int a[200007];
int b[200007];
bool vis[200007];
int cbiao=-1;
int ans=0;
bool flag=0;
int n,x;
void findd(int zhi)
{
	for(int j=1;j<=n;j++)
	{
		if(zhi==a[j] && vis[j]==0)
		{
				vis[j]=1;
				if(b[j]==cbiao)
				{
					ans++;
					return;
		} 
			findd(b[j]);	
	}
}
}
#define ll long long
int main()
{
	freopen("202409E.in","r",stdin);
	freopen("202409E.out","w",stdout);
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
		b[i]=a[i];
	}
	sort(b+1,b+n+1);
	for(int i=1;i<=n;i++)
	{
		if(!vis[i])
		{
			if(a[i]!=b[i])
			{
				cbiao=a[i];
				findd(b[i]);
			}
			else ans++;
		}
	}
	cout<<ans;

	return 0;

	}
2024/9/28 21:25
加载中...