HDOJ 2034 人见人爱A-B

简介: Problem Description 参加过上个月月赛的同学一定还记得其中的一个最简单的题目,就是{A}+{B},那个题目求的是两个集合的并集,今天我们这个A-B求的是两个集合的差,就是做集合的减法运算。

Problem Description
参加过上个月月赛的同学一定还记得其中的一个最简单的题目,就是{A}+{B},那个题目求的是两个集合的并集,今天我们这个A-B求的是两个集合的差,就是做集合的减法运算。(当然,大家都知道集合的定义,就是同一个集合中不会有两个相同的元素,这里还是提醒大家一下)

呵呵,很简单吧?

Input
每组输入数据占1行,每行数据的开始是2个整数n(0<=n<=100)和m(0<=m<=100),分别表示集合A和集合B的元素个数,然后紧跟着n+m个元素,前面n个元素属于集合A,其余的属于集合B. 每个元素为不超出int范围的整数,元素之间有一个空格隔开.
如果n=0并且m=0表示输入的结束,不做处理。

Output
针对每组数据输出一行数据,表示A-B的结果,如果结果为空集合,则输出“NULL”,否则从小到大输出结果,为了简化问题,每个元素后面跟一个空格.

Sample Input
3 3 1 2 3 1 4 7
3 7 2 5 8 2 3 4 5 6 7 8
0 0

Sample Output
2 3
NULL

注意:
1.每个数字后面空格。
2.m=0&&n=0时退出。
3.考虑n=0或m=0时的情况。

import java.util.Scanner;

public class Main {
    public static void main(String args[]) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            int n = sc.nextInt();
            int m = sc.nextInt();
            int[] ns = new int[n];
            int[] ms = new int[m];
            int[] cs = new int[n];


            for (int i = 0; i < n; i++) {
                ns[i] = sc.nextInt();
            }

            for (int i = 0; i < m; i++) {
                ms[i] = sc.nextInt();
            }



            if(n==0&&m==0){
                return;
            }
            if(n==0&&m!=0){
                System.out.println("NULL");
                continue;
            }
            if(n!=0&&m==0){
                for(int i=0;i<n-1;i++){
                    for(int j=i+1;j<n;j++){
                        if(ns[j]<ns[i]){
                            int temp = ns[j];
                            ns[j] = ns[i];
                            ns[i] = temp;
                        }
                    }
                }
                for(int i=0;i<n;i++)
                {
                    System.out.print(ns[i]+" ");
                }

                System.out.println();
                continue;
            }


            int number = 0;

            for (int i = 0; i < n; i++) {
                int have = 0;
                for (int j = 0; j < m; j++) {
                    if (ns[i] != ms[j]) {
                        have++;
                    }
                    if (have == m) {
                        cs[number] = ns[i];
                        number++;
                    }
                }
            }

            for(int i=0;i<number-1;i++){
                for(int j=i+1;j<number;j++){
                    if(cs[j]<cs[i]){
                        int temp = cs[j];
                        cs[j] = cs[i];
                        cs[i] = temp;
                    }
                }
            }




            if (number == 0) {
                System.out.println("NULL");
            } else {
                for (int i = 0; i < number; i++) {
                    System.out.print( cs[i]+" ");
                }
                System.out.println();
            }

        }
    }
    }
目录
相关文章
|
7月前
hdoj 4572 Bottles Arrangement
虽然不知道怎么做,但是AC还是没有问题的。 大概就是循环n次,从m加到m-n/2 除了最后一个数,每个都加两次。
22 0
|
7月前
hdoj 2089 不要62
这题数据量相对比较小,可以暴力打表解决。不过我这里用数位dp 刚开始学数位dp,参考了别人的代码。
26 0
HDOJ 2802 F(N)
HDOJ 2802 F(N)
82 0
HDOJ 2802 F(N)
HDOJ 1412 {A} + {B}
HDOJ 1412 {A} + {B}
90 0
HDOJ 2075 A|B?
HDOJ 2075 A|B?
65 0
|
算法
HDOJ 3466 Proud Merchants
HDOJ 3466 Proud Merchants
85 0
HDOJ 3466 Proud Merchants
|
人工智能 Java BI
HDOJ的题目分类
模拟题, 枚举 1002 1004 1013 1015 1017 1020 1022 1029 1031 1033 1034 1035 1036 1037 1039 1042 1047 1048 1049 1050 1057 1062 1063 1064 1070 1073 ...
1794 0