Skip to content

7-21 燕归来

无可奈何花落去,似曾相识燕归来。

研究燕子随季节迁徙的科学家们,给一批燕子做了标记,每只被标记的燕子有一个独特的编号。等它们归来时,再根据标记检查有哪些燕子没有回来,同时有哪些燕子是从别处飞来的,身上带了别人家的标记。

输入格式:

输入首先给出飞走的燕子的信息:在第一行给出不超过 105 的正整数 N,随后 N 行,每行给出一只飞走的燕子的编号。题目保证编号不重复。

随后是飞回的燕子的信息,首先是一个不超过 105 的非负整数 M,随后 M 行,每行给出一只飞回的燕子的编号。题目保证编号不重复。

编号为长度不超过 8 的、由英文字母和数字组成的字符串。

输出格式:

首先输出没有回来的燕子的信息,格式为:

Missing: X
ID[1]
...
ID[X]
Missing: X
ID[1]
...
ID[X]

其中 X 为没有回来的燕子的数量,ID[i]i = 1, ..., X)为按字典序递增输出的这些燕子的编号。

然后输出新增燕子的信息,格式同上,只是把 Missing 换成 New

如果 X 为零,则对应情况下输出 All Back(都回来了)或 All Known(都认识)。

输入样例 1:

tex
5
CN009
CN018
CN001
CN005
CN000
6
US981
CN018
CN000
AUS83
CN005
RU996
5
CN009
CN018
CN001
CN005
CN000
6
US981
CN018
CN000
AUS83
CN005
RU996

输出样例 1:

tex
Missing: 2
CN001
CN009
New: 3
AUS83
RU996
US981
Missing: 2
CN001
CN009
New: 3
AUS83
RU996
US981

输入样例 2:

tex
5
CN009
CN018
CN001
CN005
CN000
5
CN018
CN001
CN005
CN009
CN000
5
CN009
CN018
CN001
CN005
CN000
5
CN018
CN001
CN005
CN009
CN000

输出样例 2:

tex
All Back
All Known
All Back
All Known

Solution:

java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Set;
import java.util.TreeSet;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(in.readLine());
        Set<String> out = new TreeSet<>();
        Set<String> back = new TreeSet<>();
        Set<String> outTemp = new TreeSet<>();
        for (int i = 0; i < n; i++) {
            String s = in.readLine();
            out.add(s);
            outTemp.add(s);
        }
        int m = Integer.parseInt(in.readLine());
        for (int i = 0; i < m; i++) {
            String s = in.readLine();
            back.add(s);
        }
        out.removeAll(back);
        back.removeAll(outTemp);
        int size1 = out.size();
        int size2 = back.size();
        StringBuilder sb = new StringBuilder();
        if (size1 > 0) {
            sb.append("Missing: ").append(size1).append("\n");
            for (String s : out) {
                sb.append(s).append("\n");
            }
        } else {
            sb.append("All Back\n");
        }
        if (size2 > 0) {
            sb.append("New: ").append(size2).append("\n");
            for (String s : back) {
                sb.append(s).append("\n");
            }
        } else {
            sb.append("All Known\n");
        }
        System.out.print(sb);
    }
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Set;
import java.util.TreeSet;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(in.readLine());
        Set<String> out = new TreeSet<>();
        Set<String> back = new TreeSet<>();
        Set<String> outTemp = new TreeSet<>();
        for (int i = 0; i < n; i++) {
            String s = in.readLine();
            out.add(s);
            outTemp.add(s);
        }
        int m = Integer.parseInt(in.readLine());
        for (int i = 0; i < m; i++) {
            String s = in.readLine();
            back.add(s);
        }
        out.removeAll(back);
        back.removeAll(outTemp);
        int size1 = out.size();
        int size2 = back.size();
        StringBuilder sb = new StringBuilder();
        if (size1 > 0) {
            sb.append("Missing: ").append(size1).append("\n");
            for (String s : out) {
                sb.append(s).append("\n");
            }
        } else {
            sb.append("All Back\n");
        }
        if (size2 > 0) {
            sb.append("New: ").append(size2).append("\n");
            for (String s : back) {
                sb.append(s).append("\n");
            }
        } else {
            sb.append("All Known\n");
        }
        System.out.print(sb);
    }
}

Released under the MIT License.