NOIP2016模拟 拼接mf(模拟)

  1 #include "bits/stdc++.h"
  2 using namespace std;
  3 typedef long long LL;
  4 const int MAX=10;
  5 char n[105];
  6 struct Cube{
  7     int c[MAX][MAX][MAX];//前 后 左 右 上 下
  8     void out(){
  9         int i,j,k;
 10         for (i=1;i<=6;i++){
 11             for (j=1;j<=3;j++){
 12                 for (k=1;k<=3;k++)
 13                      printf("%d",c[i][j][k]);
 14                 printf("\n");
 15             }
 16         }
 17     }
 18     void work1(){
 19         int i,j,k,h;
 20         int a[MAX],vv[MAX][MAX];
 21         a[1]=c[1][1][3],a[2]=c[1][2][3],a[3]=c[1][3][3];
 22         c[1][1][3]=c[6][1][3],c[1][2][3]=c[6][2][3],c[1][3][3]=c[6][3][3];//下→前
 23         c[6][1][3]=c[2][1][3],c[6][2][3]=c[2][2][3],c[6][3][3]=c[2][3][3];//后→下
 24         c[2][1][3]=c[5][1][3],c[2][2][3]=c[5][2][3],c[2][3][3]=c[5][3][3];//上→后
 25         c[5][1][3]=a[1],c[5][2][3]=a[2],c[5][3][3]=a[3];//前→上
 26         for (k=1;k<=3;k++)
 27          for (h=1;h<=3;h++)
 28           vv[k][h]=c[4][k][h];
 29         c[4][1][3]=vv[1][1],c[4][2][3]=vv[1][2],c[4][3][3]=vv[1][3];
 30         c[4][1][2]=vv[2][1],c[4][2][2]=vv[2][2],c[4][3][2]=vv[2][3];
 31         c[4][1][1]=vv[3][1],c[4][2][1]=vv[3][2],c[4][3][1]=vv[3][3];
 32     }
 33     void work2(){
 34         int i,j,k,h;
 35         int a[MAX],vv[MAX][MAX];
 36         for (i=1;i<=3;i++){
 37             a[1]=c[1][1][3],a[2]=c[1][2][3],a[3]=c[1][3][3];
 38             c[1][1][3]=c[6][1][3],c[1][2][3]=c[6][2][3],c[1][3][3]=c[6][3][3];//下→前
 39             c[6][1][3]=c[2][1][3],c[6][2][3]=c[2][2][3],c[6][3][3]=c[2][3][3];//后→下
 40             c[2][1][3]=c[5][1][3],c[2][2][3]=c[5][2][3],c[2][3][3]=c[5][3][3];//上→后
 41             c[5][1][3]=a[1],c[5][2][3]=a[2],c[5][3][3]=a[3];//前→上
 42             for (k=1;k<=3;k++)
 43              for (h=1;h<=3;h++)
 44               vv[k][h]=c[4][k][h];
 45             c[4][1][3]=vv[1][1],c[4][2][3]=vv[1][2],c[4][3][3]=vv[1][3];
 46             c[4][1][2]=vv[2][1],c[4][2][2]=vv[2][2],c[4][3][2]=vv[2][3];
 47             c[4][1][1]=vv[3][1],c[4][2][1]=vv[3][2],c[4][3][1]=vv[3][3];
 48         }
 49     }
 50     void work3(){
 51         int i,j,k,h;
 52         int a[MAX];int vv[MAX][MAX];
 53         a[1]=c[1][1][1],a[2]=c[1][1][2],a[3]=c[1][1][3];
 54         c[1][1][1]=c[3][1][1],c[1][1][2]=c[3][1][2],c[1][1][3]=c[3][1][3];//左→前
 55         c[3][1][1]=c[2][1][1],c[3][1][2]=c[2][1][2],c[3][1][3]=c[2][1][3];//后→左
 56         c[2][1][1]=c[4][1][1],c[2][1][2]=c[4][1][2],c[2][1][3]=c[4][1][3];//右→后
 57         c[4][1][1]=a[1],c[4][1][2]=a[2],c[4][1][3]=a[3];//前→右
 58         for (k=1;k<=3;k++)
 59          for (h=1;h<=3;h++)
 60           vv[k][h]=c[5][k][h];
 61         c[5][1][3]=vv[1][1],c[5][2][3]=vv[1][2],c[5][3][3]=vv[1][3];
 62         c[5][1][2]=vv[2][1],c[5][2][2]=vv[2][2],c[5][3][2]=vv[2][3];
 63         c[5][1][1]=vv[3][1],c[5][2][1]=vv[3][2],c[5][3][1]=vv[3][3];
 64     }
 65     void work4(){
 66         int i,j,k,h;
 67         int a[MAX];int vv[MAX][MAX];
 68         for (i=1;i<=3;i++){
 69             a[1]=c[1][1][1],a[2]=c[1][1][2],a[3]=c[1][1][3];
 70             c[1][1][1]=c[3][1][1],c[1][1][2]=c[3][1][2],c[1][1][3]=c[3][1][3];//左→前
 71             c[3][1][1]=c[2][1][1],c[3][1][2]=c[2][1][2],c[3][1][3]=c[2][1][3];//后→左
 72             c[2][1][1]=c[4][1][1],c[2][1][2]=c[4][1][2],c[2][1][3]=c[4][1][3];//右→后
 73             c[4][1][1]=a[1],c[4][1][2]=a[2],c[4][1][3]=a[3];//前→右
 74         for (k=1;k<=3;k++)
 75          for (h=1;h<=3;h++)
 76           vv[k][h]=c[5][k][h];
 77         c[5][1][3]=vv[1][1],c[5][2][3]=vv[1][2],c[5][3][3]=vv[1][3];
 78         c[5][1][2]=vv[2][1],c[5][2][2]=vv[2][2],c[5][3][2]=vv[2][3];
 79         c[5][1][1]=vv[3][1],c[5][2][1]=vv[3][2],c[5][3][1]=vv[3][3];
 80         }
 81     }
 82 }mat;
 83 inline int read(){char c;int an(0);c=getchar();while (c<‘0‘||c>‘9‘)c=getchar();while (c>=‘0‘&&c<=‘9‘){an=an*10+c-‘0‘;c=getchar();}return an;}
 84 int main(){
 85     freopen ("cube.in","r",stdin);
 86     freopen ("cube.out","w",stdout);
 87     gets(n+1);
 88     int ln=strlen(n+1),cc,i,j,k;
 89     for (i=1;i<=6;i++){
 90         for (j=1;j<=3;j++){
 91             cc=read();
 92             mat.c[i][j][3]=cc%10;cc/=10;
 93             mat.c[i][j][2]=cc%10;cc/=10;
 94             mat.c[i][j][1]=cc%10;cc/=10;
 95         }
 96     }
 97     for (i=1;i<=ln;i++){
 98         if (n[i]==‘1‘) mat.work1();
 99         if (n[i]==‘2‘) mat.work2();
100         if (n[i]==‘3‘) mat.work3();
101         if (n[i]==‘4‘) mat.work4();
102     }
103     mat.out();
104     return 0;
105 }
时间: 2024-09-29 10:40:03

NOIP2016模拟 拼接mf(模拟)的相关文章

[Linux运维]常用场景模拟 -- cpu使用率模拟

[Linux运维]常用场景模拟 -- cpu使用率模拟 from http://www.cnblogs.com/zk47/p/4771105.html 1 单个核 100%: 代码 kill_cpu.c #include <stdlib.h> int main() { while(1); return 0; } 运行 $ gcc -o out kill_cpu.c $ ./out 看top的结果: $ top top - 15:44:08 up 207 days, 21:29, 2 users

栈模拟队列 队列模拟栈

代码如下: PS:做了一些测试,目前没问题.有问题请指正... 栈模拟队列 队列模拟栈

【NOIP2016提高A组模拟8.15】Password

题目 分析 首先我们知道,原A序列其实表示一个矩阵,而这个矩阵的对角线上的数字就是答案B序列. 接着\(a.b>=gcd(a,b)\),所以序列A中的最大的数就是ans[1],第二大的数就是ans[2]. 但是ans[3]并不一定就是序列A中的第三大的数,因为gcd(ans[1],ans[2])有可能是序列A中的第三大的数. 所以但找到了ans[i],对于每个gcd(ans[i],ans[1~i-1])在序列A中删掉两个(就是删掉2(i-1)个.为什么是两个自己考虑).时间复杂度\(O(n^2l

【NOIP2016提高A组模拟8.14】传送带

题目 在一个2维平面上有两条传送带,每一条传送带可以看成是一条线段.两条传送带分别为线段AB和线段CD.FTD在AB上的移动速度为P,在CD上的移动速度为Q,在平面上的移动速度R.现在FTD想从A点走到D点,他想知道最少需要走多长时间 分析 易得,答案就是首先在AB上走一段,然后走到CD上的一点,再走到D. 正解就是三分套三分,但本人很懒,打了个枚举加三分,勉强卡了过去. 首先在AB上枚举一点,接着在CD上按时间三分. #include <cmath> #include <iostrea

【NOIP2016提高A组模拟8.14】疯狂的火神

题目 火神为了检验zone的力量,他决定单挑n个人. 由于火神训练时间有限,最多只有t分钟,所以他可以选择一部分人来单挑,由于有丽子的帮助,他得到了每个人特定的价值,每个人的价值由一个三元组(a,b,c)组成,表示如果火神在第x分钟单挑这个人(x指单挑完这个人的时间),他就会得到a-b*x的经验值,并且他需要c分钟来打倒这个人. 现在火神想知道,他最多可以得到多少经验值,由于火神本来就很笨,进入zone的疯狂的火神就更笨了,所以他希望你来帮他计算出他最多可以得到多少经验值. 分析 注意到这道题有

【NOIP2016提高A组模拟8.17】(雅礼联考day1)Binary

题目 分析 首先每个数对\(2^i\)取模.也就是把每个数的第i位以后删去. 把它们放进树状数组里面. 那么当查询操作, 答案就位于区间\([2^i-x,2^{i-1}-1-x]\)中,直接查询就可以了. 细节很多,注意处理. #include <cmath> #include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #include <algor

【NOIP2016提高A组模拟8.17】(雅礼联考day1)Value

题目 分析 易证,最优的答案一定是按\(w_i\)从小到大放. 我们考虑dp, 先将w从小到大排个序,再设\(f_{i,j}\)表示当前做到第i个物品,已选择了j个物品的最大值.转移就是\[f_{i,j}=max\left\{\begin{array}\\f_{i-1,j}\\f_{i-1,j-1}+v_i-w_i*(共选多少个物品(这个要枚举)-j)\end{array}\right.\] 但显然这是\(O(n^3)\)的. 我们考虑如何不用枚举共选多少个物品, 我们考虑反过来做,将w从大到小

【NOIP2016提高A组模拟8.15】Garden

题目 分析 其实原题就是[cqoi2012][bzoj2669]局部极小值. 有一个n行m列的整数矩阵,其中1到nm之间的每个整数恰好出现一次.如果一个格子比所有相邻格子(相邻是指有公共边或公共顶点)都小,我们说这个格子是局部极小值. 给出所有局部极小值的位置,你的任务是判断有多少个可能的矩阵. 发现,X的位置最多有8个,那我们考虑状压dp. 我们从小到大把数填进去,用\(f_{i,j}\)表示,把第i个数填进去后,每个X是否被填了数,用二进制数j表示. 预处理出\(rest_j\)表示填充状态

【NOIP2016提高A组模拟9.9】运输妹子

题目 小轩轩是一位非同一般的的大农(lao)场(si)主(ji),他有一大片非同一般的农田,并且坐落在一条公路旁(可以认为是数轴),在他的农田里种的东西也非同一般--不是什么水稻小麦,而是妹子. 在小轩轩的细心培育下,他的大片农田都要结出妹子啦!但是他的农田分布实在是太广阔了,他担心自己的妹子会令路过的人想入非非,于是他想要把所有农田上的妹子都集中到一个仓库里面,贮存起来.可是妹子太多,他叫来了一辆卡车,这辆卡车刚好可以装满一个农田的妹子,并且在满载的情况下,运满满一卡车妹子走1米的费用是1元.