uva1352-Colored-Cubes 精选技巧2


题意:修改方块某些面的颜色,使所有方块一样,即每种方块存在某种旋转方式使所有方块对应的面的颜色相同
于是用最暴力的方式枚举每一种状态,24种状态如题目中1在顶面,然后左旋转3次,便有4种状态,分别有6种在顶面的状态,所以有4*6=24种;
我是暴力推出24种状态的。如 1在顶面的状态,首先向上翻,则原集合{1,2,3,4,5,6} -> {4,2,1,6,5,3} (原集合的中间(3,4)交换顺序分别放入头尾,原集合头尾(1,6)顺序不变,插入中间),其他不变,形成新集合,若向左旋转,则原集合{4,2,1,6,5,3} -> {2,3,1,6,4,5} (中间不变,原集合的头与倒数第二的元素(4,5)置于尾,原集合第二个元素与为尾元素(2,3)置于头)。基于{1,2,3,4,5,6},如要5在顶面,先左旋转三次,再向上翻一次,再左旋转三次;要1在顶面,向上翻一次,再左旋转三次......
#include 
   
   
    
    
#include 
    
    
     
     
#include 
     
     
      
      
#include 
      
      
       
       
#include 
       
       
         #include 
         #include 
         
           using namespace std; const int inf=0x7fffffff; //旋转的24种状态 int c[24][6]={ {4,2,1,6,5,3},{2,3,1,6,4,5},{3,5,1,6,2,4},{5,4,1,6,3,2}, {4,6,2,5,1,3},{6,3,2,5,4,1},{3,1,2,5,6,4},{1,4,2,5,3,6}, {4,1,5,2,6,3},{1,3,5,2,4,6},{3,6,5,2,1,4},{6,4,5,2,3,1}, {6,2,4,3,5,1},{2,1,4,3,6,5},{1,5,4,3,2,6},{5,6,4,3,1,2}, {3,2,6,1,5,4},{2,4,6,1,3,5},{4,5,6,1,2,3},{5,3,6,1,4,2}, {1,2,3,4,5,6},{2,6,3,4,1,5},{6,5,3,4,2,1},{5,1,3,4,6,2} }; string str[10][10];//保存输入 vector 
          
            v; //存储各种颜色 int a[10][10]; //存储将颜色转化为数值的状态 int b[10][10]; //存储中间旋转的状态 int r[30]; //存储24种状态的排列 int num[30]; //计算每种颜色出现的次数 map 
           
             mp; //每种颜色与数值的映射 int n,res; //n为n行,res为结果 void setc(int x,int y,string sr) //转化为数值 { if(mp[sr]!=-1) { a[x][y]=mp[sr]; } else { mp[sr]=v.size()+1; a[x][y]=mp[sr]; v.push_back(sr); } } void check() { int ans=-inf; for(int i=0;i 
            
              >n,n) { res=inf; v.clear(); mp.clear(); for(int i=0;i 
             
               >str[i][j]; mp[str[i][j]]=-1; } for(int i=0;i 
               
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值