样例过,0分
查看原帖
样例过,0分
622694
tyhrtimi楼主2024/8/18 14:51
#include<bits/stdc++.h>
using namespace std;
const int M=1e6+2;
int t,n,vis[M],maxx,ans,a[M],minn;//标记左边 
bool b;
int main()
{
	scanf("%d",&t);
	while(t--)
	{
		scanf("%d",&n);
		ans=0;
		for(int i=1;i<=n;i++)
		{
			vis[i]=0;
			scanf("%d",&a[i]);
		}
		if(n==1)
		{
			cout<<0<<endl;
			continue;
		}
		if(n==2)
		{
			cout<<1<<endl;
			continue;
		}
		minn=0x3f3f3f3f;
		maxx=0;
		for(int i=1;i<n;i++)
		{
			maxx=max(maxx,a[i]);
			minn=min(minn,a[i]);
			vis[a[i]]=1;
			if(i==2)
			{
				if(vis[1]==1&&vis[n]==1)
				{
					ans++;
					//cout<<i<<" ";
					continue;
				}
			}
			if(i==n-2)
			{
				if((a[n-1]==n&&a[n]==1)||(a[n-1]==1&&a[n]==n)) 
				{
					ans++;
				//	cout<<i<<" ";
					continue;
				}
			}
			if(maxx==i||minn==n-i+1)
			{
				ans++;
			//	cout<<i<<" ";
				continue;
			}
			if((n%2==0&&i==n/2)||(n%2==1&&i==n/2)||(n%2==1&&i==n/2+1))
			{
				b=true;
				if(vis[1]==0&&vis[2]==0) continue;
				if(vis[1]==1&&vis[2]==1) continue;
				if(vis[1]==1)
				{
					for(int j=1;j<=n;j+=2)
				    {
						if(vis[j]==0)
						{
							b=false;
							break;
						}
					}
				}
				else
				{
					for(int j=2;j<=n;j+=2)
					{
						if(vis[j]==0)
						{
							b=false;
							break;
						}
					}
				}
				if(b==true)
				{
				//	cout<<i<<" ";
					ans++;
				}
			}
		}
		printf("%d\n",ans); 
	}
	return 0;
}
2024/8/18 14:51
加载中...