結果
| 問題 |
No.2986 Permutation Puzzle
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2024-12-11 22:31:04 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 3,235 bytes |
| コンパイル時間 | 2,437 ms |
| コンパイル使用メモリ | 191,544 KB |
| 実行使用メモリ | 5,248 KB |
| 最終ジャッジ日時 | 2024-12-11 22:31:21 |
| 合計ジャッジ時間 | 16,119 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | WA * 4 |
| other | AC * 1 WA * 31 RE * 8 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> P;
#define REP(i,n) for(ll i=0;i<ll(n);i++)
int N,K;
vector<vector<int>> f(int r,vector<vector<int>> x){
int n=x.size();
vector<vector<int>> v(n, vector<int>(n));
for(int j=1;j<n;j++){
int p=x[r][j];
v[p]=x[j];
}
return v;
}
vector<vector<int>> g(int c,vector<vector<int>> x){
int n=x.size();
vector<vector<int>> v(n, vector<int>(n));
for(int i=1;i<n;i++){
int p=x[i][c];
for(int j=1;j<n;j++) v[j][p]=x[j][i];
}
return v;
}
int main(void){
cin.tie(nullptr); ios_base::sync_with_stdio(false);
int i,j,k,l;
int N,K;
cin >> N >> K;
vector<vector<int>> a(N+1, vector<int>(N+1)),b(N+1, vector<int>(N+1));
for(i=1;i<=N;i++) for(j=1;j<=N;j++) cin >> a[i][j];
for(i=1;i<=N;i++) for(j=1;j<=N;j++) cin >> b[i][j];
int p=-1,q=-1,r=-1,s=-1;
bool h=false;
vector<vector<int>> c,x,y,z,u;
for(i=1;i<=2*N;i++){
for(j=1;j<=2*N;j++){
for(k=1;k<=2*N;k++){
for(l=1;l<=2*N;l++){
c=a;
if(i<=N) c=f(i,c);
else c=g(i-N,c);
x=c;
if(j<=N) c=f(j,c);
else c=g(j-N,c);
y=c;
if(k<=N) c=f(k,c);
else c=g(k-N,c);
z=c;
if(l<=N) c=f(l,c);
else c=g(l-N,c);
u=c;
if(c==b){
h=true;
p=i;
q=j;
r=k;
s=l;
break;
}
}
if(h) break;
}
if(h) break;
}
if(h) break;
}
vector<char> v0(5);
vector<int> v1(5,0),v2(5,0);
if(s<=N){
v0[1]='R';
v2[1]=s;
int c=0;
while(u!=z){
int pp=-1;
for(i=1;i<=N;i++){
if(u[i][1]==z[s][1]){
pp=i;
break;
}
}
u=f(pp,u);
c++;
}
v1[1]=c;
}else{
v0[1]='C';
v2[1]=s-N;
int c=0;
while(u!=z){
int pp=-1;
for(i=1;i<=N;i++){
if(u[1][i]==z[1][s-N]){
pp=i;
break;
}
}
u=g(pp,u);
c++;
}
v1[1]=c;
}
if(r<=N){
v0[2]='R';
v2[2]=r;
int c=0;
while(z!=y){
int pp=-1;
for(i=1;i<=N;i++){
if(z[i][1]==y[r][1]){
pp=i;
break;
}
}
z=f(pp,z);
c++;
}
v1[2]=c;
}else{
v0[2]='C';
v2[2]=r-N;
int c=0;
while(z!=y){
int pp=-1;
for(i=1;i<=N;i++){
if(z[1][i]==y[1][r-N]){
pp=i;
break;
}
}
z=g(pp,z);
c++;
}
v1[2]=c;
}
if(q<=N){
v0[3]='R';
v2[3]=q;
int c=0;
while(y!=x){
int pp=-1;
for(i=1;i<=N;i++){
if(y[i][1]==x[q][1]){
pp=i;
break;
}
}
y=f(pp,y);
c++;
}
v1[3]=c;
}else{
v0[3]='C';
v2[3]=q-N;
int c=0;
while(y!=x){
int pp=-1;
for(i=1;i<=N;i++){
if(y[1][i]==x[1][q-N]){
pp=i;
break;
}
}
y=g(pp,y);
c++;
}
v1[3]=c;
}
if(p<=N){
v0[4]='R';
v2[4]=p;
int c=0;
while(x!=a){
int pp=-1;
for(i=1;i<=N;i++){
if(x[i][1]==a[p][1]){
pp=i;
break;
}
}
x=f(pp,x);
c++;
}
v1[4]=c;
}else{
v0[4]='C';
v2[4]=p-N;
int c=0;
while(x!=a){
int pp=-1;
for(i=1;i<=N;i++){
if(x[1][i]==a[1][p-N]){
pp=i;
break;
}
}
x=g(pp,x);
c++;
}
v1[4]=c;
}
int w=0;
for(i=1;i<=4;i++) w+=v1[i];
cout << w << endl;
for(i=1;i<=4;i++){
for(j=1;j<=v1[i];j++) cout << v0[i] << ' ' << v2[i] << endl;
}
cout << endl;
return 0;
}