QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#115026#5956. Paradox Sortyoungsystem32 ✓46ms3776kbC++202.1kb2023-06-24 14:23:402023-06-24 14:23:41

Judging History

你现在查看的是最新测评结果

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2023-06-24 14:23:41]
  • 评测
  • 测评结果:32
  • 用时:46ms
  • 内存:3776kb
  • [2023-06-24 14:23:40]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
inline int read()
{
	int n=0,f=1,ch=getchar();
	while(ch<'0'||ch>'9')
	{
		if(ch=='-')f=-1;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9')
	{
		n=n*10+ch-'0';
		ch=getchar();
	}
	return n*f;
}
char s[105];
int g[105][105],rd[105];
int pos[105];
int p[105];
bool bi(int x,int y)
{
	return rd[x]<rd[y];
}
int fj[105],cnt;
bool vis[105];
int main()
{
	int t,n,x;
	t=read();
	for(int greg=1;greg<=t;greg++)
	{
		n=read();
		x=read()+1;
		for(int i=1;i<=n;i++)
		{
			scanf("%s",s+1);
			rd[i]=0;
			for(int j=1;j<=n;j++)
			{
				if(j==i)continue;
				if(s[j]=='Y')
				{
					g[j][i]=1;
				}
				else
				{
					g[j][i]=0;
					rd[i]++;
				}
			}
		}
		for(int i=1;i<=n;i++)pos[i]=i;
		sort(pos+1,pos+n+1,bi);
		cnt=0;
		int sth=0;
		for(int i=1;i<=n;i++)
		{
			sth+=rd[pos[i]];
			//printf("%d\n",sth);
			if(sth==i*(i-1)/2)fj[++cnt]=i;
		}
		bool flag=false;
		for(int i=1;i<=fj[1];i++)if(pos[i]==x)flag=true;
		if(flag==false)
		{
			printf("Case #%d: IMPOSSIBLE\n",greg);
			continue;
		}
		for(int i=1;i<=n;i++)vis[i]=false;
		int pre=0;
		for(int i=1;i<=n;i++)
		{
			for(int j=1;j<=n;j++)
			{
				if(vis[j])continue;
				if(pre==x)
				{
					if(g[pre][j])continue;
					vis[j]=true;
					p[i]=j;
					break;
				}
				int now=0;
				if(pre==0||g[pre][j])now=j;
				else now=pre;
				for(int k=1;k<=n;k++)if(g[j][k]==0)rd[k]--;
				int ttt=0;
				for(int k=1;k<=n;k++)
				{
					if(k!=j&&vis[k]==false)pos[++ttt]=k;
				}
				sort(pos+1,pos+ttt+1,bi);
				int sth=0,las=0;
				bool flag=true;
				for(int k=1;k<=ttt;k++)
				{
					if(pos[k]==x)break;
					sth+=rd[pos[k]];
					if(sth==k*(k-1)/2)
					{
						for(int l=las+1;l<=k;l++)
						{
							if(g[now][pos[l]])
							{
								flag=false;
								break;
							}
						}
						las=k;
					}
				}
				if(flag==true)
				{
					vis[j]=true;
					p[i]=j;
					pre=now;
					break;
				}
				for(int k=1;k<=n;k++)if(g[j][k]==0)rd[k]++;
			}
		}
		printf("Case #%d: ",greg);
		for(int i=1;i<=n;i++)printf("%d ",p[i]-1);
		printf("\n");
	}
	return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Subtask #1:

score: 4
Accepted

Test #1:

score: 4
Accepted
time: 1ms
memory: 3776kb

input:

100
3 0
-YN
N-Y
YN-
2 0
-Y
N-
5 0
-YNNN
N-YNN
YN-YN
YYN-Y
YYYN-
5 1
-NYYY
Y-NNN
NY-NY
NYY-N
NYNY-
6 5
-YYNNY
N-YYNY
NN-NYN
YNY-NY
YYNY-Y
NNYNN-
4 0
-YYY
N-YN
NN-N
NYY-
2 0
-Y
N-
5 1
-NYNY
Y-YYY
NN-YY
YNN-N
NNNY-
7 5
-YYYYYY
N-NNYYN
NY-YNNN
NYN-NYN
NNYY-NN
NNYNY-N
NYYYYY-
8 0
-YNNNNNN
N-YNNNNN
YN-YNN...

output:

Case #1: 1 2 0 
Case #2: 0 1 
Case #3: 3 4 2 1 0 
Case #4: 0 2 3 4 1 
Case #5: 0 1 3 4 2 5 
Case #6: 0 1 2 3 
Case #7: 0 1 
Case #8: 0 1 2 3 4 
Case #9: IMPOSSIBLE
Case #10: 6 7 5 4 3 2 1 0 
Case #11: 0 1 2 
Case #12: 0 1 
Case #13: 0 1 
Case #14: IMPOSSIBLE
Case #15: IMPOSSIBLE
Case #16: 7 8 6 5 4 ...

result:

ok 100 lines

Subtask #2:

score: 28
Accepted

Test #2:

score: 28
Accepted
time: 46ms
memory: 3644kb

input:

100
39 0
-YNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
N-YNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
YN-YNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
YYN-YNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
YYYN-YNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
YYYYN-YNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
YYYYYN-YNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
YYYYYYN-YNN...

output:

Case #1: 37 38 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 
Case #2: 0 13 23 28 30 34 38 40 41 42 43 46 49 51 52 33 5 1 17 32 15 29 19 10 16 47 48 9 4 27 6 7 18 31 8 11 26 50 3 37 25 35 45 20 24 39 22 12 44 36 2 21 14 
Case #3: 0 1 2 3 4 5 6 8...

result:

ok 100 lines

Extra Test:

score: 0
Extra Test Passed