JAVA-USACO无法解决-记录保留

JAVA-USACO无法解决-记录保留,java,algorithm,Java,Algorithm,问题出在这里 我找不到解决这个问题的有效方法。我想按字母顺序组织每组奶牛,这样比较起来就容易了。在那之后,我可以简单地找到模式。然而,我遇到的算法问题是,在每次输入中,呈现给我的奶牛群的数量是不同的。我本来打算把每组奶牛放在一根绳子上,但这显然行不通,因为每组的数量可能会有所不同。有没有更好的方法来解决这个问题的想法?你正朝着正确的方向前进。不过,您还可以更进一步—在按字母顺序对每个组进行排序后,按字典顺序对所有组进行排序。让我们举个例子: BESSIE ELSIE MATILDA FRAN B

问题出在这里


我找不到解决这个问题的有效方法。我想按字母顺序组织每组奶牛,这样比较起来就容易了。在那之后,我可以简单地找到模式。然而,我遇到的算法问题是,在每次输入中,呈现给我的奶牛群的数量是不同的。我本来打算把每组奶牛放在一根绳子上,但这显然行不通,因为每组的数量可能会有所不同。有没有更好的方法来解决这个问题的想法?

你正朝着正确的方向前进。不过,您还可以更进一步—在按字母顺序对每个组进行排序后,按字典顺序对所有组进行排序。让我们举个例子:

BESSIE ELSIE MATILDA
FRAN BESSIE INGRID
BESSIE ELSIE MATILDA
MATILDA INGRID FRAN
ELSIE BESSIE MATILDA
在您建议的第一步之后,这些将成为:

BESSIE ELSIE MATILDA
BESSIE FRAN INGRID
BESSIE ELSIE MATILDA
FRAN INGRID MATILDA
BESSIE ELSIE MATILDA
然后对整个组进行排序:

BESSIE ELSIE MATILDA
BESSIE ELSIE MATILDA
BESSIE ELSIE MATILDA
BESSIE FRAN INGRID
FRAN INGRID MATILDA
第二步可以通过考虑用于表示组的整个字符串来完成。在这个排序之后,这个问题可以用一个线性过程来解决。我把这个问题留给你们去解决


我建议的方法会奏效,因为投入相对较少,因此解决方案不会太慢。对于更大的约束,您应该在使用哈希对每个组中的名称进行排序后执行第二步。你也可以将这种方法应用到你的问题上,但它有点复杂。

这是我对这个问题的回答,我希望它能有所帮助,这是我在竞赛中想到的最好的解决方案,它通过了所有测试案例

import java.io.*;
import java.util.*;
public class records {

    public static void main(String[] args)throws IOException {
        BufferedReader bf = new BufferedReader(new FileReader("records.in"));
        PrintWriter pw = new PrintWriter(new File("records.out"));
        int n = Integer.parseInt(bf.readLine());
        Map<String, Integer> map = new HashMap<String, Integer>();

        for(int i = 1; i<=n ;i++){
            String str = bf.readLine();
            char[] chars = str.toCharArray();
            Arrays.sort(chars);
            String sorted = new String(chars);

            if(map.containsKey(sorted)){
                int count = map.get(sorted);
                map.put(sorted, count + 1);
            }else{
                map.put(sorted, 1);
            }
        }

        /*for (String name : map.keySet()) {
            System.out.println(name + ": " + map.get(name));
        }*/

        List<Integer> c = new ArrayList<Integer>(map.values());
        Collections.sort(c);
        pw.println(c.get(c.size() -1));
        pw.close();
    }
}

谢谢你的回答!但是,考虑到用于表示组的整个字符串,我对您的意思有点困惑。你的意思是我将把每一组奶牛都存储到一个字符串中吗?这种方法可以实现排序,但不必使用它。我不确定在Java中是否可以对数组进行开箱排序,但本质上这就是您需要做的。