Codeforces #61 (div2) C "Petya and File System"
問題;http://codeforces.com/problemset/problem/66/C
あるファイルシステムにおけるファイルパスがいくつか与えられる.与えられたファイルパスに含まれるディレクトリ構成において,各ディレクトリ以下にあるディレクトリの数およびファイルの数が最大となるものを求める.
コード
import java.util.*; public class C_PetyaAndFileSystem { public static void main(String[] args) { Tree root = new Tree("/"); for (Scanner s = new Scanner(System.in); s.hasNext();) { String[] line = s.next().split("[:\\\\]+"); Tree n = root; for (int i = 0; i < line.length; ++i) { Tree t = new Tree(line[i]); if (!n.tree.contains(t)) { n.tree.add(t); } else { t = n.tree.get(n.tree.indexOf(t)); } n = t; } } int fmax = 0, dmax = 0; for(Tree t : root.tree){ for(Tree st : t.tree){ dmax = Math.max(dmax, st.getDirNum()-1); fmax = Math.max(fmax, st.getFileNum()); } } System.out.println(dmax+" "+fmax); } static class Tree { String name; List<Tree> tree; public Tree(String name) { this.name = name; tree = new ArrayList<Tree>(); } int getDirNum() { int c = name.matches(".*\\..*")?0:1; for (Tree t : tree) { c += t.getDirNum(); } return c; } int getFileNum() { int c = name.matches(".*\\..*")?1:0; for (Tree t : tree) { c += t.getFileNum(); } return c; } @Override public boolean equals(Object obj) { return name.equals(((Tree) obj).name); } } }