AC日记——魔方 洛谷 P2007

魔方

思路:

  模拟;

代码:

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>

using namespace std;

struct MFType {
    int ai[4][4];
};
struct MFType ci[7];

int len;

char done[500],ch[10];

/*

1.front
2.back
3.left
4.right
5.top
6.under

*/

void OperationType_right_turning90()
{
    MFType *now=&ci[4],tmp=ci[4];
    now->ai[1][1]=tmp.ai[3][1];
    now->ai[1][2]=tmp.ai[2][1];
    now->ai[1][3]=tmp.ai[1][1];
    now->ai[2][1]=tmp.ai[3][2];
    now->ai[2][3]=tmp.ai[1][2];
    now->ai[3][1]=tmp.ai[3][3];
    now->ai[3][2]=tmp.ai[2][3];
    now->ai[3][3]=tmp.ai[1][3];
    now=&ci[1],tmp=ci[1];
    MFType *pos=&ci[6];
    now->ai[1][3]=pos->ai[1][3];
    now->ai[2][3]=pos->ai[2][3];
    now->ai[3][3]=pos->ai[3][3];
    now=&ci[6],pos=&ci[2];
    now->ai[1][3]=pos->ai[1][3];
    now->ai[2][3]=pos->ai[2][3];
    now->ai[3][3]=pos->ai[3][3];
    now=&ci[2],pos=&ci[5];
    now->ai[1][3]=pos->ai[1][3];
    now->ai[2][3]=pos->ai[2][3];
    now->ai[3][3]=pos->ai[3][3];
    now=&ci[5],pos=&tmp;
    now->ai[1][3]=pos->ai[1][3];
    now->ai[2][3]=pos->ai[2][3];
    now->ai[3][3]=pos->ai[3][3];
}

void OperationType_right_turningback90()
{
    MFType *now=&ci[4],tmp=ci[4];
    now->ai[1][1]=tmp.ai[1][3];
    now->ai[1][2]=tmp.ai[2][3];
    now->ai[1][3]=tmp.ai[3][3];
    now->ai[2][1]=tmp.ai[1][2];
    now->ai[2][3]=tmp.ai[3][2];
    now->ai[3][1]=tmp.ai[1][1];
    now->ai[3][2]=tmp.ai[2][1];
    now->ai[3][3]=tmp.ai[3][1];
    now=&ci[1],tmp=ci[1];
    MFType *pos=&ci[5];
    now->ai[1][3]=pos->ai[1][3];
    now->ai[2][3]=pos->ai[2][3];
    now->ai[3][3]=pos->ai[3][3];
    now=&ci[5],pos=&ci[2];
    now->ai[1][3]=pos->ai[1][3];
    now->ai[2][3]=pos->ai[2][3];
    now->ai[3][3]=pos->ai[3][3];
    now=&ci[2],pos=&ci[6];
    now->ai[1][3]=pos->ai[1][3];
    now->ai[2][3]=pos->ai[2][3];
    now->ai[3][3]=pos->ai[3][3];
    now=&ci[6],pos=&tmp;
    now->ai[1][3]=pos->ai[1][3];
    now->ai[2][3]=pos->ai[2][3];
    now->ai[3][3]=pos->ai[3][3];
}

void OperationType_top_turning90()
{
    MFType *now=&ci[5],tmp=ci[5];
    now->ai[1][1]=tmp.ai[3][1];
    now->ai[1][2]=tmp.ai[2][1];
    now->ai[1][3]=tmp.ai[1][1];
    now->ai[2][1]=tmp.ai[3][2];
    now->ai[2][3]=tmp.ai[1][2];
    now->ai[3][1]=tmp.ai[3][3];
    now->ai[3][2]=tmp.ai[2][3];
    now->ai[3][3]=tmp.ai[1][3];
    now=&ci[1],tmp=ci[1];
    MFType *pos=&ci[3];
    now->ai[1][1]=pos->ai[1][1];
    now->ai[1][2]=pos->ai[1][2];
    now->ai[1][3]=pos->ai[1][3];
    now=&ci[3],pos=&ci[2];
    now->ai[1][1]=pos->ai[1][1];
    now->ai[1][2]=pos->ai[1][2];
    now->ai[1][3]=pos->ai[1][3];
    now=&ci[2],pos=&ci[4];
    now->ai[1][1]=pos->ai[1][1];
    now->ai[1][2]=pos->ai[1][2];
    now->ai[1][3]=pos->ai[1][3];
    now=&ci[4],pos=&tmp;
    now->ai[1][1]=pos->ai[1][1];
    now->ai[1][2]=pos->ai[1][2];
    now->ai[1][3]=pos->ai[1][3];
}

void OperationType_top_turningback90()
{
    MFType *now=&ci[5],tmp=ci[5];
    now->ai[1][1]=tmp.ai[1][3];
    now->ai[1][2]=tmp.ai[2][3];
    now->ai[1][3]=tmp.ai[3][3];
    now->ai[2][1]=tmp.ai[1][2];
    now->ai[2][3]=tmp.ai[3][2];
    now->ai[3][1]=tmp.ai[1][1];
    now->ai[3][2]=tmp.ai[2][1];
    now->ai[3][3]=tmp.ai[3][1];
    now=&ci[1],tmp=ci[1];
    MFType *pos=&ci[4];
    now->ai[1][1]=pos->ai[1][1];
    now->ai[1][2]=pos->ai[1][2];
    now->ai[1][3]=pos->ai[1][3];
    now=&ci[4],pos=&ci[2];
    now->ai[1][1]=pos->ai[1][1];
    now->ai[1][2]=pos->ai[1][2];
    now->ai[1][3]=pos->ai[1][3];
    now=&ci[2],pos=&ci[3];
    now->ai[1][1]=pos->ai[1][1];
    now->ai[1][2]=pos->ai[1][2];
    now->ai[1][3]=pos->ai[1][3];
    now=&ci[3],pos=&tmp;
    now->ai[1][1]=pos->ai[1][1];
    now->ai[1][2]=pos->ai[1][2];
    now->ai[1][3]=pos->ai[1][3];
}

void debug()
{
    printf("\n");
    for(int i=1;i<=6;i++)
    {
        printf("%d\n",i);
        for(int j=1;j<=3;j++)
        {
            for(int v=1;v<=3;v++) printf("%d",ci[i].ai[j][v]);
            printf("\n");
        }
        printf("\n");
    }
    printf("\n");
}

int main()
{
    freopen("cube.in","r",stdin);
    freopen("cube.out","w",stdout);
    scanf("%s",done),len=strlen(done);
    for(int i=1;i<=6;i++)
    {
        for(int j=1;j<=3;j++)
        {
            scanf("%s",ch);
            for(int v=1;v<=3;v++) ci[i].ai[j][v]=ch[v-1]-‘0‘;
        }
    }
//    debug();
    for(int i=0;i<len;i++)
    {
        if(done[i]==‘1‘) OperationType_right_turning90();
        else if(done[i]==‘2‘) OperationType_right_turningback90();
        else if(done[i]==‘3‘) OperationType_top_turning90();
        else if(done[i]==‘4‘) OperationType_top_turningback90();
//        debug();
    }
    for(int i=1;i<=6;i++)
    {
        for(int j=1;j<=3;j++)
        {
            for(int v=1;v<=3;v++) printf("%d",ci[i].ai[j][v]);
            printf("\n");
        }
    }
    return 0;
}
时间: 2024-10-03 22:12:19

AC日记——魔方 洛谷 P2007的相关文章

AC日记——最大数 洛谷 P1198 [JSOI2008]

题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值. 限制:L不超过当前数列的长度. 2. 插入操作. 语法:A n 功能:将n加上t,其中t是最近一次查询操作的答案(如果还未执行过查询操作,则t=0),并将所得结果对一个固定的常数D取模,将所得答案插入到数列的末尾. 限制:n是整数(可能为负数)并且在长整范围内. 注意:初始时数列是空的,没有一个数. 输入输出格式 输入格式: 第一行两个整数,M

AC日记——栈 洛谷 P1044

题目背景 栈是计算机中经典的数据结构,简单的说,栈就是限制在一端进行插入删除操作的线性表. 栈有两种最重要的操作,即pop(从栈顶弹出一个元素)和push(将一个元素进栈). 栈的重要性不言自明,任何一门数据结构的课程都会介绍栈.宁宁同学在复习栈的基本概念时,想到了一个书上没有讲过的问题,而他自己无法给出答案,所以需要你的帮忙. 题目描述 宁宁考虑的是这样一个问题:一个操作数序列,从1,2,一直到n(图示为1到3的情况),栈A的深度大于n. 现在可以进行两种操作, 1.将一个数,从操作数序列的头

AC日记——忠诚 洛谷 P1816

题目描述 老管家是一个聪明能干的人.他为财主工作了整整10年,财主为了让自已账目更加清楚.要求管家每天记k次账,由于管家聪明能干,因而管家总是让财主十分满意.但是由于一些人的挑拨,财主还是对管家产生了怀疑.于是他决定用一种特别的方法来判断管家的忠诚,他把每次的账目按1,2,3…编号,然后不定时的问管家问题,问题是这样的:在a到b号账中最少的一笔是多少?为了让管家没时间作假他总是一次问多个问题. 输入输出格式 输入格式: 输入中第一行有两个数m,n表示有m(m<=100000)笔账,n表示有n个问

AC日记——潜伏者 洛谷 P1071 (模拟)

题目描述 R 国和 S 国正陷入战火之中,双方都互派间谍,潜入对方内部,伺机行动.历尽艰险后,潜伏于 S 国的 R 国间谍小 C 终于摸清了 S 国军用密码的编码规则: 1. S 国军方内部欲发送的原信息经过加密后在网络上发送,原信息的内容与加密后所得的内容均由大写字母‘A’-‘Z’构成(无空格等其他字符). 2. S 国对于每个字母规定了对应的“密字”.加密的过程就是将原信息中的所有字母替换为其对应的“密字”. 3. 每个字母只对应一个唯一的“密字”,不同的字母对应不同的“密字”.“密字”可以

AC日记——机器翻译 洛谷 P1540

题目背景 小晨的电脑上安装了一个机器翻译软件,他经常用这个软件来翻译英语文章. 题目描述 这个翻译软件的原理很简单,它只是从头到尾,依次将每个英文单词用对应的中文含义来替换.对于每个英文单词,软件会先在内存中查找这个单词的中文含义,如果内存中有,软件就会用它进行翻译:如果内存中没有,软件就会在外存中的词典内查找,查出单词的中文含义然后翻译,并将这个单词和译义放入内存,以备后续的查找和翻译. 假设内存中有M个单元,每单元能存放一个单词和译义.每当软件将一个新单词存入内存前,如果当前内存中已存入的单

AC日记——统计和 洛谷 P2068

统计和 思路: 水题: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 100005 int n,m,tree[maxn]; inline void in(int &now) { int if_z=1;now=0; char Cget=getchar(); while(Cget>'9'||Cget<'0') { if(Cget=='-') if_z=-1; Cget=getchar(); } wh

AC日记——三连击 洛谷 P1008

题目背景 本题为提交答案题,您可以写程序或手算在本机上算出答案后,直接提交答案文本,也可提交答案生成程序. 题目描述 将1,2,…,9共9个数分成三组,分别组成三个三位数,且使这三个三位数构成1:2:3的比例,试求出所有满足条件的三个三位数. 输入输出格式 输入格式: 木有输入 输出格式: 若干行,每行3个数字.按照每行第一个数字升序排列. 输入输出样例 输入样例#1: 输出样例#1: 192 384 576 * * * ... * * * (输出被和谐了) 思路: 搜索: 水到炸. 来,上代码

AC日记——方差 洛谷 P1471

方差 思路: 线段树: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 100005 struct TreeNodeType { int l,r,mid,size; double sum,sum2,flag; inline void updata(double x) { flag+=x; sum2+=sum*x*2+size*x*x; sum+=x*size; } }; struct TreeNodeType tre

AC日记——独木桥 洛谷 p1007

题目背景 战争已经进入到紧要时间.你是运输小队长,正在率领运输部队向前线运送物资.运输任务像做题一样的无聊.你希望找些刺激,于是命令你的士兵们到前方的一座独木桥上欣赏风景,而你留在桥下欣赏士兵们.士兵们十分愤怒,因为这座独木桥十分狭窄,只能容纳一个人通过.假如有两个人相向而行在桥上相遇,那么他们两个人将无妨绕过对方,只能有一个人回头下桥,让另一个人先通过.但是,可以有多个人同时呆在同一个位置. 题目描述 突然,你收到从指挥部发来的信息,敌军的轰炸机正朝着你所在的独木桥飞来!为了安全,你的部队必须