在一个
例如:在
计分规则如下:消除了几个
直到消成空串时游戏结束。
对于一串全新的
本题为多组测试数据,第一行输入一个正整数,代表测试数据组数。
对于每组测试数据,一行输入一个长度不超过的
串,代表初始形态。
对于每组测试数据,如果牛妹得分高,则在第一行输出,第二行输出一个分数代表牛妹比牛牛高几分;如果牛牛得分高,则在第一行输出
,第二行输出一个分数代表牛牛比牛妹高几分;如果两个人分数相同,则只需要在一行输出
.
2 111111 111011
Niumei 6 Niumei 1
第一个测试数据中,牛妹可以一次性消除所有字符,得到分,而牛牛
分。
第二个测试数据中,牛妹先消除前三个字符,得到分,剩余字符为
,牛牛选择末尾两个字符消除,得到
分,至此,字符只剩下
,牛妹消除掉这个字符,但由于该字符是
,所以不得分。总计牛妹得到
分,牛牛得到
分。
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
int size = scan.nextInt();
String[] strings = new String[size];
for(int i = 0; i < size; i++){
strings[i] = scan.next();
}
for(int i = 0; i < size; i++){
solve((strings[i]));
}
}
//由牛妹先手进行消除,两个人都以最优策略且以得分高为目标进行消除
//最优策略且得分最高 说明 有 1 就不会消 0, 然后消 目前最长的 1串,
//有 1 消除 0,那就是给对手送分
public static void solve(String nums){
String[] strs = nums.split("0");
List<Integer> lens = new ArrayList();
for(String str : strs){
if(str.length() > 0 && str.charAt(0) == '1'){
lens.add(str.length());
}
}
Collections.sort(lens);
int sum = 0; //最后求的 差值
int add = 1;
for(int i = lens.size()-1; i >= 0; i--){
sum += lens.get(i)*add;
add *= -1;
}
if(sum > 0){
System.out.println("Niumei");
System.out.println(sum);
}
else if(sum < 0){
System.out.println("Niuniu");
System.out.println(-1 * sum);
} else{
System.out.println("Draw");
}
}
} public static void main(String[] args) {
Scanner input =new Scanner(System.in);
System.out.println("输入测试数据的行数");
int count = input.nextInt();
String[] strings = new String[count];
for (int i = 0; i <count ; i++) {
System.out.println("输入测试数据");
strings[i] = input.next();
}
for (int i = 0; i <count ; i++) {
String str = strings[i];
int meiCount = 0;
int geCount = 0;
int num = 0;
while (true){
char[] chars = str.toCharArray();
int strLenth = str.length();
int maxCount = 0;
int start = 0;
int end = 0;
for (int j = 0; j <chars.length ; j++) {
int maxJCount = 0;
char c = chars[j];
int q = j;
while (true){
q++;
if (q<str.length()){
char c1 = str.charAt(q);
if (c==c1){
maxJCount++;
if (maxCount<maxJCount){
maxCount = maxJCount;
start = j;
end = q;
}
}else{
break;
}
}else{
break;
}
}
}
if (maxCount>0){
maxCount++;
StringBuilder stringBuilder = new StringBuilder(str);
stringBuilder.delete(start,end+1);
str = stringBuilder.toString();
}
if (strLenth == str.length()){
break;
}
if (num%2==0){
meiCount += maxCount;
}else{
geCount += maxCount;
}
num++;
}
if (meiCount>geCount){
System.out.println("Niumei");
System.out.println(meiCount-geCount);
}else if (meiCount<geCount){
System.out.println("Niuniu");
System.out.println(geCount-meiCount);
}else{
System.out.println("Draw");
}
}
}