求帮调CF1684C,悬关
  • 板块题目总版
  • 楼主DERMING
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/8/5 12:35
  • 上次更新2023/11/3 05:46:56
查看原帖
求帮调CF1684C,悬关
379271
DERMING楼主2023/8/5 12:35

按照排序后找不同的元素下标判断写的,hack了4个小时没搞出来

巨佬救我

#include<bits/stdc++.h>
using namespace std;
long long a[200010];
long long b[200010];
long long cnt[200010];
long long x[200010];
long long y[200010];
long long flagsame[200010];
bool cmp(long long x,long long y)
{
	return x<y;
}
int main()
{
	long long t;
	cin>>t;
	while(t--)
	{
		long long n,m;
		cin>>n>>m;
		memset(cnt,0,sizeof(cnt));
		memset(a,0,sizeof(a));
		memset(b,0,sizeof(b));
		memset(x,0,sizeof(x));
		memset(y,0,sizeof(y));
		memset(flagsame,0,sizeof(flagsame));
		for(long long i=1;i<=n;i++)
		{
			for(long long j=1;j<=m;j++)
			{
				cin>>a[j];
				b[j]=a[j];
			}
			sort(a+1,a+1+m,cmp);
			long long prea=a[1];
			for(long long j=1;j<=m;j++)
			{
				if(a[j]!=b[j])
				{
					if(cnt[i]==0)
					{
						x[i]=j;
						cnt[i]++;
					}
					else if(cnt[i]==1)
					{
						y[i]=j;
						cnt[i]++;
					}
					else
					{
						cnt[i]=-1;
						break;
					}
				}
				if(prea!=a[j])
				{
					flagsame[i]=1;
					
				}
				prea=a[j];
			}
		}
		int prex=x[1],prey=y[1];
		int flag1=0;
		for(int i=1;i<=n;i++)
		{
			if(cnt[i]==-1)
			{
				cout<<-1<<'\n';
				flag1=1;
				break;
			}//(prex!=x[i]||prey!=y[i])&&(flagsame[i-1]!=0&&flagsame[i]!=0)
			else if((prex!=x[i]||prey!=y[i])&&flagsame[i]!=0)
			{
				cout<<-1<<'\n';
				flag1=1;
				break;
			}
	//		else if(prex==x[i]&&prey==y[i]||flagsame[i]==0||flagsame[i-1]==0)
	//		{
	//			continue;
	//		}
			prex=x[i];
			prey=y[i];
			int p=i;
			while(p>=1)
			{
				if(flagsame[p]!=0)
				{
					prex=x[p];
					prey=y[p];
					break;
				}
				p--;
			} 
			if(p==1&&x[p]==0&&y[p]==0)
			{
				prex=0;
				prey=0;
			}
		}
		;
		if(flag1==0&&prex==prey&&cnt[1]==0)
		{
			cout<<"1 1\n";
		}
		else if(flag1==0)
		{
			cout<<prex<<' '<<prey<<'\n';
		}
	}
 	return 0;
}

2023/8/5 12:35
加载中...