fork(2) download
  1. import java.io.*;
  2. import java.util.*;
  3.  
  4. class Main{
  5. public static void main(String[] args) throws Exception {
  6. String inStr = ""
  7. + "A \\5000 C \\4000 E \\7000"
  8. +"\n"+"A \\90000 C \\6500 E \\8000"
  9. +"\n"+"A \\7500 C \\5500 E \\4000"
  10. +"\n"+"A \\6000 C \\3000 F \\2000"
  11. +"\n"+"A \\3500 C \\9000 F \\6500"
  12. +"\n"+"A \\4200 C \\4500 F \\3000"
  13. +"\n"+"A \\3500 D \\8000 E \\3000"
  14. +"\n"+"A \\40000 D \\9500 E \\4880"
  15. +"\n"+"B \\3500 C \\8000 E \\4500"
  16. +"\n"+"B \\4200 C \\9500 E \\5000"
  17. ;
  18. class Sum{
  19. public String nm;
  20. public int v;
  21. }
  22. List<Sum> adr = new ArrayList<Sum>(); //住所階層
  23. Sum sumAll = new Sum();
  24. for(String ln=br.readLine(); ln!=null; ln=br.readLine()){
  25. String[] ar = ln.split(" "); //1行を空白で分割
  26. for(int d=0; d*2+1<ar.length; d++){
  27. String nm = ar[d*2]; //エリア,県...
  28. int v = Integer.parseInt(ar[d*2+1].replace("\\","")); //金額
  29. sumAll.v += v;//全エリア合計
  30. Sum sum = d<adr.size() ? adr.get(d) : null;
  31. if(sum==null){
  32. sum = new Sum();
  33. sum.nm = nm;
  34. adr.add(sum);
  35. }
  36. //切り替わり判定
  37. if(sum.nm.equals(nm)){
  38. sum.v += v;
  39. }
  40. else{
  41. for(int d2=adr.size()-1; d<=d2; d2--){
  42. Sum sum2 = adr.get(d2);
  43. String suf = d2==0?"エリア":d2==1?"県":d2==2?"地区":"";
  44. System.out.print(""+sum2.nm+suf+"合計:"+sum2.v+" ");
  45. adr.remove(d2);
  46. }
  47. System.out.println();
  48. sum = new Sum();
  49. sum.nm = nm;
  50. sum.v = v;
  51. adr.add(sum);
  52. }
  53. for(int d2=d-1; 0<=d2; d2--){
  54. adr.get(d2).v += v;
  55. }
  56. }
  57. }
  58.  
  59. int d=0;
  60. for(int d2=adr.size()-1; d<=d2; d2--){
  61. Sum sum2 = adr.get(d2);
  62. String suf = d2==0?"エリア":d2==1?"県":d2==2?"地区":"";
  63. System.out.print(""+sum2.nm+suf+"合計:"+sum2.v+" ");
  64. adr.remove(d2);
  65. }
  66. System.out.println();
  67.  
  68. System.out.println("エリア合計:"+sumAll.v);
  69. }
  70. }
Success #stdin #stdout 0.03s 245632KB
stdin
Standard input is empty
stdout
E地区合計:19000 
F地区合計:11500 C県合計:63000 
E地区合計:7880 D県合計:25380 Aエリア合計:248080 
E地区合計:9500 C県合計:27000 Bエリア合計:34700 
エリア合計:282780