QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#305272#5508. Job for a Hobbitushg8877AC ✓52ms5388kbC++142.9kb2024-01-14 23:58:292024-01-14 23:58:31

Judging History

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

  • [2024-01-14 23:58:31]
  • 评测
  • 测评结果:AC
  • 用时:52ms
  • 内存:5388kb
  • [2024-01-14 23:58:29]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define MP make_pair
mt19937 rnd(time(0));
int n,k;
int a[55][15],top[55];
int b[55][15];// Ŀ\xb1\xea\xd0\xf2\xc1\xd0 
void debug(){
	for(int i=0;i<=n+1;i++){
		cout<<"bang "<<i<<" : ";
		for(int j=1;j<=top[i];j++) cout<<a[i][j]<<' ';
		cout<<endl;
	}
}
void solve(){
	memset(a,0,sizeof(a));memset(top,0,sizeof(top));
	cin>>n>>k;
	map<int,int> mp; 
	for(int i=1;i<=n;i++){
		for(int j=1;j<=k;j++){
			cin>>a[i][j];
			mp[a[i][j]]++;
		} 
		top[i]=k;
	}
	if(k==1){cout<<"TAK"<<endl<<"0"<<endl;return;} 
	int cnt=0;
	for(auto i:mp) cnt+=(i.second+k-1)/k;
	if(cnt>n+2){cout<<"NIE"<<endl;return;} 
	cout<<"TAK"<<endl;
	int x=0,y=1;
	for(auto i:mp){
		while(i.second--){
			b[x][y++]=i.first;
			if(y==k+1) x++,y=1;
		}
	}
	vector<pair<int,int> > ans;
	auto op=[&](int x,int y){
		// operator: x->y
		if(!top[x]||top[y]==k||min(x,y)<0||max(x,y)>n+1||abs(x-y)!=1){
			cout<<"Operator Error!"<<endl;
			cout<<"Information: you want put"<<x<<" to "<<y<<"."<<endl;
			cout<<"Size of them is "<<top[x]<<" and "<<top[y]<<"."<<endl;
			exit(0);
		}
		ans.push_back(MP(x,y));
		a[y][++top[y]]=a[x][top[x]--];a[x][top[x]+1]=0;
	};
	for(int i=n;i>=1;i--){
		for(int j=1;j<=k;j++) op(i,i+1);
	}// \xbfճ\xf6ǰ\xc1\xbd\xb8\xf6 
//	debug();
	for(int gx=0;gx<n;gx++){
		while(top[gx+1]){
			for(int j=n;j>=gx+1;j--) while(top[j]&&top[j+1]+1<=k) op(j,j+1);
		}
		for(int gy=1;gy<=k;gy++){
			// Ŀ\xb1\xc4õ\xbd b[gx][gy]
			int x=0,y=0;
			for(int p=gx+2;p<=n+1;p++) for(int q=1;q<=k;q++)
				if(a[p][q]==b[gx][gy]){
					x=p,y=q;
					goto nxt;
				}
//			cout<<"Want "<<b[gx][gy]<<endl;
			nxt:; 
//			if(top[gx+1]) assert(0);
			for(int i=gx+1;i<x-1;i++){
				while(top[i+1]) op(i+1,i);
			}
			// \xb0ѿ\xd5\xd6\xf9\xd7\xd3Ų\xb5\xbd x-1 
			while(x!=gx+2){
				if(y!=1||top[x]!=k){
					// \xb4\xcbʱ\xbf\xc9\xd2\xd4ֱ\xbd\xd3Ų
					while(top[x]+1!=y) op(x,x-1);
					y=top[--x];
					while(top[x-1]){
						op(x-1,x);
						if(top[x+1]!=k) op(x,x+1);
					}
					// \xbfճ\xf6ǰ\xc3\xe6\xb5\xc4\xd6\xf9\xd7\xd3 
				}else{
					int pre=x-2;
					while(top[pre]==k) pre--;
					for(int i=pre;i<x-2;i++) op(i+1,i);
					op(x,x-1);op(x-1,x-2);// Ųһ\xb8\xf6\xb5\xbdǰ\xc3\xe6
					while(top[x]) op(x,x-1);
					y=top[--x];
					while(top[x-1]) op(x-1,x),op(x,x+1);
					for(int i=x-2;i>=pre;i--) op(i,i+1);
					while(top[x-1]) op(x-1,x);
				} 
			}
			while(top[x]>=y) op(x,x-1);
			op(x-1,x-2);
			while(top[x-1]) op(x-1,x);
//			cout<<"After "<<gx<<" "<<gy<<" "<<x<<" "<<y<<endl;
//			debug();cout<<endl;
		}
	} 
	int ept=n+1;
	for(int i=n-1;i>=0;i--){
		for(int j=k;j>=1;j--){
			if(top[ept]==0||a[i][j]==a[ept][1]&&top[ept]<k){
				for(int t=i;t<ept;t++) op(t,t+1); 
			}else{
				ept--;
				for(int t=i;t<ept;t++) op(t,t+1); 
			}
		}
	}
	cout<<ans.size()<<endl;
	for(auto i:ans) cout<<i.first<<' '<<i.second<<endl; 
}
int main(){
	ios::sync_with_stdio(false);
	int _;cin>>_;
	while(_--) solve(); 
}


详细

Test #1:

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

input:

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

output:

TAK
30
2 3
2 3
1 2
1 2
2 1
1 0
2 1
3 2
2 1
3 2
1 2
2 3
1 2
2 3
2 1
1 0
3 2
3 2
2 1
2 3
3 2
2 1
1 2
2 3
1 2
2 3
0 1
1 2
0 1
1 2
NIE

result:

ok Correct! Used 30 swaps

Test #2:

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

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
169
2 3
2 3
2 3
2 3
2 3
2 3
2 3
2 3
1 2
1 2
1 2
1 2
1 2
1 2
1 2
1 2
2 1
2 1
2 1
2 1
2 1
2 1
2 1
2 1
1 0
1 2
1 2
1 2
1 2
1 2
1 2
1 2
2 1
2 1
2 1
2 1
2 1
2 1
1 0
1 2
1 2
1 2
1 2
1 2
2 1
2 1
2 1
2 1
1 0
1 2
1 2
1 2
2 1
1 0
2 1
2 1
2 1
2 1
3 2
3 2
3 2
3 2
3 2
3 2
3 2
1 2
2 3
1 2
2 3
1 2
2 3
...

result:

ok Correct! Used 1487 swaps

Test #3:

score: 0
Accepted
time: 24ms
memory: 4392kb

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
85719
50 51
50 51
50 51
50 51
50 51
50 51
50 51
50 51
50 51
50 51
49 50
49 50
49 50
49 50
49 50
49 50
49 50
49 50
49 50
49 50
48 49
48 49
48 49
48 49
48 49
48 49
48 49
48 49
48 49
48 49
47 48
47 48
47 48
47 48
47 48
47 48
47 48
47 48
47 48
47 48
46 47
46 47
46 47
46 47
46 47
46 47
46 47
46 47
46...

result:

ok Correct! Used 85719 swaps

Test #4:

score: 0
Accepted
time: 51ms
memory: 5372kb

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
187995
50 51
50 51
50 51
50 51
50 51
50 51
50 51
50 51
50 51
50 51
49 50
49 50
49 50
49 50
49 50
49 50
49 50
49 50
49 50
49 50
48 49
48 49
48 49
48 49
48 49
48 49
48 49
48 49
48 49
48 49
47 48
47 48
47 48
47 48
47 48
47 48
47 48
47 48
47 48
47 48
46 47
46 47
46 47
46 47
46 47
46 47
46 47
46 47
4...

result:

ok Correct! Used 187995 swaps

Test #5:

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

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
3437
10 11
10 11
10 11
10 11
10 11
10 11
10 11
9 10
9 10
9 10
9 10
9 10
9 10
9 10
8 9
8 9
8 9
8 9
8 9
8 9
8 9
7 8
7 8
7 8
7 8
7 8
7 8
7 8
6 7
6 7
6 7
6 7
6 7
6 7
6 7
5 6
5 6
5 6
5 6
5 6
5 6
5 6
4 5
4 5
4 5
4 5
4 5
4 5
4 5
3 4
3 4
3 4
3 4
3 4
3 4
3 4
2 3
2 3
2 3
2 3
2 3
2 3
2 3
1 2
1 2
1 2
...

result:

ok Correct! Used 8097 swaps

Test #6:

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

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
64880
25 26
25 26
25 26
25 26
25 26
25 26
25 26
25 26
25 26
25 26
24 25
24 25
24 25
24 25
24 25
24 25
24 25
24 25
24 25
24 25
23 24
23 24
23 24
23 24
23 24
23 24
23 24
23 24
23 24
23 24
22 23
22 23
22 23
22 23
22 23
22 23
22 23
22 23
22 23
22 23
21 22
21 22
21 22
21 22
21 22
21 22
21 22
21 22
21...

result:

ok Correct! Used 68214 swaps

Test #7:

score: 0
Accepted
time: 52ms
memory: 5388kb

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
172441
50 51
50 51
50 51
50 51
50 51
50 51
50 51
50 51
50 51
50 51
49 50
49 50
49 50
49 50
49 50
49 50
49 50
49 50
49 50
49 50
48 49
48 49
48 49
48 49
48 49
48 49
48 49
48 49
48 49
48 49
47 48
47 48
47 48
47 48
47 48
47 48
47 48
47 48
47 48
47 48
46 47
46 47
46 47
46 47
46 47
46 47
46 47
46 47
4...

result:

ok Correct! Used 172441 swaps

Test #8:

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

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