zoukankan      html  css  js  c++  java
  • 数据结构_中国大学MOOC-数据结构-4.3

    1题目:Huffman Codes

    http://www.patest.cn/contests/mooc-ds/04-3

      1 import java.io.BufferedReader;
      2 import java.io.IOException;
      3 import java.io.InputStreamReader;
      4 import java.util.ArrayList;
      5 import java.util.Collections;
      6 import java.util.HashMap;
      7 import java.util.List;
      8 import java.util.Map;
      9 import java.util.PriorityQueue;
     10 import java.util.Queue;
     11 
     12 public class Main {
     13     public static void main(String args[]) throws NumberFormatException,
     14             IOException {
     15         BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
     16         int N = Integer.parseInt(in.readLine()); // 存储键值对的个数
     17         String[] line = in.readLine().split(" ");
     18         Map<String, Integer> map = new HashMap<String, Integer>();// 存储A 1 B 1 C
     19                                                                     // 1 D 3 E 3
     20                                                                     // F 6 G
     21                                                                     // 6的键值对
     22         Queue<Integer> priorityQueue = new PriorityQueue<Integer>(N);// 使用优先级列队模拟堆
     23 
     24         for (int i = 0; i < N; i++) {
     25             map.put(line[2 * i], Integer.parseInt(line[2 * i + 1]));
     26             priorityQueue.add(Integer.parseInt(line[2 * i + 1]));
     27         }
     28         /* 计算Wpl的值 */
     29         int Wpl = 0;
     30         while (!priorityQueue.isEmpty()) {
     31             int top1 = priorityQueue.poll();
     32             if (!priorityQueue.isEmpty()) {
     33                 int top2 = priorityQueue.poll();
     34                 int temp = top1 + top2;
     35                 priorityQueue.add(temp);
     36                 Wpl += temp;
     37             }
     38         }
     39         // 输入测试数据
     40 
     41         int CheckN = Integer.parseInt(in.readLine());
     42         for (int i = 0; i < CheckN; i++) {
     43             Test[] test = new Test[N];
     44             int wpl2 = 0;
     45             String[] read;
     46             List<Test> array = new ArrayList<Test>();
     47             for (int j = 0; j < N; j++) {
     48                 read = in.readLine().split(" ");
     49                 test[j] = new Test();
     50                 test[j].a = read[0];
     51                 test[j].s = read[1];
     52                 array.add(test[j]);
     53                 wpl2 += read[1].length() * map.get(read[0]);
     54             }
     55             Collections.sort(array);
     56             if (Wpl != wpl2) {
     57                 System.out.println("No");
     58                 continue;
     59             } else {
     60                 boolean flag = true;
     61                 for (int n = 0; n < N - 1; n++) {
     62                     String tmp = array.get(n).s;
     63                     for (int m = n + 1; m < N; m++) {
     64                         if (array.get(m).s.substring(0, tmp.length()).equals(
     65                                 tmp)) {
     66                             flag = false;
     67                         }
     68                     }
     69                 }
     70                 if (flag) {
     71                     System.out.println("Yes");
     72                 } else {
     73                     System.out.println("No");
     74                 }
     75             }
     76 
     77         }
     78 
     79     }
     80 
     81 }
     82 
     83 class Test implements Comparable {
     84     String a;
     85     String s;
     86 
     87     public String getA() {
     88         return a;
     89     }
     90 
     91     public void setA(String a) {
     92         this.a = a;
     93     }
     94 
     95     public String getS() {
     96         return s;
     97     }
     98 
     99     public void setS(String s) {
    100         this.s = s;
    101     }
    102 
    103     @Override
    104     public int compareTo(Object o) {
    105         // TODO Auto-generated method stub
    106         return this.s.length() - ((Test) o).s.length();
    107     }
    108 }
  • 相关阅读:
    Joda-Time 简介
    SimpleDateFormat 的线程安全问题
    SimpleDateFormat 的线程安全问题
    自定义类加载器
    自定义类加载器
    javap与 i++,++i
    javap与 i++,++i
    I/O模型
    I/O模型
    逻辑运算符(上) ---没用
  • 原文地址:https://www.cnblogs.com/keitho00/p/4226335.html
Copyright © 2011-2022 走看看