Problem:

A: 情報検索 / Information Search

問題

ポスティングリストとは、検索語と出現文書 ID の対応関係を持たせたリストである。例えば

北海道: 1, 2, 4, 9

観光: 1, 3, 4, 7

などである。

上記のポスティングリストから、and 検索をすると、ID 1, 4 の文書がヒットし、or 検索をすると、ID 1, 2, 3, 4, 7, 9 がヒットする。

ここで and 検索とは「どちらのリストにも含まれる要素を列挙する」ことであり、 or 検索とは「少なくともどちらか一方のリストに含まれる要素を列挙する」ことである。

ポスティングリストが与えられるので、and 検索と or 検索の結果をそれぞれ出力せよ。

入力形式

n m
a_1 a_2 $\ldots$ a_n
b_1 b_2 $\ldots$ b_m

入力はすべて整数からなる。

1 行目には検索すべき 2 つのポスティングリストの長さ n と m が空白区切りで与えられる。

2 行目と 3 行目にはそれぞれのポスティングリストに含まれる ID が空白区切りで与えられる。

制約

 1 \leq n, m \leq 2\times10^5

 a_i < a_j (i < j)

 b_i < b_j (i < j)

 1 \leq a_i, b_i \leq 10^9

出力形式

and 検索のヒット数を A、or 検索のヒット数を B とする。

最初の一行に A B の順に空白区切りで出力せよ。

続く A 行に and 検索でヒットした ID を昇順に出力せよ。

続く B 行に or 検索でヒットした ID を昇順に出力せよ。

入力例1

4 4
1 2 4 9
1 3 4 7

出力例1

2 6
1
4
1
2
3
4
7
9

入力例2

4 4
1 3 5 7
2 4 6 8

出力例2

0 8
1
2
3
4
5
6
7
8

入力例3

3 5
1 2 3
1 2 3 4 5

出力例3

3 5
1
2
3
1
2
3
4
5



Sample input:
4 4
1 2 4 9
1 3 4 7


Sample output:
2 6
1
4
1
2
3
4
7
9

Submission status: Accepted

Solution code:
N, M = map(int, input().split())
A = set(map(int, input().split()))
B = set(map(int, input().split()))
AandB = sorted(A & B)
AorB = sorted(A | B)
print(len(AandB), len(AorB))
for x in AandB:
    print(x)
for x in AorB:
    print(x)

Submission status: Accepted

Solution code:
n,m = map(int,input().split())
a = set(map(int,input().split()))
b = set(map(int,input().split()))
i = sorted(a&b)
u = sorted(a|b)
print(len(i),len(u))
for x in i:
    print(x)
for x in u:
    print(x)

Submission status: Accepted

Solution code:
n, m = map(int, input().split())
a = set(map(int, input().split()))
b = set(map(int, input().split()))

a_and_b = list(a & b)
a_or_b = list(a | b)

a_and_b.sort()
a_or_b.sort()

print(len(a_and_b), len(a_or_b))

for p in a_and_b:
    print(p)

for q in a_or_b:
    print(q)

Submission status: Accepted

Solution code:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
''' 
------------------------
author : iiou16
------------------------
'''


def main():
    n, m = list(map(int, input().split()))
    A = list(map(int, input().split()))
    A = set(A)
    B = list(map(int, input().split()))
    B = set(B)

    intersection = A & B
    union = A | B

    print(len(intersection), len(union))
    for i in sorted(list(intersection)):
        print(i)
    for u in sorted(list(union)):
        print(u)


if __name__ == '__main__':
    main()

Submission status: Accepted

Solution code:
n,m = map(int, input().split())
a = list(map(int, input().split()))
b = list(map(int, input().split()))

and_list = set(a) & set(b)
or_list = (set(a) ^ set(b)) ^ set(and_list)

print(len(and_list), len(or_list))
for i in sorted(and_list):
    print(i)
for i in sorted(or_list):
    print(i)

Submission status: Accepted

Solution code:
n, m = [int(i) for i in input().split()]
a = {int(i) for i in input().split()}
b = {int(i) for i in input().split()}

A = a & b
B = a | b

print('{} {}'.format(len(A),len(B)))
for a in sorted(A):
    print(a)
for b in sorted(B):
    print(b)

Submission status: Accepted

Solution code:
n, m = raw_input().split()
a = set(map(int, raw_input().split()))
b = set(map(int, raw_input().split()))
c = sorted(a & b)
d = sorted(a | b)
print len(c), len(d)
for num in c:
    print num
for num in d:
    print num

Submission status: Accepted

Solution code:
n,m=map(int,input().split())
a = list(map(int,input().split()))+[1000000001]
b = list(map(int,input().split()))+[1000000001]
andlis=[]
orlis=[]
cura=0
curb=0
for _ in range(n+m):
    if a[cura]>b[curb]:
        orlis.append(b[curb])
        curb+=1
    elif a[cura]==b[curb]:
        andlis.append(a[cura])
        cura+=1
    elif a[cura]<b[curb]:
        orlis.append(a[cura])
        cura+=1
print(len(andlis),len(orlis))
for i in andlis:
    print(i)
for i in orlis:
    print(i)

Submission status: Accepted

Solution code:
import sys
sys.setrecursionlimit(int(1e7))
from collections import deque
def inpl(): return list(map(int, input().split()))

input()
A = set(inpl())
B = set(inpl())
ands = sorted(A&B)
ors = sorted(A|B)

print(len(ands), len(ors))
if len(ands):
    print(*ands,sep="\n")
if len(ors):
    print(*ors, sep="\n")

Submission status: Accepted

Solution code:
#!usr/bin/env python3
from collections import defaultdict
from heapq import heappush, heappop
import sys
import math
import bisect
import random
def LI(): return list(map(int, sys.stdin.readline().split()))
def I(): return int(sys.stdin.readline())
def LS():return list(map(list, sys.stdin.readline().split()))
def S(): return list(sys.stdin.readline())[:-1]
def IR(n):
    l = [None for i in range(n)]
    for i in range(n):l[i] = I()
    return l
def LIR(n):
    l = [None for i in range(n)]
    for i in range(n):l[i] = LI()
    return l
def SR(n):
    l = [None for i in range(n)]
    for i in range(n):l[i] = S()
    return l
def LSR(n):
    l = [None for i in range(n)]
    for i in range(n):l[i] = SR()
    return l
mod = 1000000007

#A
n,m = LI()
a = LI()
b = LI()
li = list(set(a)|set(b))
li2 = list(set(a)&set(b))
li.sort()
li2.sort()
print(len(li2),len(li))
for i in li2:
    print(i)
for i in li:
    print(i)
#B

#C

#D

#E

#F

#G

#H

#I

#J

#K

#L

#M

#N

#O

#P

#Q

#R

#S

#T