骰子

dice.cpp/c/pas

1s/128M

【题目描述】

桌面上有两个特别的骰子。骰子的每一个面,都写了一个不同的数字。设第一个骰子上下左右前后分别为a1, a2, a3, a4, a5, a6,第二个骰子分别为b1, b2, b3, b4, b5, b6。保证每个数字在区间 [1, 6] 内,而且对于所有的i ≠ j都有ai ≠ aj, bi ≠ bj。特别地,每个骰子相对的两面数字之和都不会为7

一开始,两个骰子的摆放可能是不同的(即对应面的数字可能不同),所以Ddy想通过如下操作使两个骰子摆放变得相同

左转:以CG为轴向左转90°,使ACGE变成底部

右转:以DH为轴向右转90°,使BDHF变成底部

前转:以CD为轴向前转90°,使ABCD变成底部

后转:以GH为轴向后转90°,使EFHG变成底部

现在Ddy想知道达到目的的最小步数是多少。

【输入】

输入文件名:dice.in

多组数据,直到EOF

对于每组数据,两行,分别表示两个骰子的状态。

每行6个数分别a1, a2, …, a6和b1, b2, …, b6

【输出】

输出文件名:dice.out

对于每组数据输出一行,达到目的的最小步数。

无解则输出 -1

【输入样例】

1 2 3 4 5 6

1 2 3 4 5 6

1 2 3 4 5 6

1 2 5 6 4 3

1 2 3 4 5 6

1 4 2 5 3 6

【输出样例】

0

3

-1

题解:
因为每个骰子只有六个面,可以将这六个面的状态表示为一个六位数。(当然也可以用七进制或者六进制)

然后广搜,每一步都有四个方向可以选择,又因为每一个骰子都只有24种状态,记忆化一下就可以了。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<algorithm>
#include<queue>
using namespace std;
int ans,a[7],b[7],ok;
int make(int a[])
{int cnt=0;for(int i=0;i<=5;i++)cnt=cnt*10+a[i];return cnt;
}
int mmin[1000000];
void bfs()
{memset(mmin,127/3,sizeof(mmin));int r=make(a),s;queue<int>mem;queue<int>p;mem.push(r);p.push(0);mmin[r]=0;while(!mem.empty()){int x=mem.front(),y=p.front();mem.pop();p.pop();if(x==ok){ans=y;return;}s=x%100+((x/100)%10)*10000+((x/1000)%10)*100000+((x/10000)%10)*1000+(x/100000)*100;if(mmin[s]>y+1){mem.push(s);p.push(y+1);mmin[s]=y+1;}s=x%100+((x/100)%10)*100000+((x/1000)%10)*10000+((x/10000)%10)*100+(x/100000)/1000;if(mmin[s]>y+1){mem.push(s);p.push(y+1);mmin[s]=y+1;}s=(x/100)%100*100+(x%10)*100000+((x/10)%10)*10000+(x/10000)%10+(x/100000)*10;if(mmin[s]>y+1){mem.push(s);p.push(y+1);mmin[s]=y+1;}s=(x/100)%100*100+(x%10)*10000+((x/10)%10)*100000+((x/10000)%10)*10+x/100000;if(mmin[s]>y+1){mem.push(s);p.push(y+1);mmin[s]=y+1;}}
}
int main()
{freopen("dice.in","r",stdin);freopen("dice.out","w",stdout);int i,j;while(scanf("%d",&a[0])!=EOF){for(i=1;i<=5;i++)scanf("%d",&a[i]);for(i=0;i<=5;i++)scanf("%d",&b[i]);ok=make(b);ans=2000000000;bfs();if(ans!=2000000000)printf("%d\n",ans);else printf("-1\n");}return 0;
}

转载于:https://www.cnblogs.com/huangdalaofighting/p/7358656.html

noip搜索模拟题 骰子相关推荐

  1. NOIp初赛模拟题及标准答案(提高组)

    一. 单项选择题 1.微型计算机中,( C ) 的存取速度最快. A)高速缓存  B)外存储器  C) 寄存器  D) 内存储器  E) 临时存储器 2.已知A=35H,则A∧05H∨A∧3OH的结果 ...

  2. 【NOIP】入门题题解— —小玉买文具、P老师买铅笔

    author:&Carlton tags:NOIP,模拟题,语言基础练习题 language:C++ website:洛谷能力提升综合题单Part1 入门阶段 - 题单 - 洛谷 | 计算机科 ...

  3. 闵梓轩大佬のnoip模拟题D1 总结 2017/10/26

    背景 题目概括 T1 题面 分析 90分算法 满分算法 T2 题面 分析 部分分算法 满分算法 满分代码 T3 题面 分析 代码 总结 背景 这道题目是去年的金牌大佬闵梓轩在一年前出的一套noip模拟 ...

  4. NOIP 2017 Day1 T2 时间复杂度 complexity - 模拟题 题解

    作者@豪哒哒哒HaoDaDaDa 转载自简书@豪哒哒哒HaoDaDaDa-简书-NOIP 2017 Day1 T2 时间复杂度 (有一个月没有写简书了-) (这次终于开始拿Markdown写了,富文本 ...

  5. NOIp模拟题 之 肮脏的牧师 (桶排序)

    闲话: 考场上看到了这一题,简直令我震惊!啊!居然还有真么简单的模拟题!良心啊! 而且,还是我 痴迷的 熟悉的游戏 --  欧气传说 炉石传说! (话说题面的那三张卡都贼 恶心 好用!都可以在前期打出 ...

  6. Gym 100646 Problem C: LCR 模拟题

    Problem C: LCR 题目连接: http://codeforces.com/gym/100646/attachments Description LCR is a simple game f ...

  7. 《ACM国际大学生程序设计竞赛题解Ⅰ》——模拟题

    这篇文章来介绍一些模拟题,即一类按照题目要求将现实的操作转换成程序语言. zoj1003: On every June 1st, the Children's Day, there will be a ...

  8. 2015大学计算机二级考试,2015年计算机二级考试模拟题(一)

    2015年计算机二级考试模拟题(一) 一.选择题(每小题1分,共20分) (1)现代微型计算机中所采用的电子元器件是 A)电子管 B)晶体管 C)小规模集成电路 D)大规模和超大规模集成电路 (2)从 ...

  9. CDA数据分析师认证考试模拟题库

    CDA等级考试模拟题库 Level 1 1.分析教师和会计师之间收入的差异,选择什么分析方法最合适? A.卡方分析 B.方差分析 C.两样本T检验 D.相关系数 答案C 2.分析购买不同产品的频次时, ...

最新文章

  1. 华为诺亚最新视觉Transformer综述
  2. 给你一天时间,如何理清AI圈儿现状?
  3. 为什么我不再使用MVC框架
  4. Mysql基于GTIDs的复制
  5. 深度对比Python的3种“字符串格式化”方法,看看你喜欢哪一种?
  6. leetcode486. 预测赢家(dp)
  7. Flutter-Cookbook 非官方翻译
  8. vue踩坑以及自己的解决办法总结,
  9. java json处理入门
  10. window环境mysql卸载不干净
  11. oracle全备份脚本,Oracle全库备份脚本
  12. 最安全的邮箱大全排名,公司安全邮箱申请如何设置?
  13. 白苹果修复_苹果手机突然屏幕变白怎么办
  14. 数据结构(二): 链表篇
  15. C语言回车符号和换行符
  16. 网络模型的鲁棒性(结合实例)与提升鲁棒性的方法
  17. 使用全局阈值进行灰度图像二值化
  18. osg demo14 漫游
  19. PHP中使用SCWS中文分词详解
  20. Chromium OS——下载源码4之配置repo

热门文章

  1. IOS开发笔记2-C语言基础复习
  2. 【Charles】Breakpoint 断点
  3. 【UIKit】文本框(UITextField)及键盘遮挡处理和回收
  4. NOIp2018 Mission Failed Level F
  5. vue结合Promise及async实现高效开发。
  6. 常用模块和面向对象 类
  7. openJDK与JDK的区别
  8. 一堂课玩转rpm包的制作
  9. CSS盒子模型之CSS3可伸缩框属性(Flexible Box)
  10. sublime使用总结