Problem:


Score : 500 points

Problem Statement

We have a two-dimensional grid with H \times W squares. There are M targets to destroy in this grid - the position of the i-th target is \left(h_i, w_i \right).

Takahashi will choose one square in this grid, place a bomb there, and ignite it. The bomb will destroy all targets that are in the row or the column where the bomb is placed. It is possible to place the bomb at a square with a target.

Takahashi is trying to maximize the number of targets to destroy. Find the maximum number of targets that can be destroyed.

Constraints

All values in input are integers.

1 \leq H, W \leq 3 \times 10^5

1 \leq M \leq \min\left(H\times W, 3 \times 10^5\right)

1 \leq h_i \leq H

1 \leq w_i \leq W

\left(h_i, w_i\right) \neq \left(h_j, w_j\right) \left(i \neq j\right)

Input

Input is given from Standard Input in the following format:

H W M
h_1 w_1
\vdots
h_M w_M

Output

Print the answer.

Sample Input 1

2 3 3
2 2
1 1
1 3

Sample Output 1

3

We can destroy all the targets by placing the bomb at \left(1, 2\right).

Sample Input 2

3 3 4
3 3
3 1
1 1
1 2

Sample Output 2

3

Sample Input 3

5 5 10
2 5
4 3
2 3
5 5
2 2
5 4
5 3
5 1
3 5
1 4

Sample Output 3

6



Sample input:
2 3 3
2 2
1 1
1 3


Sample output:
3

Submission status: Accepted

Solution code:
# compiled by pythran
"""
#pythran export main2()
import numpy as np
i4 = np.int32
i8 = np.int64


def solve(h, w, s, H, W):
    h_max = []
    w_max = []
    hm = h.max()
    wm = w.max()
    for i in range(H + 1):
        if h[i] == hm:
            h_max.append(i)
    for i in range(W + 1):
        if w[i] == wm:
            w_max.append(i)

    for hj in h_max:
        for wj in w_max:
            if not (hj, wj) in s:
                return hm + wm
    return hm + wm - 1


def main(in_file):
    stdin = open(in_file)
    H, W, M = [int(x) for x in stdin.readline().split()]
    h = np.zeros(H + 1, i8)
    w = np.zeros(W + 1, i8)
    s = set()
    for _ in range(M):
        hi, wi = [int(x) for x in stdin.readline().split()]
        h[hi] += 1
        w[wi] += 1
        s.add((hi, wi))
    ans = solve(h, w, s, H, W)
    print(ans)


def main2():
    main('/dev/stdin')
"""
import os, sys
p = os.path.dirname(__file__)
pymain = os.path.join(p, "a.out")
if len(sys.argv) == 1:
    import subprocess
    if p == "":
        pymain = "./" + pymain
    subprocess.call(pymain)
else:
    import gzip, base64, stat
    gz = b'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'
    bin = gzip.decompress(base64.b64decode(gz))
    with open(pymain, "wb") as f:
        f.write(bin)
    os.chmod(pymain, 0o775)

Submission status: Accepted

Solution code:
import sys
def MI(): return map(int,sys.stdin.readline().rstrip().split())

H,W,M = MI()

X = [0]*(H+1)  # X[i] = x座標がiである爆破対象はいくつあるか
Y = [0]*(W+1)  # Y[i] = y座標がiである爆破対象はいくつあるか

from collections import defaultdict
d = defaultdict(int)  # d[(h,w)] == 1 ⇔ 座標(h,w)に爆破対象が存在する

for i in range(M):
    h,w = MI()
    X[h] += 1
    Y[w] += 1
    d[(h,w)] = 1

mx = max(X)
my = max(Y)
ans = mx+my
A = [i for i in range(1,H+1) if X[i] == mx]
B = [i for i in range(1,W+1) if Y[i] == my]

if len(A)*len(B) > M:
    print(ans)
else:
    for i in A:
        for j in B:
            if d[(i,j)] == 0:
                print(ans)
                exit()
    print(ans-1)

Submission status: Accepted

Solution code:
h,w,m=map(int,input().split())
lh=[0]*h
lw=[0]*w
l=set()
for i in range(m):
  h1,w1=input().split()
  l.add(h1+"_"+w1)
  lh[int(h1)-1]+=1
  lw[int(w1)-1]+=1

hmax=max(lh)
wmax=max(lw)
lh2=[]
lw2=[]
for i in range(h):
  if lh[i]==hmax:
    lh2.append(i)
for i in range(w):
  if lw[i]==wmax:
    for m in lh2:
      if str(m+1)+"_"+str(i+1) not in l:
        print(hmax+wmax)
        exit()      
print(hmax+wmax-1)

Submission status: Accepted

Solution code:
import sys
input = sys.stdin.readline
l = set()

sh,sw,m = map(int,input().split())
H = [0]*sh
W = [0]*sw
for i in range(m):
    h,w = map(int,input().split())
    l.add((h-1,w-1))
    H[h-1] += 1
    W[w-1] += 1

maxh = max(H)
maxw = max(W)
# print(H,W)
# print(maxh,maxw)

hlist = []
wlist = []

for i in range(sh):
    if H[i] == maxh:
        hlist.append(i)
for j in range(sw):
    if W[j] == maxw:
        wlist.append(j)
# print(hlist,wlist)

if len(hlist)*len(wlist) > m:
    print(maxh+maxw)
    exit()

ans = maxh+maxw-1
for i in hlist:
    for j in wlist:
        if (i,j) not in l:
            print(ans+1)
            exit()
print(ans)

Submission status: Accepted

Solution code:
import time
from bisect import bisect_left
t = time.time()
H,W,m = map(int,input().split())
h = [0]*(H+1)
w = [0]*(W+1)
c = [[-1,10**6] for i in range(H+1)]
for i in range(m):
    a,b = map(int,input().split())
    h[a] += 1
    w[b] += 1
    c[a].append(b)
mh = max(h)
mw = max(w)
hkouho = []
wkouho = []
for i in range(H+1):
    if h[i] == mh:
        hkouho.append(i)
for i in range(W+1):
    if w[i] == mw:
        wkouho.append(i)
for i in range(H+1):
    c[i].sort()
# print(hkouho)
# print(wkouho)
for i in hkouho:
    for j in wkouho:
        # print(c[i],i,j,bisect_left(c[i],j))
        if c[i][bisect_left(c[i],j)] != j:
            print(mh+mw)
            exit()
        if time.time()-t > 2.7:
            print(mh+mw-1)
            exit()
print(mh+mw-1)

Submission status: Accepted

Solution code:
import sys
input = sys.stdin.readline


def main():
    h, w, m = map(int, input().split())
    bomb = [tuple(map(int, input().split())) for _ in range(m)]
    
    bom_h = [0]*h
    bom_w = [0]*w
    
    for i in range(m):
        x, y = bomb[i]
        bom_h[x-1] += 1
        bom_w[y-1] += 1
    
    max_h = max(bom_h)
    max_w = max(bom_w)
    
    ans = bom_h.count(max_h)*bom_w.count(max_w)
    for i in range(m):
        x, y = bomb[i]
        if bom_h[x-1] == max_h and bom_w[y-1] == max_w:
            ans -= 1
    
    print(max_h+max_w+bool(ans)-1)
    
    
    
if __name__ == "__main__":
    main()

Submission status: Accepted

Solution code:
import sys
H,W,M=map(int, input().split())
h=[]
w=[]
Hcount=[0 for _ in range(H)]
Wcount=[0 for _ in range(W)]
B=set()

for i in range(M):
    hi,wi=map(int, input().split())
    #h.append(hi)
    #w.append(wi)
    B.add((hi,wi))
    Hcount[hi-1]+=1
    Wcount[wi-1]+=1
Hcountmax=max(Hcount)
Wcountmax=max(Wcount)
h_max=[i for i, v in enumerate(Hcount) if v == Hcountmax]
w_max=[i for i, v in enumerate(Wcount) if v == Wcountmax]
#print(h_max,w_max)
for ii in h_max:
    for jj in w_max:
        if (ii+1,jj+1) not in B:
            print(max(Hcount)+max(Wcount))
            sys.exit()
print(max(Hcount)+max(Wcount)-1)

Submission status: Accepted

Solution code:
# -*- coding: utf-8 -*-
W,H,M=[int(_) for _ in input().split()]
HW=[[int(_) for _ in input().split()]for i in range(M)]
yoko = [0]*W
tate = [0]*H
for hw in HW:
    yoko[hw[0]-1]+=1
    tate[hw[1]-1]+=1

my=max(yoko)
mt =max(tate)
ans = mt+my

cu=yoko.count(my)*tate.count(mt)
c = 0

for hw in HW:
    if yoko[hw[0]-1]==my and tate[hw[1]-1]==mt:
        c+=1
if c== cu:
    ans-=1
print(ans)

Submission status: Accepted

Solution code:
from sys import exit
from collections import defaultdict as dd
h, w, m = map(int, input().split())

#dic[row, col] -> set(ids)
h_dic = dd(int)
w_dic = dd(int)
spot = set()

for i in range(m):
    h_c, w_c = map(int, input().split())
    h_dic[h_c] += 1
    w_dic[w_c] += 1
    spot.add((h_c, w_c))
#print(h_dic, w_dic)

#H_lis -> [i, num_spot(int)]
max_h_num = 0
for key, val in h_dic.items():
    max_h_num = max(max_h_num, val)
max_w_num = 0
W_lis = []
for key, val in w_dic.items():
    max_w_num = max(max_w_num, val)


#print(H_lis, W_lis)
#print(max_h)

ans = 0
max_h_lis = [key for key in h_dic if h_dic[key] == max_h_num]
max_w_lis = [key for key in w_dic if w_dic[key] == max_w_num]
for i in max_h_lis:
    for j in max_w_lis:
        if (i, j) not in spot:
            print(max_h_num + max_w_num)
            exit()
else:
    print(max_h_num + max_w_num - 1)

"""    
max_counter = 0
for i in h_dic.keys():
    for j in w_dic.keys():
        counter = len(h_dic[i] | w_dic[j])
        #print(i, j, h_dic[i] | w_dic[j],counter)
        max_counter = max(max_counter, counter)
print(max_counter)

"""

Submission status: Accepted

Solution code:
from math import *
import fractions
import sys
import collections
import itertools
import pprint
from collections import deque
from heapq import *
input=sys.stdin.readline
H,W,M=map(int,input().split())
l=[list(map(int,input().split())) for _ in range(M)]
tate=[]
yoko=[]
for i in range(M):
    h,m=l[i]
    tate.append(h)
    yoko.append(m)
#print(tate,yoko)
t=collections.Counter(tate)
y=collections.Counter(yoko)
#print(t.most_common())
#print(y.most_common())
tmost=t.most_common()
ymost=y.most_common()
maxt=tmost[0][1]
maxy=ymost[0][1]
tkouho={}
ykouho={}
cntt=0
cnty=0
cnt=0
for i in range(len(tmost)):
    if tmost[i][1]==maxt:
        tkouho[tmost[i][0]]=1
        cntt=cntt+1
    else:
        break
for i in range(len(ymost)):
    if ymost[i][1]==maxy:
        ykouho[ymost[i][0]]=1
        cnty=cnty+1
    else:
        break
#print(tkouho,ykouho)
flag=0
for i in range(M):
    if (tkouho.get(l[i][0])!=None)and(ykouho.get(l[i][1])!=None):
        cnt=cnt+1
if cnty*cntt==cnt:
    print(maxt+maxy-1)
else:
    print(maxt+maxy)
"""
tatecount=0
yokocount=0
ans=0
maxt=tmost[0][1]
maxy=ymost[0][1]
tmosts=[]
ymosts=[]
for i in range(len(tmost)):
    if tmost[i][1]>=maxt-1:
        tmosts.append(tmost[i])
for i in range(len(ymost)):
    if ymost[i][1]>=maxy-1:
        ymosts.append(ymost[i])
print(tmosts,ymosts)

print(maxt,maxy)
ans=0
for tatecount in range(len(tmosts)):
    for yokocount in range(len(ymosts)):
        if d.get(tmost[tatecount][0])==None:
            ans = max(ans, tmost[tatecount][1] + ymost[yokocount][1])
            flag=1
            break
        elif d[tmost[tatecount][0]].get(ymost[yokocount][0])==None:
            ans = max(ans, tmost[tatecount][1] + ymost[yokocount][1])
            flag = 1
            break
        else:
            ans=max(ans,tmost[tatecount][1]+ymost[yokocount][1]-1)

print(ans)
"""

Submission status: Accepted

Solution code:
def resolve():
    h,w,m = map(int, input().split())
    mine = []
    mineh = [0]*h
    minew = [0]*w
    for i in range(m):
        a,b = map(int, input().split())
        a -= 1
        b -= 1
        mine.append((a,b))
        mineh[a] += 1
        minew[b] += 1
    mine = set(mine)
    maxh = max(mineh)
    hnum = []
    maxw = max(minew)
    wnum = []
    for i in range(h):
        if mineh[i] == maxh:
            hnum.append(i)
    for i in range(w):
        if minew[i] == maxw:
            wnum.append(i)
    hnum = set(hnum)
    wnum = set(wnum)
    NO = 0
    for i, j in mine:
        if i in hnum and j in wnum:
            NO += 1
    if len(hnum)*len(wnum) > NO:
        print(maxw+maxh)
    else:
        print(maxw+maxh-1)
resolve()