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

UVa 340 Master-Mind Hints

题目描述

MasterMind\texttt{MasterMind}MasterMind是一个双人游戏。其中一方是设计者,选择一组秘密代码。另一方是破解者,试图破解它。代码只是一行彩色点。在游戏开始时,玩家约定代码的长度NNN以及代码中可能出现的颜色。

为了破解代码,破解者进行多次猜测,每次猜测本身也是一个代码。每次猜测后,设计者给出一个提示,说明猜测与秘密代码的匹配程度。

在本题中,给定一个秘密代码s1,s2,…,sns_1, s_2, \dots, s_ns1,s2,,sn和一个猜测代码g1,g2,…,gng_1, g_2, \dots, g_ng1,g2,,gn,需要确定提示。提示由一对数字确定:

  • 强匹配si=gjs_i = g_jsi=gji=ji = ji=j
  • 弱匹配si=gjs_i = g_jsi=gji≠ji \neq ji=j

设计者选择一组独立匹配(即每个位置最多被使用一次),使得强匹配和弱匹配的数量都最大。提示由强匹配数后跟弱匹配数组成。

如果提示是(n,0)(n,0)(n,0),则猜测与秘密代码完全相同。

输入格式

输入包含多场游戏的数据。每场游戏以一个整数NNN(代码长度)开始,然后是秘密代码(NNN个整数,范围111999)。接着是任意数量的猜测,每个猜测也是NNN个整数(范围111999)。每场游戏的最后一个猜测后跟NNN000(这些000不应视为猜测)。

第一场游戏之后是第二场游戏的数据(以新的NNN开始)。输入的最后一场游戏后跟一个单独的000(即N=0N=0N=0)。NNN的最大值为100010001000

输出格式

对于每场游戏,输出游戏编号,然后按顺序为每个猜测输出一行提示。每个提示表示为(strong,weak)。格式如样例所示。

样例输入

4 1 3 5 5 1 1 2 3 4 3 3 5 6 5 5 1 6 1 3 5 1 3 5 5 0 0 0 0 10 1 2 2 2 4 5 6 6 6 9 1 2 3 4 5 6 7 8 9 1 1 1 2 2 3 3 4 4 5 5 1 2 1 3 1 5 1 6 1 9 1 2 2 5 5 5 6 6 6 7 0 0 0 0 0 0 0 0 0 0 0

样例输出

Game 1: (1,1) (2,0) (1,2) (1,2) (4,0) Game 2: (2,4) (3,2) (5,0) (7,0)

题目分析

问题的本质

这是一个匹配计数问题。给定两个等长的序列sssggg,需要计算:

  • 强匹配数:相同位置上数值相等的个数
  • 弱匹配数:不同位置上数值相等的个数(每个数值最多被计数一次)

算法描述

计算强匹配很简单:直接遍历所有位置,统计secret[i] == guess[i]的数量。

对于弱匹配,需要处理剩余的数字(排除已匹配的强匹配位置)。对于每个数值vvv,它在秘密代码中剩余的个数为count_secret[v],在猜测代码中剩余的个数为count_guess[v]。弱匹配数为所有vvvmin(count_secret[v], count_guess[v])之和。

示例说明

以第一个示例的第一组数据为例:

  • 秘密代码:1 3 5 5
  • 猜测代码:1 1 2 3

强匹配:位置111都是111,所以strong = 1

剩余数字

  • 秘密剩余:3, 5, 5
  • 猜测剩余:1, 2, 3

统计频率:

数值秘密剩余次数猜测剩余次数min
1010
2010
3111
5200

weak = 1

提示:(1,1)


参考代码

// Master-Mind Hints// UVa ID: 340// Verdict: Accepted// Submission Date: 2016-06-27// UVa Run Time: 0.000s//// 版权所有(C)2016,邱秋。metaphysis # yeah dot net#include<bits/stdc++.h>usingnamespacestd;intmain(intargc,char*argv[]){intsecret[1100],guess[1100],n,cases=0;while(cin>>n,n){// 读取秘密代码for(inti=1;i<=n;i++)cin>>secret[i];cout<<"Game "<<++cases<<":"<<endl;// 处理猜测while(true){intstrong=0;// 统计强匹配,同时收集未匹配的数字频率map<int,int>S,G;for(inti=1;i<=n;i++){cin>>guess[i];if(secret[i]==guess[i])strong++;else{S[secret[i]]++;G[guess[i]]++;}}// 猜测结束标志:第一个数字为 0if(guess[1]==0)break;// 计算弱匹配intweak=0;for(auto&p:S)if(G.find(p.first)!=G.end())weak+=min(p.second,G[p.first]);cout<<" ("<<strong<<","<<weak<<")"<<endl;}}return0;}
http://www.gsyq.cn/news/1436687.html

相关文章:

  • Harness Engineering:Agent任务优先级调度算法
  • 200、运动控制算法总结与未来展望:AI与边缘计算
  • 抖音批量下载助手:3分钟掌握全自动视频保存的终极方案
  • GHelper终极指南:华硕笔记本性能优化与AMD降压超频完整教程
  • 199、运动控制中的行业应用:微纳运动控制(压电陶瓷)
  • ComfyUI ControlNet Aux完全指南:40+预处理节点故障排查与性能优化
  • 【权威发布】Gemini监测方案效果实测:某快消巨头ROI提升3.8倍的关键配置参数
  • 5步掌握AMD Ryzen调试神器:SMUDebugTool终极使用指南
  • Slidev深度探索:开发者如何用代码思维重塑演示文稿创作
  • Android进程内存安全机制深度剖析
  • Online-disk-direct-link-download-assistant:九大网盘直链解析终极指南
  • Beyond Compare 5授权密钥生成技术深度解析:从原理到实践的高级指南
  • 【图像融合】基于matlab扩展高斯差分和边缘保持的医学图像融合【含Matlab源码 15583期】
  • 【Gemini数据迁移黄金法则】:20年专家亲授5大避坑指南与实时迁移成功率提升92%的实操路径
  • PDF转Excel教程2026:微信小程序、免费工具、WPS详细步骤一看就会
  • LinkSwift:告别网盘限速的终极解决方案,轻松获取高速下载链接
  • 2026年PDF转Word怎样保留排版?5大方法+软件推荐详细教程
  • PL-2303旧版芯片Windows 10驱动终极解决方案:简单三步重获设备兼容性
  • 为什么你的Gemini日文输出总像“机器腔”?揭秘4层语用缺失(上下文承接、话题省略、语气颗粒度、文化隐喻)
  • 终极指南:在PowerPoint中优雅插入LaTeX公式的完整解决方案
  • Gemini剧情调试难如登天?——用这6类可视化诊断图谱,30分钟定位叙事逻辑断裂根因(含GDC 2024闭门分享原始数据)
  • 基于Arduino的自动宠物喂食器DIY教程:从硬件搭建到代码实现
  • 一个 Claude Code 插件,狂揽 20 万 Star!
  • 【Gemini应用商店描述黄金模板】:实测提升CTR 3.8倍的128字符精准表达法
  • Google Gemini账号注销全链路拆解(含GDPR合规验证+数据残留扫描实测报告)
  • IEEE GRSL投稿避坑指南:从Latex模板到校样缴费,一个遥感新手的真实踩坑记录
  • 13203黄大年茶思屋榜文132期 微网篇 第3题 微网构网能力AI故障自适应辨识定位与恢复技术
  • 国内十大背调公司排行:合规与效率双维度评测 - 速递信息
  • 智能黑苹果配置解决方案:OpCore-Simplify自动化EFI生成工具深度解析
  • 全自动评论系统预计很不费token