QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#149267#5508. Job for a HobbitFlamireAC ✓10ms4668kbC++143.0kb2023-08-24 11:39:202023-08-24 11:39:24

Judging History

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

  • [2023-08-24 11:39:24]
  • 评测
  • 测评结果:AC
  • 用时:10ms
  • 内存:4668kb
  • [2023-08-24 11:39:20]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;
int t,n,k,a[55][15],cnt[55],mv[1000011][2],nmv;map<int,int> mp;
bool nd[55][15],mk[55][15];
void move(int x,int y)
{
	a[y][++cnt[y]]=a[x][cnt[x]--];
	mk[y][cnt[y]]=mk[x][cnt[x]+1];mk[x][cnt[x]+1]=0;
	a[x][cnt[x]+1]=0;
	++nmv;mv[nmv][0]=x;mv[nmv][1]=y;
}
void MoveL(int x)
{
	if(cnt[x-1]==k)MoveL(x-1);
	move(x,x-1);
}
void MoveR(int x)
{
	if(cnt[x+1]==k)MoveR(x+1);
	move(x,x+1);
}
void SingleCleanse(int x)
{
	for(int i=2;i<=x;++i)
	{
		while(cnt[i])
		{
			if(nd[i][cnt[i]])move(i,i-1);
			else move(i,i-1),move(i-1,i-2);
		}
		while(cnt[i-1])move(i-1,i);
	}
}
void FullCleanse(int x)
{
	while(cnt[0])MoveR(0);
	while(cnt[1])MoveR(1);
	int cur=0,all=0;
	for(int i=2;i<=x;++i)
	{
		for(int _=1;_<=cnt[i];++_)if(mk[i][_]&&cur<k-1)++cur,nd[i][_]=1;else nd[i][_]=0;
		for(int _=1;_<=cnt[i];++_)if(mk[i][_])++all;
	}
	SingleCleanse(x);
	if(all>=k)
	{
		int id=-1;
		for(int i=x-1;~i;--i)if(cnt[i]){id=i;break;}
		for(int i=id;i<x;++i)move(i,i+1);
		if(!mk[x][cnt[x]])
		{
			while(cnt[0])MoveR(0);
			while(cnt[1])MoveR(1);
			bool flg=0;
			for(int i=2;i<x;++i)
			{
				for(int _=1;_<=cnt[i];++_)if(mk[i][_]&&!flg)nd[i][_]=flg=1;else nd[i][_]=0;
			}
			SingleCleanse(x-1);
			MoveL(x);MoveL(x-1);
			MoveR(x-1);
		}
	}
	while(cnt[0])MoveR(0);
	while(cnt[1])MoveR(1);
	memset(mk,0,sizeof(mk));
}
void Sort(int x)
{
	if(!cnt[x])return;
	int mx=0;
	for(int i=1;i<=cnt[x];++i)mx=max(mx,a[x][i]);
	while(cnt[x])
	{
		if(a[x][cnt[x]]==mx)move(x,x-1),move(x-1,x-2);
		else move(x,x-1);
	}
	while(cnt[x-1])move(x-1,x);
	Sort(x);
}
int main()
{
	scanf("%d",&t);while(t--)
	{
		scanf("%d%d",&n,&k);mp.clear();cnt[0]=cnt[n+1]=0;
		for(int i=1;i<=n;++i)for(int j=1;j<=k;++j)scanf("%d",a[i]+j),++mp[a[i][j]];
		if(k==1){printf("TAK\n0\n");continue;}
		int ned=0;
		for(auto x:mp)ned+=(x.second+k-1)/k;
		if(ned>n+2){printf("NIE\n");continue;}
		nmv=0;
		for(int i=1;i<=n;++i)cnt[i]=k;
		int ed=n+1;
		for(auto x:mp)
		{
			for(int _=1;_<=x.second/k;++_)
			{
				int cur=0;
				for(int i=0;i<=ed;++i)
				{
					for(int j=1;j<=cnt[i];++j)
					{
						if(cur<n&&a[i][j]==x.first)mk[i][j]=1;else mk[i][j]=0;
					}
				}
				FullCleanse(ed--);
			}
		}
		int ted=ed,cur=0;
		for(auto x:mp)
		{
			bool flg=1;
			while(flg)
			{
				flg=0;
				for(int i=0;i<=ed;++i)
				{
					for(int j=1;j<=cnt[i];++j)
					{
						if(a[i][j]==x.first)
						{
							++cur;mk[i][j]=1;
							if(cur==k){flg=1;cur=0;FullCleanse(ed--);break;}
						}
					}
					if(flg)break;
				}
			}
		}
		if(cur)FullCleanse(ed--);
		++ed;
		for(int i=2;i<=ted;++i)Sort(i);
		int lst=-1,lstp=ted+1;
		for(int i=ted-2;~i;--i)
		{
			while(cnt[i]&&lstp!=i)
			{
				while(a[i][cnt[i]]==lst)for(int _=i;_<lstp;++_)move(_,_+1);
				if(cnt[i])lst=a[i][cnt[i]],--lstp;
			}
		}
		printf("TAK\n%d\n",nmv);
		for(int i=1;i<=nmv;++i)printf("%d %d\n",mv[i][0],mv[i][1]);
	}return 0;
}

詳細信息

Test #1:

score: 100
Accepted
time: 1ms
memory: 3896kb

input:

2
2 2
1 2
2 1
1 4
1 2 3 4

output:

TAK
24
2 3
1 2
2 3
1 2
2 1
2 1
1 0
1 2
3 2
2 1
3 2
2 1
2 3
1 2
2 3
0 1
1 2
1 2
2 1
1 0
2 1
1 2
0 1
1 2
NIE

result:

ok Correct! Used 24 swaps

Test #2:

score: 0
Accepted
time: 1ms
memory: 3896kb

input:

25
2 7
4 1 2 2 3 2 4
4 4 6 4 2 2 5
2 5
6 5 5 3 3
1 6 5 2 5
2 8
1 4 2 1 4 1 2 1
1 3 4 4 2 2 1 2
2 4
1 1 5 2
1 5 2 2
2 10
3 5 4 5 5 2 1 3 5 2
5 2 2 1 5 1 3 3 4 2
2 8
2 4 3 3 4 2 1 2
5 1 4 1 2 6 3 4
2 9
4 3 4 3 4 2 4 1 2
2 4 4 2 2 3 3 3 4
2 4
4 1 3 1
4 2 4 3
2 4
5 1 2 2
2 4 3 2
2 7
1 2 4 5 2 5 2
4 5 5 ...

output:

NIE
NIE
TAK
197
2 3
1 2
2 3
1 2
2 3
1 2
2 3
1 2
2 3
1 2
2 3
1 2
2 3
1 2
2 3
1 2
2 1
2 1
2 1
1 0
2 1
1 0
2 1
1 0
2 1
1 0
2 1
1 0
2 1
1 2
1 2
1 2
3 2
2 1
3 2
2 1
3 2
3 2
2 1
3 2
3 2
3 2
3 2
2 1
2 3
2 3
2 3
2 3
2 3
2 3
2 3
1 2
2 3
0 1
0 1
0 1
0 1
0 1
1 2
1 2
1 2
1 2
1 2
1 2
1 2
1 2
2 1
1 0
2 1
2 1
1 0
...

result:

ok Correct! Used 1551 swaps

Test #3:

score: 0
Accepted
time: 8ms
memory: 4304kb

input:

1
50 10
2 2 2 2 2 1 2 1 1 2
2 1 2 1 1 2 2 2 2 2
2 1 1 2 2 2 2 1 1 1
2 2 1 2 2 2 1 1 1 2
2 1 1 2 1 2 2 1 2 1
2 1 2 1 1 1 2 1 2 2
1 2 1 1 2 2 1 1 2 1
2 2 1 1 2 2 2 1 1 2
1 2 2 2 2 1 1 2 1 1
2 2 2 1 2 1 1 2 1 1
2 2 1 2 2 1 1 1 1 1
1 2 2 1 2 2 2 1 1 1
2 2 2 1 2 2 1 1 2 2
1 2 1 2 1 1 1 1 2 2
1 2 1 1 2 2 ...

output:

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

result:

ok Correct! Used 80671 swaps

Test #4:

score: 0
Accepted
time: 10ms
memory: 4396kb

input:

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

output:

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

result:

ok Correct! Used 97777 swaps

Test #5:

score: 0
Accepted
time: 2ms
memory: 3668kb

input:

5
10 1
11
2
10
3
1
12
8
4
5
7
10 7
11 5 6 5 2 1 2
8 7 1 9 10 6 4
6 8 4 6 2 12 9
12 3 10 5 11 4 7
9 11 4 2 9 3 9
6 7 5 11 1 10 6
11 7 6 7 12 1 1
5 3 2 3 4 7 12
3 8 11 9 12 9 8
1 12 12 4 10 1 2
10 7
9 8 12 8 10 7 4
1 1 10 7 3 5 1
11 6 11 5 2 4 12
6 12 8 3 8 6 8
12 7 4 1 11 8 6
7 6 2 5 9 3 6
12 10 4 9 ...

output:

TAK
0
TAK
2937
10 11
9 10
8 9
7 8
6 7
5 6
4 5
3 4
2 3
1 2
10 11
9 10
8 9
7 8
6 7
5 6
4 5
3 4
2 3
1 2
10 11
9 10
8 9
7 8
6 7
5 6
4 5
3 4
2 3
1 2
10 11
9 10
8 9
7 8
6 7
5 6
4 5
3 4
2 3
1 2
10 11
9 10
8 9
7 8
6 7
5 6
4 5
3 4
2 3
1 2
10 11
9 10
8 9
7 8
6 7
5 6
4 5
3 4
2 3
1 2
10 11
9 10
8 9
7 8
6 7
5 6
...

result:

ok Correct! Used 7387 swaps

Test #6:

score: 0
Accepted
time: 5ms
memory: 3840kb

input:

2
25 10
27 26 27 26 27 26 27 26 27 26
26 27 26 27 26 27 26 27 26 27
25 25 25 25 25 25 25 25 25 25
24 24 24 24 24 24 24 24 24 24
23 23 23 23 23 23 23 23 23 23
22 22 22 22 22 22 22 22 22 22
21 21 21 21 21 21 21 21 21 21
20 20 20 20 20 20 20 20 20 19
19 19 19 19 19 19 19 19 18 18
18 18 18 18 18 18 18 1...

output:

TAK
25568
25 26
24 25
23 24
22 23
21 22
20 21
19 20
18 19
17 18
16 17
15 16
14 15
13 14
12 13
11 12
10 11
9 10
8 9
7 8
6 7
5 6
4 5
3 4
2 3
1 2
25 26
24 25
23 24
22 23
21 22
20 21
19 20
18 19
17 18
16 17
15 16
14 15
13 14
12 13
11 12
10 11
9 10
8 9
7 8
6 7
5 6
4 5
3 4
2 3
1 2
25 26
24 25
23 24
22 23
...

result:

ok Correct! Used 50534 swaps

Test #7:

score: 0
Accepted
time: 7ms
memory: 4668kb

input:

1
50 10
1 1 1 37 35 47 1 35 31 21
47 40 1 25 1 40 1 25 13 1
10 14 48 38 1 38 32 43 1 18
11 1 1 1 4 45 1 31 27 41
1 18 32 1 17 31 38 48 49 47
1 24 1 48 1 1 29 32 35 1
39 18 21 45 10 30 11 1 32 32
1 46 19 39 30 26 15 17 15 8
15 15 21 25 41 1 6 8 6 1
47 1 34 12 1 1 48 49 1 47
23 18 1 1 37 1 41 1 2 30
4...

output:

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

result:

ok Correct! Used 98170 swaps

Test #8:

score: 0
Accepted
time: 1ms
memory: 3624kb

input:

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

output:

NIE

result:

ok Correct! Used 0 swaps