当前位置: 首页 > news >正文

洛谷 P1780 染色的立方体 题解报告

赛时经历

赛时没有注意复杂度,以为暴力搜索会超时,于是喜提爆零。

思路

暴力搜索加贪心。

暴力搜索部分

复杂度证明

大家应该都玩过骰子吧,玩久了就会发现,一个骰子如果分出方向的话,一共有 \(24\) 种摆放方法。

如何证明?

用排列组合,我们可以假定 \(1\) 号面的朝向不动,可将与 \(1\) 号面相邻的 4 个面进行旋转,则有 4 种可能;而 \(1\) 号面一共有 6 个朝向,则可得一共有 \(4 \times 6 = 24\) 种摆放可能。

由题意得立方体数量 \(1 \le n \le 4\),则最多可能情况有 \(24^4 = 331776\) 完全不会超时。

代码片段

我们可以通过打表列出立方体的 \(24\) 种变换方式,这样在变换时,可通过数组进行变换。
以下给出变换数组:

int ch[24][6]={
{2,1,5,0,4,3},
{2,0,1,4,5,3},
{2,4,0,5,1,3},
{2,5,4,1,0,3},
{4,2,5,0,3,1},
{5,2,1,4,3,0},
{1,2,0,5,3,4},
{0,2,4,1,3,5},
{0,1,2,3,4,5},
{4,0,2,3,5,1},
{5,4,2,3,1,0},
{1,5,2,3,0,4},
{5,1,3,2,4,0},
{1,0,3,2,5,4},
{0,4,3,2,1,5},
{4,5,3,2,0,1},
{1,3,5,0,2,4},
{0,3,1,4,2,5},
{4,3,0,5,2,1},
{5,3,4,1,2,0},
{3,4,5,0,1,2},
{3,5,1,4,0,2},
{3,1,0,5,4,2},
{3,0,4,1,5,2},
};

贪心部分

在确定了 \(n\) 个骰子的一种情况后,对于每一个朝向,找相同颜色面数量最多的颜色,将不是该颜色的面改为该颜色,即可做到对于该朝向修改颜色次数最少,再遍历每一个朝向,即可得到答案。

误区

本人在进行贪心时,以为一定要将所有骰子统一为其中一个骰子的所有面的颜色,并获得了 \(40\) 分的好成绩。

实际则不然,如此贪心是错误的,题目只要求所有相同朝向的面颜色相同即可。

所以切不可像本人一样为省去遍历一个骰子的时间,痛失 \(60\) 分。

代码实现

基于如上思路,便可得到以下通过代码:

#include<bits/stdc++.h>
using namespace std;
int ch[24][6]={
{2,1,5,0,4,3},
{2,0,1,4,5,3},
{2,4,0,5,1,3},
{2,5,4,1,0,3},
{4,2,5,0,3,1},
{5,2,1,4,3,0},
{1,2,0,5,3,4},
{0,2,4,1,3,5},
{0,1,2,3,4,5},
{4,0,2,3,5,1},
{5,4,2,3,1,0},
{1,5,2,3,0,4},
{5,1,3,2,4,0},
{1,0,3,2,5,4},
{0,4,3,2,1,5},
{4,5,3,2,0,1},
{1,3,5,0,2,4},
{0,3,1,4,2,5},
{4,3,0,5,2,1},
{5,3,4,1,2,0},
{3,4,5,0,1,2},
{3,5,1,4,0,2},
{3,1,0,5,4,2},
{3,0,4,1,5,2},
};
map<string,int>mp;
int arr[10][10],t[10][10],cnt,ANS=INT_MAX,n;
int check()
{int cnt=0,maxn=0,sum[105];for(int i=0;i<6;++i){maxn=0;memset(sum,0,sizeof sum);	for(int j=1;j<=n;++j){sum[t[j][i]]++;maxn=max(maxn,sum[t[j][i]]);}cnt+=n-maxn;}return cnt;
}
void solve(int k)
{if(k>n){ANS=min(ANS,check());return ;}int cnt;for(int i=0;i<24;++i){cnt=0;for(int j=0;j<6;++j){t[k][j]=arr[k][ch[i][j]];}solve(k+1);}return ;
}
int main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin>>n; while(n!=0){for(int i=1;i<=n;++i){for(int j=0;j<6;++j){string s;cin>>s;if(mp[s]==0){mp[s]=++cnt;}arr[i][j]=mp[s];}}solve(1);cout<<ANS<<"\n";cnt=0;ANS=INT_MAX;mp.clear();cin>>n;}return 0;
}

最后感谢您的留步与观看,希望本篇题解能够帮到您。

http://www.jsqmd.com/news/31075/

相关文章:

  • P11.常见的transforms(一)
  • 2025年11月上海装修公司榜单:松江千州装饰真实口碑深度解析
  • 2025年11月上海装修公司排行榜:从设计到交付的完整评价指南
  • 2025年11月上海装修公司排名榜:十强对比看谁更值
  • Web开发的坑
  • 5.吴恩达机器学习—神经网络的基础使用
  • 前端三剑客——javascript内置对象与其方法
  • 2025 年 11 月 PCD 铣刀厂家推荐排行榜,金刚石铣刀,聚晶金刚石铣刀,超硬刀具,高精度 PCD 铣刀公司推荐
  • 2025 年 11 月平面铣刀厂家推荐排行榜,钨钢平面铣刀,合金平面铣刀,数控平面铣刀,高精度平面铣刀公司推荐
  • 2025 年 11 月侧铣刀厂家推荐排行榜,钨钢侧铣刀,不锈钢侧铣刀,铝合金侧铣刀,高硬度侧铣刀公司推荐
  • 2025年11月适合初中生的学习机品牌排行:市场热销榜全维度评价
  • 《算法闯关指南:优选算法--滑动窗口》--15.串联所有单词的子串,16.最小覆盖子串 - 实践
  • 2025年11月适合初中生的学习机品牌评测:五款主流机型横向对比
  • 2025年11月适合初中生的学习机品牌推荐:权威榜单对比与口碑评测
  • FT232RL FT232R国产替代芯片GP232RNL GP232RL高稳定性USB转串口桥接芯片
  • Oracle OCP认证考试题目详解082系列第1题 - 实践
  • H3C AC+AP本地转发二层组网
  • jmeter中java.net.ConnectException: Connection refused: connect - 实践
  • 疯了还是天才?(上):一门基于Vim,号称“AI无法取代”的新语言
  • 2025年11月教育资源好的学习机品牌推荐:权威榜单对比评测
  • 小记
  • 2025年11月教育资源好的学习机品牌推荐:口碑榜五强深度评测
  • 2025年11月教育资源好的学习机品牌推荐:榜单对比五强教育资源含金量
  • 【pytest】使用 marker 向 fixture 传递数据 - 指南
  • 2025年11月性价比高的学习机品牌推荐:热门排行深度对比
  • Ubuntu 20 中 root 默认密码
  • 2025年11月性价比高的学习机品牌推荐榜:五强排名与价值对比
  • spug 运维工具
  • 2025年和君有约传媒科技:AI获客技术全景解析与增长逻辑揭秘
  • 2025年和君传媒:AI获客技术深度解析与增长引擎盘点