QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#305273 | #5508. Job for a Hobbit | ushg8877 | AC ✓ | 51ms | 5508kb | C++14 | 2.2kb | 2024-01-14 23:59:42 | 2024-01-14 23:59:43 |
Judging History
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];
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){
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);
}
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++){
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;
}
nxt:;
for(int i=gx+1;i<x-1;i++){
while(top[i+1]) op(i+1,i);
}
while(x!=gx+2){
if(y!=1||top[x]!=k){
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);
}
}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);
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);
}
}
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: 3724kb
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: 0ms
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: 12ms
memory: 4308kb
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: 40ms
memory: 5508kb
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: 0ms
memory: 3752kb
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: 20ms
memory: 3876kb
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: 51ms
memory: 5452kb
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: 3608kb
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