zoukankan      html  css  js  c++  java
  • Wannafly挑战赛24-A-石子游戏--【思维题】

    链接:https://www.nowcoder.com/acm/contest/186/A
    来源:牛客网
    
    石子游戏
    时间限制:C/C++ 1秒,其他语言2秒
    空间限制:C/C++ 262144K,其他语言524288K
    64bit IO Format: %lld
    题目描述 
    Alice和Bob在玩游戏,他们面前有n堆石子,对于这些石子他们可以轮流进行一些操作,不能进行下去的人则输掉这局游戏。
    可以进行两种操作:
    1. 把石子数为奇数的一堆石子分为两堆正整数个石子
    2. 把两堆石子数为偶数的石子合并为一堆
    两人都足够聪明,会按照最优策略操作。现在Alice想知道自己先手,谁能最后赢得比赛。
    输入描述:
    第一行一个正整数n。(1<=n<=104)
    接下来第二行n个正整数表示每堆石子的数量。每堆石子不超过105个。
    输出描述:
    Alice或者Bob,表示谁能最后赢得游戏。
    示例1
    输入
    
    复制
    3
    3 2 2
    输出
    
    复制
    Alice
    说明
    
    Alice只要现将两个石子数量为2的堆合并为一堆4个石子,Bob就只能把3分为两堆1和2,接下来Alice只要将2和4合并,Bob输掉了这局游戏。

    思路:

      Alice和Bob在玩游戏,他们面前有n堆石子,对于这些石子他们可以轮流进行一些操作,不能进行下去的人则输掉这局游戏。
      可以进行两种操作:
      1. 把石子数为奇数的一堆石子分为两堆正整数个石子
      2. 把两堆石子数为偶数的石子合并为一堆
      两人都足够聪明,会按照最优策略操作。现在Alice想知道自己先手,谁能最后赢得比赛。

      1、全部为1时,后手必胜,因为先手根本没有办法可走!同样1也是可以忽略掉的,根据上面的规则可知1也是可以忽略掉的。

      2、剔除1后,举例:5可以拆分成2和3(一步),同样也可以拆成1和4(一步)——然后1和4一直变化总共到不能变化为止是三步,先手面对5时肯定是先手必胜局!

      3、本题数据可能不是很严谨,看了一些题解发现了一些问题!例如“4 4 4 4”是先手必胜局,“4 4 4”是先手必败局!

      4、我的想法是统计大于1的奇数的个数,没发现一次从cnt1++,cnt2++;然后是发现一个偶数cnt2++;若((cnt1+cnt2-1)%2==1 )先手必胜,反之必败。

     1 #include <iostream>
     2 #include<stdio.h>
     3 #include<string.h>
     4 #include<algorithm>
     5 #include<math.h>
     6 #include<string>
     7 #include<map>
     8 #include<time.h>
     9 #include<vector>
    10 #define ull unsigned long long
    11 using namespace std;
    12 #define inf 0x3f3f3f3f
    13 #define ll long long
    14 #define mem(a,b) memset(a,b,sizeof(a))
    15 const int N=107;
    16 int a[20005];
    17 
    18 int main(){
    19     int n;
    20 
    21     while(scanf("%d",&n)!=EOF){
    22 
    23         int x,cnt1=0,cnt2=0;
    24         for(int i=0;i<n;i++){
    25             scanf("%d",&x);
    26             if(x%2==0)
    27                 cnt2++;
    28             else if(x>1&&x%2!=0)
    29                 cnt1++,cnt2++;
    30         }
    31 
    32         if((cnt1+cnt2-1)%2==1 )
    33             printf("Alice
    ");
    34         else
    35             printf("Bob
    ");
    36     }
    37 
    38     return 0;
    39 }
    View Code
  • 相关阅读:
    springmvc实现文件上传
    springmvc乱码及restful
    springmvc数据的处理
    springmvc跳转方式
    controller配置
    SpringMVC Annotation
    SpringMVC基本包
    第一章 面向对象软件工程与UML
    Oracle数据库之PL/SQL程序基础设计
    thinkphp5 给CSS JS 添加版本号
  • 原文地址:https://www.cnblogs.com/zhazhaacmer/p/9670984.html
Copyright © 2011-2022 走看看