[LUOGU2730] 魔板
2024-09-08 08:18:41
搜索水题。因为只有8个数,排列一共有40320种,直接bfs,判重就行了。
但是判重的时候直接用8进制表示的话要88的bool数组。这种操作太low了,于是我们可以用康托展开,降成8!。
康托展开其实就是一个简单的公式,很好意会。。。。
#include <iostream>
#include <cstdlib>
#include <queue>
#include <cstdio>
#include <cstring>
using namespace std;
const int fac[]={,,,,,,,,,};
int rnk;
bool vis[];
struct Node{
int a[],step,pre;
char c;
}a,q[];
int cantor(Node b) {
int ans=;
for(int i=;i<=;i++) {
int cnt=;
for(int j=i+;j<=;j++) {
if(b.a[j]<b.a[i]) cnt++;
}
ans+=(cnt*fac[-i]);
}
return ans;
}
Node A(Node x) {
for(int i=;i<=;i++) swap(x.a[i],x.a[-i]);
return x;
}
Node B(Node x) {
swap(x.a[],x.a[]),swap(x.a[],x.a[]);
swap(x.a[],x.a[]),swap(x.a[],x.a[]);
swap(x.a[],x.a[]),swap(x.a[],x.a[]);
return x;
}
Node C(Node x) {
swap(x.a[],x.a[]),swap(x.a[],x.a[]),swap(x.a[],x.a[]);
return x;
}
int h,t;
void print(Node x) {
if(!x.pre) return;
print(q[x.pre]); printf("%c",x.c); }
void bfs() {
h++,t++;
for(int i=;i<;i++)q[].a[i]=i;
while(h<=t) {
bool flag=;
for(int i=;i<=;i++) if(q[h].a[i]!=a.a[i]) {flag=;break;}
if(flag) {printf("%d\n",q[h].step),print(q[h]);exit();}
Node tp;int kt;
tp=A(q[h]);kt=cantor(tp);
if(!vis[kt]){vis[kt]=;q[++t]=tp;q[t].step++,q[t].pre=h;q[t].c='A';}
tp=B(q[h]);kt=cantor(tp);
if(!vis[kt]){vis[kt]=;q[++t]=tp;q[t].step++;q[t].pre=h;q[t].c='B';}
tp=C(q[h]);kt=cantor(tp);
if(!vis[kt]){vis[kt]=;q[++t]=tp;q[t].step++;q[t].pre=h;q[t].c='C';}
h++;
}
}
int main() {
for(int i=;i<=;i++) scanf("%d",&a.a[i]);
bfs();
}
Magic Squares
最新文章
- android studio 集成微信登录
- 递推 hdu 1396
- 奇异值分解(SVD)和简单图像压缩
- 【阿迪达斯 ZX850 系列】
- [UCSD白板题] Maximum Pairwise Product
- 自制简单的.Net ORM框架 (一) 简介
- Can&#39;t locate Switch.pm in @INC
- [转载]Web前端和后端之区分,以及面临的挑战【转】
- Scala入门系列(八):面向对象之trait
- Bzoj4566:[HAOI2016]找相同字符
- 求二叉树第n层节点数
- 自己实现memcpy,strcpy与strncpy
- 细说REST API安全之概述
- IOS xib和代码自定义UIView
- MySQL Community Server 8.0.11下载与安装配置
- 福大软工 &#183; BETA 版冲刺前准备
- python对象转字典
- 559. N叉树的最大深度
- C语言 &#183; 数对
- echarts tooltip太多会超出显示范围-解决
热门文章
- AutoReplace in pl/sql developer
- 汉澳sinox2014x64server已经能够下载
- 赵雅智_ListView_SimpleAdapter
- Codeforces444A_DZY Loves Physics
- Cocos2d-x 3.0final 终结者系列教程13-贪食蛇游戏案例(全)
- 查找python项目依赖并生成requirements.txt——pipreqs 真是很好用啊
- CodeForces 596A
- 框架-Java:Spring MVC
- MySql查询系统时间,SQLServer查询系统时间,Oracle查询系统时间
- python字符串中的单双引