当前位置: 首页 > 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.zskr.cn/news/39635.html

相关文章:

  • 2025 年 11 月 PCD 铣刀厂家推荐排行榜,金刚石铣刀,聚晶金刚石铣刀,超硬刀具,高精度 PCD 铣刀公司推荐
  • 2025 年 11 月平面铣刀厂家推荐排行榜,钨钢平面铣刀,合金平面铣刀,数控平面铣刀,高精度平面铣刀公司推荐
  • 2025年11月适合初中生的学习机品牌排行:市场热销榜全维度评价
  • 《算法闯关指南:优选算法--滑动窗口》--15.串联所有单词的子串,16.最小覆盖子串 - 实践
  • 2025年11月适合初中生的学习机品牌评测:五款主流机型横向对比
  • 2025年11月教育资源好的学习机品牌推荐:榜单对比五强教育资源含金量
  • 【pytest】使用 marker 向 fixture 传递数据 - 指南
  • spug 运维工具
  • 2025年11月全屋定制环保材料公司排名:五强综合实力对比
  • React系列教程:1. 启动一个React项目
  • Discuz建站经验:Discuz论坛管理员怎么重置修改用户密码?
  • 2025年气凝胶绝热材料源头厂家权威榜单:气凝胶隔热涂料/屋顶隔热涂料/纳米涂层镀膜源头厂家精选
  • 数据库基准测试4:HammerDB测试脚本运用(for Oracle)
  • 多线程奇幻漂流:从单核到多核质变(一) - 教程
  • 251029C. 山月记
  • 2025年深度解析百川通阀门集团:从产能与智造维度透视行业样本
  • 2025年深度解析百川通阀门集团:消防阀门赛道的产能与认证全景
  • 2025 年电源模块厂家最新推荐榜单重磅发布,深度剖析优质厂家核心优势及选购要点隔离 / 开关 / 国产电源模块公司推荐
  • 如何在不可信的云环境中,构建兼具极致性能与卓越安全的大语言模型(LLM)推理服务?
  • 2025 年 11 月连续驱动摩擦焊机,相位摩擦焊机,车桥摩擦焊机厂家最新推荐,产能、专利、环保三维数据透视
  • 2025年11月闸阀厂家排名:五强产品性能与适用场景对比
  • vue处理关闭浏览器页签和关闭整个浏览器触发事件调后端接口
  • 2025年浙江助贷公司权威推荐榜单:银行助贷/民生助粒贷/营运资金周转源头服务商精选
  • 【小沐学WebGIS】基于Three.JS绘制飞行轨迹Flight Tracker(Three.JS/ vue / react / WebGL) - 教程
  • 2025年石家庄GEO招商机构权威推荐榜单:GEO排名优化/GEO营销/GEO推广源头机构精选
  • 2025 年发电机出租厂商最新推荐排行榜:优质企业盘点,覆盖应急 / 低噪音 / 大功率租赁需求低噪音发电机出租/大功率发电机出租/进口发电机出租公司推荐
  • CTFshow Web入门之JWT篇wp
  • 算力成本降低 33%,与光同尘用 Serverless AI 赋能影视商业内容生产
  • 深圳市德恺检测有限公司:您的CNAS/CMA实验室认证咨询专业伙伴
  • 贪心题目小结