第一个一个整数。
第二行字符串,表示小明的字符串。
第二行字符串,表示小王的字符串。
第二行字符串,表示小李的字符串。
输出一行一个字符串,表示游戏结果。
7 treasurehunt threefriends hiCodeforces
xiaowang
   var n = readline()
    // var Ming='treasurehunt'
    var Ming = readline()
    var mingObj = {}
    // var Wang='threefriends'
    var Wang = readline()
    var wangObj = {}
    // var Li='hiCodeforces'
    var Li = readline()
    var liObj = {}
    function setObj(str, obj) {
        for (var i = 0; i < str.length; i++) {
            if (!obj[str.charAt(i)]) {
                obj[str.charAt(i)] = 1
            } else {
                obj[str.charAt(i)]++
            }
        }
    }
    setObj(Ming, mingObj)
    setObj(Wang, wangObj)
    setObj(Li, liObj)
    var mingCount = 0
    var wangCount = 0
    var liCount = 0
    
    function findMax(n,str,count, obj) {
        for (var i in obj) {
            if (obj[i] > count) {
                count = obj[i] 
            }
        }
        if(n>str.length-count){
            count=str.length
        }
        // for(var i=0;i<n;i++){
        //     if(count<str.length){
        //         count++
        //     }else{
        //         count--
        //     }
        // }
        return count
    }
    mingCount=findMax(n,Ming,mingCount, mingObj)
    wangCount=findMax(n,Wang,wangCount, wangObj)
    liCount=findMax(n,Li,liCount, liObj)
    
    var max=Math.max(mingCount, wangCount, liCount)
    var arr = []
    arr.push(mingCount, wangCount, liCount)
    if (arr.indexOf(max) !== -1&&arr.indexOf(max)==arr.lastIndexOf(max)) {
        if (mingCount == max) {
            console.log("xiaoming");
        } else if (wangCount == max) {
            console.log("xiaowang");
        } else {
            console.log("xiaoli");
        }
    }else{
        console.log("draw");
    }
 这道题有点坑啊,它又说每轮必须改一个字母,然而当n的回合足够让字符串全部变成同一个字母的时候它就不用改了
                                                                                    import java.io.*;
import java.util.*;
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        String xiaoming = br.readLine();
        String xiaowang = br.readLine();
        String xiaoli = br.readLine();
        int modeMing = getMode(xiaoming);
        int modeWang = getMode(xiaowang);
        int modeLi = getMode(xiaoli);
        if((modeMing == modeWang && modeMing > modeLi) || (modeMing == modeLi && modeMing > modeWang) || (modeWang == modeLi && modeWang > modeMing)){
            System.out.println("draw");     // 存在平局
        }else{
            if(modeMing > Math.max(modeWang, modeLi)){
                System.out.println("xiaoming");
            }else if(modeWang > Math.max(modeMing, modeLi)) {
                System.out.println("xiaowang");
            }else{
                System.out.println("xiaoli");
            }
        }
    }
    
    private static int getMode(String str) {
        int mode = 0;
        HashMap<Character, Integer> termFreq = new HashMap<>();
        for(int i = 0; i < str.length(); i++){
            char c = str.charAt(i);
            termFreq.put(c, termFreq.getOrDefault(c, 0) + 1);
            mode = Math.max(mode, termFreq.get(c));
        }
        return mode;
    }
} from collections import Counter NAMES = ["xiaoming", "xiaowang", "xiaoli"] class Solution: def method(self,turns:int, names: list): if turns >= len(names[0]): return 'draw' max_ch = [0, 0, 0] for i in range(3): name = Counter(names[i]) for k, freq in name.items(): max_ch[i] = max(max_ch[i], freq) for i in range(3): remain = len(names[0]) - max_ch[i] max_ch[i] += min(turns, remain) ans = max(max_ch) count = 0 index = 0 for i in range(3): if ans == max_ch[i]: index = i count += 1 return NAMES[index] if count == 1 else 'draw' if __name__ == '__main__': turns = int(input()) xiaoming = input() xiaowang = input() xiaoli= input() names = [xiaoming, xiaowang, xiaoli] solution = Solution() res = solution.method(turns, names) print(res)
let n = readline();
let hashMap = {
    xiaoming: readline(),
    xiaowang: readline(),
    xiaoli:readline()
}
function getMax(str){
    let xm = {};
    [...str].forEach(t => {
        if(!xm[t]) xm[t] = 1;
        else xm[t]++;
    });
    let max = 0, char;
    for(let k in xm){
        if(xm[k] > max){
            max = xm[k];
            char = k;
        }else continue;
    }
    return {max, char};
}
let {xiaoming, xiaowang, xiaoli} = hashMap;
let length = xiaoming.length;
let {max:xmMax,char:xmChar} = getMax(xiaoming),
    {max:xwMax,char:xwChar} = getMax(xiaowang),
    {max:xlMax,char:xlChar} = getMax(xiaoli);
function seak(){
    for(let i =0; i< n; i++){
        // length - xmMax 为可交换次数5 - 3 = 2
        
        if(xmChar == xwChar || xwChar == xlChar || xmChar == xlChar){
            console.log('draw');
            return;
        }
        if(xmChar.length < length){
            xmChar += xmChar.substring(0, 1);
            xmMax++;
        }
        if(xwChar.length < length){   
            xwChar += xwChar.substring(0, 1);
            xwMax++;
        }
        if(xlChar.length < length){    
            xlChar += xlChar.substring(0, 1);
            xlMax++;
        }
    }
    if(xmMax > xwMax && xmMax > xlMax){
        console.log('xiaoming')
    }else if(xwMax > xmMax && xwMax > xlMax){
        console.log('xiaowang')
    }else if(xlMax > xwMax && xlMax > xmMax){
        console.log('xiaoli')
    }else{
        console.log('draw');
    }
}
seak(); 实在没看懂,只通过了36例,总共60例
                                                                                    
//直接排个序就行
import java.util.*;
public class Main {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            int n = Integer.parseInt(sc.nextLine());
            String as = sc.nextLine();
            int a = getMax(as);
            int b = getMax(sc.nextLine());
            int c = getMax(sc.nextLine());
            int len = as.length();
            sc.close();
            //找到最大的两个数
            int[] nums = {a, b, c};
            Arrays.sort(nums);
            int max = nums[2], second = nums[1];
            if (max == second || len - second <= n) {
                System.out.println("draw");
            } else {
                if (max == a) {
                    System.out.println("xiaoming");
                } else if (max == b) {
                    System.out.println("xiaowang");
                } else {
                    System.out.println("xiaoli");
                }
            }
        }
        public static int getMax(String s) {
            char[] cs = s.toCharArray();
            Map<Character, Integer> map = new HashMap<>();
            int max = 0;
            for (int i = 0; i < cs.length; i++) {
                int t = map.getOrDefault(cs[i], 0);
                map.put(cs[i], t + 1);
                max = Math.max(t + 1, max);
            }
            return max;
        }
    } //ACM模式
#include<bits/stdc++.h>
using namespace std;
int main(){
    int n;
    string s1,s2,s3;
    cin>>n>>s1>>s2>>s3;
    unordered_map<char,int> v1,v2,v3;
    int l1,l2,l3;
    l1=l2=l3=0;
    int m=s1.size();
    for(int i=0;i<m;i++){
        v1[s1[i]]++;
        v2[s2[i]]++;
        v3[s3[i]]++;
    }
    for(auto [k,v]:v1){
        int t=v+n;
        if(t<m) l1=max(l1,t);
        else if((t-m)%2==0) l1=max(l1,m);
        else l1=max(l1,m-1);
    }
     for(auto [k,v]:v2){
        int t=v+n;
        if(t<m) l2=max(l2,t);
        else if((t-m)%2==0) l2=max(l2,m);
        else l2=max(l2,m-1);
    }
    for(auto [k,v]:v3){
        int t=v+n;
        if(t<m) l3=max(l3,t);
        else if((t-m)%2==0) l3=max(l3,m);
        else l3=max(l3,m-1);
    }
    
    if(l1>l2&&l1>l3) cout<<"xiaoming"<<endl;
    else if(l2>l1&&l2>l3) cout<<"xiaowang"<<endl;
    else if(l3>l1&&l3>l2) cout<<"xiaoli"<<endl;
    else cout<<"draw"<<endl;
     return 0;
} 理清题意很重要,博弈论,只需要对最大哈希值进行增加。没有溢出,maxlen+n;如果溢出,奇数为字符串长度-1,偶数为字符串长度。import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class Main{
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int n = scanner.nextInt();
		String m = scanner.next();
		String w = scanner.next();
		String l = scanner.next();
		int m_max = getCount(m,n);
		int w_max = getCount(w,n);
		int l_max = getCount(l,n);
		if(m_max>w_max) {
			if(m_max>l_max) {
				System.out.println("xiaoming");
			}else if(m_max==l_max){
				System.out.println("draw");
				
			}else {
				System.out.println("xiaoli");
			}
			
		}else if(m_max==w_max) {
			if(m_max<l_max) {
				System.out.println("xiaoli");
			}else {
				System.out.println("draw");
			}
		}else {
			if(w_max>l_max) {
				System.out.println("xiaowang");
			}else if(w_max==l_max){
				System.out.println("draw");
				
			}else{
				System.out.println("xiaoli");
			}
			
		}
		
	
		
	}
	public static int getCount(String s,int n) {
		int max = 0;
		int len = s.length();
		Map<Character, Integer> map = new HashMap<Character, Integer>();
		for(int i = 0;i<len;i++) {
			if(map.containsKey(s.charAt(i))) {
				map.put(s.charAt(i),map.get(s.charAt(i))+1);
			}else {
				map.put(s.charAt(i), 1);
			}
			max = map.get(s.charAt(i))>max?map.get(s.charAt(i)):max;
			
		}
		max = max==len?len:(max+n>len?len:max+n);//关键代码
		
		return max;
	}
} #include<bits/stdc++.h>
using namespace std;
int score(string& s, int n) {
    unordered_map<char, int> M;
    for (auto c : s) M[c]++;
    int res = 0, m = s.size();
    for (auto& it : M) {
        int t = it.second + n;  // 最多
        if (t < m) {  // 不可全变
            res = max(res, t);
        }
        else if ((t - m) % 2 == 0) {  // 可全变
            return m;
        }
        else {
            res = max(res, m - 1);
        }
    }
    return res;
}
int main() {
    int n;
    cin >> n;
    string s1, s2, s3;
    cin >> s1;
    cin >> s2;
    cin >> s3;
    int x1 = score(s1, n);
    int x2 = score(s2, n);
    int x3 = score(s3, n);
    if (x1 > x2 && x1 > x3) {
        cout << "xiaoming" << endl;
    }
    else if (x2 > x1 && x2 > x3) {
        cout << "xiaowang" << endl;
    }
    else if (x3 > x1 && x3 > x2) {
        cout << "xiaoli" << endl;
    }
    else {
        cout << "draw" << endl;
    }
} 统计每个字符的个数,计算n个回合最多出现多少个该字符,当可全变为该字符时,返回字符串长度即为得分,否则取最大。