URAL 1180. Stone Game (博弈 + 规律)[通俗易懂]

URAL 1180. Stone Game (博弈 + 规律)

大家好,又见面了,我是全栈君。

1180. Stone Game

Time limit: 1.0 second

Memory limit: 64 MB

Two Nikifors play a funny game. There is a heap of
N stones in front of them. Both Nikifors in turns take some stones from the heap. One may take any number of stones with the only condition that this number is a nonnegative integer power of 2 (e.g. 1, 2, 4, 8 etc.). Nikifor who takes the last stone wins.You are to write a program that determines winner assuming each Nikifor does its best.

Input

An input contains the only positive integer number
N (condition
N ≤ 10
250 holds).

Output

The first line should contain 1 in the case the first Nikifor wins and 2 in case the second one does. If the first Nikifor wins the second line should contain the minimal number of stones he should take at the first move in order to guarantee his victory.

Sample

input output
8
1
2

Problem Author: Dmitry Filimonenkov


Problem Source: Third USU personal programming contest, Ekaterinburg, Russia, February 16, 2002

解析:找规律。

考虑例如以下样例:
剩余石子的数量    first Nikifor
1                              win
2                              win
—- 依次选择1,2. 而且1 和 2是能够选择的。

3                              lose
—- 由于你选1或2的时候,另外一个人总能一次把剩下的取完。

4, 5                          win

—- 依次选择1,2,可以获胜。

6                              lose

7, 8                          win

…. 从上面的规律我们能够看出当 N mod 3 == 0 我们能确认first Nikifor一定能失败;否则的话。我们能选择的最小石子的数量 = N mod 3,此时first Nikifor获胜。

AC代码:

#include <bits/stdc++.h>
using namespace std;

int main(){
    int ans = 0;
    char c;
    while(scanf("%c", &c) && c != '\n') ans += c - '0';     //求个位数字之和以推断数字能否被3整除,数太大。直接存不下!

if(ans % 3 == 0) puts("2"); else printf("%d\n%d", 1, ans % 3); return 0;}

.

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/116181.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • http状态码详解

    http状态码详解

    2021年11月6日
    38
  • 安卓项目中so库选择(ndk abiFilters设置,armeabi,armeabi-v7a,arm64-v8a)[通俗易懂]

    安卓项目中so库选择(ndk abiFilters设置,armeabi,armeabi-v7a,arm64-v8a)[通俗易懂]背景Android系统本质是一个经过改造的Linux系统,so库是Linux系统上使用的共享库(类似windows上的dll)。最早,Android系统只支持ARMv5的CPU构架,随着Android系统的发展,又加入了ARMv7(2010),x86(2011),MIPS(2012),ARMv8,MIPS64和x86_64(2014)。每一种CPU构…

    2022年5月11日
    39
  • python中sqrt函数用法_Python sqrt() 函数

    python中sqrt函数用法_Python sqrt() 函数内容简介:sqrt()方法返回数字x的平方根。描述sqrt()方法返回数字x的平方根。语法以下是sqrt()方法的语法:importmathmath.sqrt(x)注意:sqrt()是不能直接访问的,需要导入math模块,通过静态对象调用该方法。参数x–数值表达式。返回值返回数字x的平方根。实例以下展示了使用sqrt()方法的实例:#!/usr/bin/pythonim…

    2022年5月30日
    51
  • JLink的JTag和SWD引脚定义及接线说明

    JLink的JTag和SWD引脚定义及接线说明日常我们用到的JTAG和SWD两种模式的接口如下:但是实际上接口是如下图所示箭头所示对接的:也就是说我们JTAG的19脚对应的是SWD的1脚。当你需要引线出来的时候JTAG的TDO13脚对应的就是SWD的SWDIO7JTAG的RTCK11脚对应的就是SWD的SWCLK9JTAG的N/C19脚对应的就是SWD的V…

    2022年5月20日
    216
  • linux内核 recvfrom,Linux系统调用– recv/recvfrom 函数详解

    linux内核 recvfrom,Linux系统调用– recv/recvfrom 函数详解Linux系统调用–recv/recvfrom函数详解功能描述:从套接字上接收一个消息。对于recvfrom,可同时应用于面向连接的和无连接的套接字。recv一般只用在面向连接的套接字,几乎等同于recvfrom,只要将recvfrom的第五个参数设置NULL。如果消息太大,无法完整存放在所提供的缓冲区,根据不同的套接字,多余的字节会丢弃。假如套接字上没有消息可以读取,除了套接字已被设置为非阻…

    2022年7月23日
    13
  • 建立任务,OSTaskCreate()源码解析

    建立任务,OSTaskCreate()源码解析想让uC/OS-Ⅱ管理用户的任务,用户必须要先建立任务。用户可以通过传递任务地址和其它参数到以下两个函数之一来建立任务:OSTaskCreate()或OSTaskCreateExt()。OSTas

    2022年7月3日
    25

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号