石头剪刀布 -2013编程之美全国测试赛 每日一练

Description:石头剪刀布是常见的猜拳游戏。石头胜剪刀,剪刀胜布,布胜石头。如果两个人出拳一样,则不分胜负。

一天,小A和小B正好在玩石头剪刀布。已知他们的出拳都是有规律的,比如:“石头-布-石头-剪刀-石头-布-石头-剪刀……”,就是以“石头-布-石头-剪刀”为周期的。请问,小A和小B比了N轮之后,谁赢了?

Input:

输入的第一行包含一个整数K,表示K组测试数据。
之后的每组测试数据包含三行。第一行包含三个整数:N,NA,NB,分别表示比了N轮,小A出拳的周期长度,小B出拳的周期长度。第二行包含NA个整数,表示小A出拳的规律,第三行包含NB个整数,表示小B出拳的规律。其中,0表示“石头”,2表示“剪刀”,5表示“布”。 

对于小数据,0 < K,N,NA,NB <= 10;对于大数据,0 < K,N,NA,NB <= 100; 

Output:

对于每组测试数据,输出一行。如果小A赢了,输出A;如果小B赢了,输出B;如果两人打平,输出draw。

Sample Input

2

10 3 4

0 2 5

0 5 0 2

5 3 3

2 0 5

0 2 5

 

 

 

 

 

 

 

 

Sample Output

A

draw

 

 

 

Hint:

对于第一组测试数据,猜拳过程为:

A:0 2 5 0 2 5 0 2 5 0

B:0 5 0 2 0 5 0 2 0 5

所以A赢了4轮,B赢了2轮,双方打平4轮,所以A赢了。

对于第二组测试数据,猜拳过程为:

A:2 0 5 2 0

B:0 2 5 0 2

所以A赢了2轮,B赢了2轮,双方打平1轮,所以最终打平了。

 

 

 

 

 

 

 

 

 

思路:假设A出拳的周期长度为na,B出拳的周期长度为nb,对于具体的出拳规律则使用两个数组arrayA[],arrayB[]来保存。

         在第i次出拳时,判断获胜方的方法:比较A出arrayA[i%na]、B出 arrayB[i%nb]的赢家,统计n次出拳后A总共赢的次数和B总共赢的次数,然后按要求输出即可。

优化方法:在以上方法中,总是需要比较n次才能算出赢家,这样在n比较大时可能存在着周期性的重复比较。如n = 40, na = 3,nb =4时,显然n从13到36的比较就很多余了,所以考虑优化这些多余的比较——聪明如你,肯定想到可以使用na和nb的最小公倍数来进行优化了吧~

此外,思考具体的计算过程是否是将最小公倍数周期内的比较同不满足整个周期(第37-40次)的比较相加?(PS:之所以将此项单独列出,是因为在同学的讨论中确实存在这样的误解,所以看仔细了哦~)

试想在前12次比较中B先赢4次,然后在5-12次中A、B平局2次、A赢6次,然后再第37-40次B赢4次,A总共赢6次,B总共赢8次,最终B取得胜利?

也许你会大声的说No!在前36次中A共赢18次,B共赢12次;在全40次的比较中A赢18次,B赢16次,结果是A赢。

下面上代码:

 1 #include<iostream>
 2 using namespace std;
 3 static int winA;
 4 static int winB;
 5 //求正整数a和b的最大公约数
 6 int divisor(int a, int b){
 7     int n = a>b ? a:b;
 8     if(a>b) a = b;
 9     else return a;
10     while(n%a !=0){
11         b = a;
12         a = n%a;
13         n = b;
14     }
15     return a;
16 }
17 
18 //求正整数a和b的最小公倍数
19 int multiple(int a, int b){
20     return a/divisor(a,b)*b;
21 }
22 
23 void cmp(int arrayA[],int na, int arrayB[], int nb,const int cal)
24 {
25     for(int i=0; i<cal; i++)
26     {
27         int a = i % na;
28         int b = i % nb;
29         //A赢
30         if((arrayA[a]==0 && arrayB[b]==2)||(arrayA[a]==2 && arrayB[b]==5)||(arrayA[a]==5 && arrayB[b]==0))
31         {
32             winA++;
33         }else if(arrayA[a] != arrayB[b])
34         {//B赢
35             winB++;
36         }
37     }
38 }
39 
40 int main()
41 {
42     int K, N, NA, NB, cal, i;
43     cin>>K;
44     while(K>0){
45         winA=0, winB=0;
46         cin>>N>>NA>>NB;
47         int* arrayA = (int *)malloc((NA+1)*sizeof(int));
48         int* arrayB = (int *)malloc((NB+1)*sizeof(int));
49         for(i=0; i<NA; i++)
50         {
51             cin>>arrayA[i];
52         }
53         for(i=0; i<NB; i++)
54         {
55             cin>>arrayB[i];
56         }
57         //通过最小公约数来实现最少的比较次数
58         cal = multiple(NA,NB);
59         if(N <= cal)
60             cmp(arrayA,NA,arrayB,NB,N);
61         else
62         {
63             cmp(arrayA,NA,arrayB,NB,cal);
64             int mod = N % cal, mul = N / cal;
65             winA *= mul;
66             winB *= mul;
67             if(mod)
68                 cmp(arrayA,NB,arrayB,NB,mod);
69         }
70         //输出计算结果
71         if(winA==winB)
72             cout<<"draw"<<endl;
73         else if(winA>winB)
74             cout<<"A"<<endl;
75         else
76             cout<<"B"<<endl;
77         //别忘了释放空间
78         free(arrayA);
79         free(arrayB);
80         K--;
81     }
82     return 0;
83 }

 

 

 

 

 

转载于:https://www.cnblogs.com/Allie0920/archive/2013/04/05/3001612.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/576034.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CentOS 6.4下PXE+Kickstart无人值守安装操作系统

原文出自http://http://www.cnblogs.com/mchina/p/centos-pxe-kickstart-auto-install-os.html 一、简介 1.1 什么是PXE PXE(Pre-boot Execution Environment&#xff0c;预启动执行环境)是由Intel公司开发的最新技术&#xff0c;工作于Client/Server的网络模式&#xff0c;支持…

CSS3属性box-shadow使用教程

CSS3的box-shadow属性可以让我们轻松实现图层阴影效果。我们来实战详解一下这个属性。 1. box-shadow属性的浏览器兼容性 先来看一个这个属性的浏览器兼容性: Opera: 不知道是从哪个版本开始支持的&#xff0c;我在发这篇文章测试的时候&#xff0c;正好更新了Opera到最新的10.…

实战Zabbix-Server数据库MySQL的libdata1文件过大

原文出自http://www.linuxidc.com/Linux/2014-12/110353.htm zabbix自动清理30天前的数据 zabbix属于一个细度化的监控工具&#xff0c;其入库数据随着细度的增加相应的入库数据量也会较大&#xff0c;当数据量到一定时候的时候其反映速度会比较慢&#xff0c;尽管其监控服务在…

RadioButtonList Enabled=false 文字背景

RadioButtonList有个属性RepeatLayout"Flow"&#xff0c;可以防止控件与前面的文本换行&#xff0c;但是&#xff0c;使用这个属性之后&#xff0c;有个奇怪的问题&#xff0c;RadioButtonList 在Enabledfalse时&#xff0c;文字成灰色&#xff0c;在打印时&#xff…

我的LAMP源码编译安装linux+Apache+mysql+php

httpd-2.2.17.tar.gz mysql-5.1.51.tar.gz php-5.2.17.tar.gz mysql的安装 #安装需要的库 yum -y install ncurses ncurses-devel #创建MySQL用户及用户组 groupadd mysql useradd -g mysql -s /sbin/nologin mysql cp /home/root/mysql-5.1.41.tar.gz /usr/local/src c…

编译php,ldap问题

今天在ubunte上安装php&#xff0c;ldap模块一直报错&#xff1a; configure: error: Cannot find ldap libraries in /usr/lib. 网上都说解决方法&#xff1a; cp -frp /usr/lib64/libldap* /usr/lib/ 结果我的/usr目录下 根本就没有lib64 还是找找libldap.so在哪吧 执行&…

mysql 5.7.13 安装配置方法图文教程(linux)

原文出自&#xff1a;http://www.jb51.net/article/87160.htm 1系统约定 安装文件下载目录&#xff1a;/data/software Mysql目录安装位置&#xff1a;/usr/local/mysql 数据库保存位置&#xff1a;/data/mysql 日志保存位置&#xff1a;/data/log/mysql 2下载mysql 在官网&am…

hasOwnProperty和isPrototypeOf

hasOwnProperty和isPrototypeOf hasOwnProperty&#xff1a;是用来判断一个对象是否有你给出名称的属性或对象,此方法无法检查该对象的原型链中是否具有该属性&#xff0c;该属性必须是对象本身的一个成员。 isPrototypeOf是用来判断要检查其原型链的对象是否存在于指定对象实…

linux下防火墙加白名单

在linux系统中安装yum install iptables-services 然后 vi /etc/sysconfig/iptables # Generated by iptables-save v1.4.7 on Sun Aug 28 12:14:02 2016*filter:INPUT ACCEPT [0:0]:FORWARD ACCEPT [0:0]:OUTPUT ACCEPT [0:0]-N whitelist-A whitelist -s 8.8.8.8 -j ACCEPT-…

Linux LVM硬盘管理及LVM扩容

原文出自http://www.cnblogs.com/gaojun/archive/2012/08/22/2650229.html 一、LVM简介 LVM是 Logical Volume Manager(逻辑卷管理)的简写&#xff0c;它由Heinz Mauelshagen在Linux 2.4内核上实现。LVM将一个或多个硬盘的分区在逻辑上集合&#xff0c;相当于一个大硬盘来使用&…

android系统框架()

Android系统框架介绍: 1.大体框架: -src目录: 主要是完成java代码的编写 -assets目录: 资源目录 -res目录: 存储图片,布局文件和字符串,菜单等文件 -bin目录: 输出文件夹,如生成的APK文件 -project.properties: 工程属性文件配置 -gen目录: 系统自动生成的源代码目录 R.java默认…

zabbix服务端远程执行命令

执行一些命令或者脚本就行了。 但zabbix远程执行命令需要客户端的zabbix用户要有sudo权限&#xff0c;zabbix的客户端要改的地方是配置文件里 EnableRomoteCommands1 然后要更改的是visudo里的给zabbix用户赋予权限 zabbix ALLNOPASSWD:ALL 然后把defaults requiretty注释掉。…

Keil 文本对不上格

初次使用keil3&#xff0c;光标总是定位不准&#xff0c;修改十分麻烦&#xff0c;google后解决问题&#xff0c;修改tools.ini如下(蓝色为加入项)&#xff1a;NAME"YGLenovo User", "a"EMAIL"a"ANSI1BOOK0"UV3\RELEASE_NOTES.HTM" (&…

Linux(CentOS6.5)下编译安装Nginx1.10.1

原文出自&#xff1a;http://www.cnblogs.com/comexchan/p/5815753.html Linux(CentOS6.5)下编译安装Nginx1.10.1 首先在特权账号&#xff08;root&#xff09;下安装编译时依赖项&#xff1a; yum install gcc gcc-c perl -y 首先以非特权账号&#xff08;本文以账号comex为例…

Java volatile关键字

Java 语言中的volatile变量可以被看作是一种“程度较轻的synchronized”&#xff0c;与synchronized相比&#xff0c;volatile变量所需的编码较少&#xff0c;并且运行时开销也较少&#xff0c;但是它所能实现的功能也仅是synchronized的一部分。本文介绍了几种有效使用volatil…

Zabbix 3.0 基础介绍 [一]

原文出自 http://www.abcdocker.com/abcdocker/1402 Zabbix 3.0 基础介绍 [上] zabbix 一、Zabbix介绍 zabbix 简介 Zabbix 是一个高度集成的网络监控解决方案&#xff0c;可以提供企业级的开源分布式监控解决方案&#xff0c;由一个国外的团队持续维护更新&#xff0c;软件可以…

DOM 节点的创建、删除、替换

只要在屏幕上托三个button按钮就可以了&#xff0c;下面就是程序运行时的界面&#xff1a; <head> <title></title> <script type"text/javascript"> function CreateNode() { var pnode document.createElement(p…

Zabbix 3.0 部署监控 [二]

原文出自 http://www.abcdocker.com/abcdocker/1453 Zabbix 3.0 部署监控 [二] zabbix 一、添加监控主机及设置 1.创建主机 Agent可以干一些SNMP无法干的事情&#xff0c;例如自定义监控项 snmp相关文章&#xff1a;http://www.abcdocker.com/abcdocker/1376 这里我们先不着…

oracle 一些基本概念

数据库就是一个相片底片 实例就是相纸 一个底片可以冲多个相纸&#xff0c;但一张相纸最多冲一个底片。 数据库可以由多个实例装载和打开&#xff0c;而实例可以在任何时间点装载和打开一个数据库。实际上&#xff0c;准确地讲&#xff0c;实例在其整个生存期中最多能装载和打开…

【leetcode】Integer to Roman

最近使用开发的过程中出现了一个小问题&#xff0c;顺便记录一下原因和方法-- Question &#xff1a; Given an integer, convert it to a roman numeral. Input is guaranteed to be within the range from 1 to 3999. Anwser 1 &#xff1a; class Solution { public:st…