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

AcWing 1801:蹄子剪刀布 ← 模拟题

【题目来源】
https://www.acwing.com/problem/content/1803/

【题目描述】
你可能听说过“石头剪刀布”的游戏。
这个游戏在牛当中同样流行,它们称之为“蹄子剪刀布”。
游戏的规则非常简单,两头牛相互对抗,数到三之后各出一个表示蹄子,剪刀或布的手势。

蹄子赢剪刀,剪刀赢布,布赢蹄子
例如,第一头牛出“蹄子”手势,第二头牛出“布”手势,则第二头牛获胜。
如果两头牛出相同的手势,则算平局。
农夫约翰的两头奶牛正在进行 N 轮“蹄子剪刀布”对抗,他看的十分入迷。
不幸的是,虽然他可以看到奶牛正在做出三种不同类型的手势,但他却
无法分辨出哪一个代表“蹄子”,哪一个代表“布”以及哪一个代表“剪刀”
不知道这三种手势的具体含义的情况下,农夫约翰给这三种手势分配了编号 1,2,3
手势 1 可能代表“蹄子”,可能代表“剪刀”,也可能代表“布”,反正他傻傻分不清楚。
给出两头奶牛在 N 场比赛中所做出的具体手势对应的编号,请你判断第一头奶牛最多可能赢多少盘对抗。

【输入格式】
第一行包含整数 N。
接下来 N 行,每行包含两个整数(1 或 2 或 3),表示两头奶牛在一轮对抗中所出的手势对应的编号。

【输出格式】
输出第一头奶牛可能获胜的最大场次数。

【数据范围】
1≤N≤100

【输入样例】
5
1 2
2 2
1 3
1 1
3 2

【输出样例】
2

【样例解释】
此样例的一种解决方案是,1 表示剪刀,2 表示蹄子,3 表示布。
这样,第一头奶牛可以赢得 (1,3) 和 (3,2) 两场比赛。

【算法分析】
● 蹄子?剪刀?布?确实傻傻
分不清 ^_^

● 依据游戏规则,蹄子赢剪刀,剪刀赢布,布赢蹄子。据此,不失一般性,约定用编号1、编号2、编号3对游戏规则进行编码。由于编号1可能代表“蹄子”,可能代表“剪刀”,也可能代表“布”,编号2及编号3亦如此。故:
若用编号1表示“蹄子”,编号2表示“剪刀”,编号3表示“布”,则游戏规则编码为 1 2 3;
若用编号1表示“蹄子”,编号3表示“剪刀”,编号2表示“布”,则游戏规则编码为 1 3 2;
若用编号2表示“蹄子”,编号1表示“剪刀”,编号3表示“布”,则游戏规则编码为 2 1 3;
若用编号2表示“蹄子”,编号3表示“剪刀”,编号1表示“布”,则游戏规则编码为 2 3 1;
若用编号3表示“蹄子”,编号1表示“剪刀”,编号2表示“布”,则游戏规则编码为 3 1 2;
若用编号3表示“蹄子”,编号2表示“剪刀”,编号1表示“布”,则游戏规则编码为 3 2 1;
总上,可得6种游戏规则编码,即 1 2 3、1 3 2、2 1 3、2 3 1、3 1 2、3 2 1。

● 显然,上述6种游戏规则编码,对应以下6种赢的陈述:
1 2 3 → 1 赢 2,2 赢 3,3 赢 1
1 3 2 → 1 赢 3,3 赢 2,2 赢 1
2 1 3 → 2 赢 1,1 赢 3,3 赢 2

2 3 1 → 2 赢 3,3 赢 1,1 赢 2
3 1 2 → 3 赢 1,1 赢 2,2 赢 3

3 2 1 → 3 赢 2,2 赢 1,1 赢 3
不过,在利用下图可视化后,发现6种赢的陈述有同构的情形,本质上对应两种情况。

● 两种情况
对于上图左上而言,对应
1 3 2、2 1 3、3 2 1,即 1 赢 3,2 赢 1,3 赢 2。
也就是
第一头牛出的手势编号值与第二头牛出的手势编号值之差为 -2 和 1 时获胜
对于上图左下而言,对应
1 2 3、2 3 1、3 1 2,即 1 赢 2,2 赢 3,3 赢 1。
也就是
第一头牛出的手势编号值与第二头牛出的手势编号值之差为 -1 和 2 时获胜
显然,比较两种情况,较大的就是第一头牛赢的最大次数。若二牛出的手势编号值相同,则平局,无需考虑。

【算法代码】

#include <bits/stdc++.h>
using namespace std;int fi,se;int main() {int n;cin>>n;for(int i=1; i<=n; i++) {int x,y;cin>>x>>y;if((x-y)==-2 || (x-y)==1) fi++;if((x-y)==-1 || (x-y)==2) se++;}cout<<max(fi,se)<<endl;return 0;
}/*
in:
40
1 3
3 1
3 2
3 3
1 2
3 3
3 1
1 1
3 2
1 2
3 1
2 3
1 3
3 2
2 3
3 3
3 2
2 2
2 3
2 1
3 3
1 1
2 3
2 1
3 2
2 3
3 3
2 1
2 3
2 3
2 1
3 3
1 1
1 1
2 3
2 2
3 3
2 3
2 2
1 1out:
14
*/




【参考文献】
https://blog.csdn.net/qq_50677040/article/details/122737418
https://www.acwing.com/solution/content/88041/
https://www.acwing.com/problem/content/solution/1803/1/
https://www.acwing.com/solution/content/87164/
https://www.acwing.com/video/3693/






 

相关文章:

  • 「51媒体」活动会议,展览展会,直播曝光的一种方法
  • Eclipse 工作空间:深入解析与高效使用
  • rk3568 Android 11在系统怎样执行命令获取SN号
  • C语言入门系列:特殊的main函数和exit函数
  • pandas plot函数:数据可视化的快捷通道
  • 【java】写一个发送邮箱的样例
  • 点击旋转箭头样式
  • Java宝藏实验资源库(2)字节流
  • ios CCLanguage.m
  • VMware ESXi 8.0U2c macOS Unlocker OEM BIOS Huawei (华为) FusionServer 定制版
  • 3D开发工具HOOPS为BIM应用提供支持:复杂大模型实现Web端轻量化!
  • 【Android面试八股文】Kotlin内置标准函数also的原理是什么?
  • Java学习 - 网络静态路由与动态路由 讲解
  • Ubuntu 24.04安装zabbix7.0.0图形中文乱码
  • MinIO 网络与覆盖网络
  • SegmentFault for Android 3.0 发布
  • Dubbo 整合 Pinpoint 做分布式服务请求跟踪
  • fetch 从初识到应用
  • go append函数以及写入
  • Java|序列化异常StreamCorruptedException的解决方法
  • java多线程
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • JS专题之继承
  • Laravel 实践之路: 数据库迁移与数据填充
  • LeetCode刷题——29. Divide Two Integers(Part 1靠自己)
  • Python学习之路13-记分
  • SOFAMosn配置模型
  • tensorflow学习笔记3——MNIST应用篇
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 记录:CentOS7.2配置LNMP环境记录
  • 如何设计一个比特币钱包服务
  • 推荐一个React的管理后台框架
  • 小程序开发之路(一)
  • 学习使用ExpressJS 4.0中的新Router
  • ​​​【收录 Hello 算法】9.4 小结
  • ​ssh-keyscan命令--Linux命令应用大词典729个命令解读
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • (DenseNet)Densely Connected Convolutional Networks--Gao Huang
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (二)【Jmeter】专栏实战项目靶场drupal部署
  • (二)换源+apt-get基础配置+搜狗拼音
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (三)终结任务
  • (四)linux文件内容查看
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (转)关于pipe()的详细解析
  • .bat批处理(五):遍历指定目录下资源文件并更新
  • .net core 源码_ASP.NET Core之Identity源码学习
  • .NET/C# 在 64 位进程中读取 32 位进程重定向后的注册表
  • .NET技术成长路线架构图
  • /etc/sudoers (root权限管理)
  • /proc/vmstat 详解
  • @font-face 用字体画图标
  • @Import注解详解
  • [<事务专题>]