TMD The Pool for Lucky Ones

我坑队友了...注意开long long...题很水wa了17次还没过,智商不够了...

#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
using namespace std;
long long int a[100001];
struct lane
{
	long long int num;
	int id;
} room[100001];
bool cmp(lane &a,lane &b)
{
	if(a.num==b.num) return a.id<b.id;
	else return a.num>b.num;
}
int main()
{
	int n;
	cin>>n;
	int sum=0;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
		room[i].num=a[i];
		room[i].id=i;
	}
	sort(room+1,room+n+1,cmp);
	if(room[1].num-room[2].num==1) cout<<room[1].num<<endl;
	else if(room[1].num-room[2].num>=2)
	{
		if((room[1].num-a[room[1].id-1]==2)&&room[1].id==n)
		{
			cout<<room[1].num<<endl;
		}
		else if((room[1].num-a[room[1].id+1]==2)&&room[1].id==1) cout<<room[1].num<<endl;
		else if((room[1].num-a[room[1].id-1]==2)&&room[1].num-a[room[1].id+1]==2)
		{
			cout<<room[1].num<<endl;
		}
		else cout<<room[1].num-1<<endl;
	}
	else
	{
		if(room[2].num>room[3].num)//lianggeshu
		{
			if(room[2].id-room[1].id==1)
			{
				if(room[1].id!=1&&room[1].num-a[room[1].id-1]>=2) cout<<room[1].num<<endl;
				else if(room[2].id!=n&&room[2].num-a[room[2].id+1]>=2) cout<<room[1].num<<endl;
				else cout<<room[1].num+1<<endl;
				
			}
			
			else
			{
				//cout<<"?"<<endl;//10
//11 7 9 11 10 9 7 1 9 9
				if(room[1].num-a[room[1].id-1]>=2&&room[1].id!=1) cout<<room[1].num<<endl;
				else if(room[2].num-a[room[2].id+1]>=2&&room[2].id!=n) cout<<room[1].num<<endl;
				else if(room[1].num-a[room[1].id+1]>=2||room[2].num-a[room[2].id-1]>=2) cout<<room[1].num<<endl;
				else if(room[2].id==n&&a[n-1]!=0) cout<<room[1].num+1<<endl;
				else if(room[1].id==1&&a[2]!=0) cout<<room[1].num+1<<endl;
				else if(a[room[1].id-1]!=0||a[room[1].id+1]!=0) cout<<room[1].num+1<<endl;
				else if(a[room[2].id-1]!=0||a[room[2].id+1]!=0) cout<<room[1].num+1<<endl;
				else if(room[1].num==1) cout<<"2"<<endl;
				else cout<<room[1].num-1<<endl;
			}
		}	
		else 
		{
			long long int k=1;
			while(room[k].num==room[1].num)
			{
			if(a[room[k].id-1]!=0&&room[k].id!=1)
			{
				cout<<room[1].num+1<<endl;
				return 0;
			}
			if(a[room[k].id+1]!=0&&room[k].id!=n)
			{
				cout<<room[1].num+1<<endl;
				return 0;
			}
			k++;
			}
			
			k--;
			k--;
			long long int ans=k*room[1].num;
			printf("%I64d\n",k*room[1].num);

		}
	}
 }  

猜你喜欢

转载自blog.csdn.net/Asensio_20/article/details/79751098