POJ1013

来源:互联网 发布:ubuntu系统安装教程 编辑:程序博客网 时间:2024/04/30 14:14
  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStreamReader;
  4. public class Main {
  5.     public static void main(String[] args) throws NumberFormatException,
  6.             IOException {
  7.         BufferedReader read = new BufferedReader(new InputStreamReader(
  8.                 System.in));
  9.         int t = Integer.parseInt(read.readLine());
  10.         String[][] bijiao;
  11.         boolean[] coin;
  12.         int[] hl;
  13.         int fault;
  14.         for (int i = 0; i < t; i++) {
  15.             fault = -1;
  16.             bijiao = new String[3][];
  17.             hl = new int[12];
  18.             coin = new boolean[12];
  19.             for (int j = 0; j < 3; j++) {
  20.                 bijiao[j] = read.readLine().split(" ");
  21.                 if (bijiao[j][2].equals("even")) {
  22.                     for (int k = 0; k < bijiao[j][0].length(); k++) {
  23.                         coin[bijiao[j][0].charAt(k) - 'A'] = true;
  24.                         coin[bijiao[j][1].charAt(k) - 'A'] = true;
  25.                     }
  26.                 } else {
  27.                     for (int k = 0; k < 12; k++) {
  28.                         if (bijiao[j][0].indexOf((char) ('A' + k)) == -1
  29.                                 && bijiao[j][1].indexOf((char) ('A' + k)) == -1) {
  30.                             coin[k] = true;
  31.                         }
  32.                     }
  33.                 }
  34.             }
  35.             for (int j = 0; j < 3; j++) {
  36.                 if (bijiao[j][2].equals("up")) {
  37.                     for (int k = 0; k < bijiao[j][0].length(); k++) {
  38.                         if (hl[bijiao[j][0].charAt(k) - 'A'] != 1) {
  39.                             hl[bijiao[j][0].charAt(k) - 'A'] = -1;
  40.                         } else {
  41.                             coin[bijiao[j][0].charAt(k) - 'A'] = true;
  42.                         }
  43.                         if (hl[bijiao[j][1].charAt(k) - 'A'] != -1) {
  44.                             hl[bijiao[j][1].charAt(k) - 'A'] = 1;
  45.                         } else {
  46.                             coin[bijiao[j][1].charAt(k) - 'A'] = true;
  47.                         }
  48.                     }
  49.                 } else if (bijiao[j][2].equals("down")) {
  50.                     for (int k = 0; k < bijiao[j][0].length(); k++) {
  51.                         if (hl[bijiao[j][0].charAt(k) - 'A'] != -1) {
  52.                             hl[bijiao[j][0].charAt(k) - 'A'] = 1;
  53.                         } else {
  54.                             coin[bijiao[j][0].charAt(k) - 'A'] = true;
  55.                         }
  56.                         if (hl[bijiao[j][1].charAt(k) - 'A'] != 1) {
  57.                             hl[bijiao[j][1].charAt(k) - 'A'] = -1;
  58.                         } else {
  59.                             coin[bijiao[j][1].charAt(k) - 'A'] = true;
  60.                         }
  61.                     }
  62.                 }
  63.             }
  64.             for (int j = 0; j < 12; j++) {
  65.                 if (!coin[j]) {
  66.                     fault = j;
  67.                     break;
  68.                 }
  69.             }
  70.             if (fault != -1 && hl[fault] == 1) {
  71.                 System.out.println((char) ('A' + fault)
  72.                         + " is the counterfeit coin and it is light.");
  73.             } else if (fault != -1 && hl[fault] == -1) {
  74.                 System.out.println((char) ('A' + fault)
  75.                         + " is the counterfeit coin and it is heavy.");
  76.             }
  77.         }
  78.     }
  79. }

题目:http://acm.pku.edu.cn/JudgeOnline/problem?id=1013

思路:模拟题,经典的假币问题,可以有3种情况判断肯定是真的:

            1.在2堆平衡的金币里面的全是真的

            2.如果金币没有在不平衡的情况里面出现,那么是真的

            3.如果一个金币在小的那端出现过,又在大的那端出现过,那肯定是真的。