QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#305272 | #5508. Job for a Hobbit | ushg8877 | AC ✓ | 52ms | 5388kb | C++14 | 2.9kb | 2024-01-14 23:58:29 | 2024-01-14 23:58:31 |
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];// Ŀ\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