【NOIP2016提高A组模拟7.15】立方体
来源:互联网 发布:淘宝达人精品帖子 编辑:程序博客网 时间:2024/05/07 10:26
Description
Input
Output
一个整数:答案
Sample Input
e2 e3 0 8 1 2 1 1
Sample Output
5
Solution
其实,这题除了考算法以外,考的主要是程序实现能力和折纸能力。
首先折一个立方体,按照题目的顺序给前面,后面,上面……依次标上1~6
接着用这个立方体模拟一下怎么滚的,就会发现往四个方向滚之后,六面依次变成了什么,打个表(题目关键就在这个表)
1,2,3,4分别代表左,前,右,后。
int bl[5][7]={{0,0,0,0,0,0,0}, {0,1,2,6,3,4,5}, {0,5,3,1,4,2,6}, {0,1,2,4,5,6,3}, {0,3,5,2,4,1,6}};
然后就直接BFS,SPFA暴力修改,注意F数组和标记数组不仅要记录坐标,还要记录立方体的状态。只要记两个面应该就够了,而我记录了六个面,于是就成了八维数组
Code
#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#define fo(i,a,b) for(int i=a;i<=b;i++)using namespace std;int d[64*100][9],ddd[5]={0,1,0,-1,0},dddd[5]={0,0,1,0,-1},b[7],ans=100000000;int bl[5][7]={{0,0,0,0,0,0,0}, {0,1,2,6,3,4,5}, {0,5,3,1,4,2,6}, {0,1,2,4,5,6,3}, {0,3,5,2,4,1,6}};bool bz[9][9][7][7][7][7][7][7];int f[9][9][7][7][7][7][7][7];int main(){ char ch1,ch2;int y2; scanf("%c%d %c%d %d %d %d %d %d %d",&ch1,&d[1][8],&ch2,&y2,&b[1],&b[2],&b[3],&b[4],&b[5],&b[6]); fo(i,1,6) d[1][i]=i; int x2=ch2-96;d[1][7]=ch1-96;memset(f,127,sizeof(f)); f[d[1][7]][d[1][8]][1][2][3][4][5][6]=b[5]; for(int i=0,j=1;i<j;) { i++; fo(k,1,4) { int x=d[i][7]+ddd[k],y=d[i][8]+dddd[k],c[7]; fo(l,1,6) c[l]=d[i][bl[k][l]]; if(x>0&&x<=8&&y>0&&y<=8&&f[x][y][c[1]][c[2]][c[3]][c[4]][c[5]][c[6]]>f[d[i][7]][d[i][8]][d[i][1]][d[i][2]][d[i][3]][d[i][4]][d[i][5]][d[i][6]]+b[c[5]]) { f[x][y][c[1]][c[2]][c[3]][c[4]][c[5]][c[6]]=f[d[i][7]][d[i][8]][d[i][1]][d[i][2]][d[i][3]][d[i][4]][d[i][5]][d[i][6]]+b[c[5]]; if(x==x2&&y==y2) ans=min(ans,f[x][y][c[1]][c[2]][c[3]][c[4]][c[5]][c[6]]); if (bz[x][y][c[1]][c[2]][c[3]][c[4]][c[5]][c[6]]==0) { bz[x][y][c[1]][c[2]][c[3]][c[4]][c[5]][c[6]]=1; d[++j][7]=x;d[j][8]=y;fo(l,1,6) d[j][l]=c[l]; } } } bz[d[i][7]][d[i][8]][d[i][1]][d[i][2]][d[i][3]][d[i][4]][d[i][5]][d[i][6]]=0; } printf("%d",ans);}
1 0
- 【NOIP2016提高A组模拟7.15】立方体
- JZOJ 4628 立方体【NOIP2016提高A组模拟7.15】
- 计数【NOIP2016提高A组模拟7.15】
- 【NOIP2016提高A组模拟7.15】修路
- 【NOIP2016提高A组模拟7.15】计数
- JZOJ 4629 修路【NOIP2016提高A组模拟7.15】
- 【NOIP2016提高A组模拟7.15】修路 题解+代码
- 【NOIP2016提高A组模拟7.15】计数 题解+代码
- 【NOIP2016提高A组模拟7.15】颜料大乱斗 题解+代码
- [JZSC2016] 【NOIP2016提高A组模拟7.15】总结
- JZOJ 4630 计数【NOIP2016提高A组模拟7.15】
- JZOJ 4603 颜料大乱斗【NOIP2016提高A组模拟7.15】
- 颜料大乱斗【NOIP2016提高A组模拟7.15】
- 【NOIP2016提高A组模拟7.15】颜料大乱斗
- [jzoj4603]【NOIP2016提高A组模拟7.15】颜料大乱斗
- 【NOIP2016提高A组模拟7.17】寻找
- 【NOIP2016提高A组模拟7.17】寻找
- 【NOIP2016提高A组模拟7.17】锦标赛
- Linux内存管理基础
- html meta
- hdu_2457_DNA repair(AC自动机+DP)
- java的面向对象
- 【JZOJ 4629】修路
- 【NOIP2016提高A组模拟7.15】立方体
- mysql replace into,insert into ... on duplicate key
- 左右侧滑
- JS保留正数小数2位
- java模拟登录qq网站,实现一键签到等等功能
- 最小最大和
- IOS-高级动画进阶
- JavaEE之使用DOM4J和XPath对xml文档的添加,删除,查询操作
- tomcat部署