当前位置: 首页 > 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.jsqmd.com/news/925358/

相关文章:

  • 198、运动控制中的行业应用:软体机器人控制
  • 终极指南:如何永久保存微信聊天记录并生成年度情感报告
  • 别再只懂理论了!用C语言实战FIR滤波器设计:避坑指南与代码优化技巧
  • Harness Engineering:Agent任务优先级调度算法
  • 除了微信扫一扫,试试这款专业条码扫描APP:Scandit(附iOS/Android下载与使用体验)
  • 逆向工程实现PC端微信QQ防撤回功能的技术方案
  • 【Ragent】企业级 Agentic RAG 智能体:让 AI 落地从“调 API“变成“真工程“
  • 陕西全屋定制行业 GEO 优化科普:3 分钟看懂 AI 时代如何获客
  • 别再死记硬背了!用Python实战拆解CS224W中的传统图特征:从节点中心性到Graphlet
  • 抖音批量下载助手:3分钟掌握全自动视频保存的终极方案
  • 有线耳机改造:焊接3.5mm母座实现可换线升级与维修
  • 200、运动控制算法总结与未来展望:AI与边缘计算
  • 如何永久保存微信聊天记录:WeChatMsg本地化数据管理方案
  • 【Gemini 2.5重磅升级全解读】:谷歌AI团队亲授5大核心突破与企业落地避坑指南
  • 【Gemini广告创意策划黄金法则】:20年AI营销专家亲授5大不可绕过的策略盲区
  • 5个实战场景:如何用F3D命令行打造专业级3D可视化工作流
  • GHelper终极指南:华硕笔记本性能优化与AMD降压超频完整教程
  • 学术合规性如何?8款AI写作辅助网站势力榜,毕业季救星!
  • 基于BiTCN-Attention的时间序列预测:从数据预处理到模型实现,MATLAB 代码
  • 199、运动控制中的行业应用:微纳运动控制(压电陶瓷)
  • Arduino伺服电机控制:制作会呼吸的桌面互动风车
  • 【仅限头部SaaS团队使用的Gemini文案Prompt库】:12套已验证通过的行业专属指令模板(含金融/电商/本地生活)
  • 2026湖州AI搜索优化服务商深度评测 - 品牌报告
  • AI服务退款新规落地首周深度复盘(Gemini退款成功率下降18%?真相在这里)
  • 【权威发布】Gemini监测方案效果实测:某快消巨头ROI提升3.8倍的关键配置参数
  • ComfyUI ControlNet Aux完全指南:40+预处理节点故障排查与性能优化
  • 基于Arduino的智能眼疲劳提醒器:从硬件搭建到软件编程全解析
  • 基于TCN结合Attention机制的时间序列预测:从数据预处理到模型评估,MATLAB 搭建
  • Python集合与冻结集合高级
  • 5分钟快速上手:ChartGPT AI图表生成工具完全指南