首页 > 试题广场 >

消消看

[编程题]消消看
  • 热度指数:1956 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
牛牛和牛妹最近迷上了新版消消看,该游戏规则如下:

在一个 串中,每一轮,玩家都可以选择一串连续相同字符进行消除,消除之后,左右两侧剩余的字符自动拼接,重新形成一个字符串。
例如:在 中,牛牛选择了第四个和第五个字符,它们连续且都是 ,满足消除条件,而当它们消除之后,左侧剩余的 和右侧剩余的 会拼接到一起,即:消除后剩余的 串为:
计分规则如下:消除了几个 就计几分。
直到消成空串时游戏结束。

对于一串全新的 串,由牛妹先手进行消除,两个人都以最优策略且以得分高为目标进行消除,请问最后,哪个人的得分会比较高?

输入描述:
本题为多组测试数据,第一行输入一个正整数 ,代表测试数据组数。

对于每组测试数据,一行输入一个长度不超过 串,代表初始形态。


输出描述:
对于每组测试数据,如果牛妹得分高,则在第一行输出 ,第二行输出一个分数代表牛妹比牛牛高几分;如果牛牛得分高,则在第一行输出 ,第二行输出一个分数代表牛牛比牛妹高几分;如果两个人分数相同,则只需要在一行输出 .
示例1

输入

2
111111
111011

输出

Niumei
6
Niumei
1

说明

第一个测试数据中,牛妹可以一次性消除所有字符,得到 \text 6 分,而牛牛 \text 0 分。
第二个测试数据中,牛妹先消除前三个字符,得到 \text 3 分,剩余字符为 \text {011},牛牛选择末尾两个字符消除,得到 \text 2 分,至此,字符只剩下 \text 0,牛妹消除掉这个字符,但由于该字符是 \text 0,所以不得分。总计牛妹得到 \text 3 分,牛牛得到 \text 2 分。
let i=0;
while(line=readline()){
  if(i!=0){
    var arr = line.split('0');
    let niumei = 0,niuniu=0;
    for(let j=1;j<arr.length;j++){
      if(arr[j]==''&&arr[j-1]==''){
        arr.splice(j,1);
        j--
      }
    }
    arr.sort((a,b)=>b-a);
    arr.forEach((item,index)=>{
      if(index%2){
        niuniu += item.length
      }else{
        niumei += item.length
      }
    })
    if(niumei>niuniu){
       print('Niumei');
       print(niumei-niuniu);
    }else if(niumei<niuniu){
      print('Niuniu');
       print(niuniu-niumei);
    }else{
       print('Draw');
    }
  }
  i++
}
发表于 2021-07-23 13:51:30 回复(0)