aNotHeRNo0b
Senior Member
Q2 greedy đủ tư thế, nào là dùng stack, nào là sort theo freq :v nhưng thế éo nào em vẫn tạch. Soi ra thì thấy quả công thức quỷ @@
Thực ra dùng heap đc đó fen, tính pairs cho group left, pairs cho group right, xử lí cái case special remaining thôi là ănQ2 greedy đủ tư thế, nào là dùng stack, nào là sort theo freq :v nhưng thế éo nào em vẫn tạch. Soi ra thì thấy quả công thức quỷ @@
Đáng ra lúc thấy Q2 rate thấp em quay qua Q3 luôn thì bú, quần mãi Q2 hơn 30 phútKinh nghiệm làm contest đầy mìnhđá qua 4 câu thấy câu 3 intuitive múc luôn. Câu 2 ngồi loay hoay mãi ko ra vẫn rank 1k2
bỏ cheaters chắc còn < 1k vẫn + delta như thường
Q4 chắc dân CF mới làm nổi, toàn math là math mệt vãi ko nhìn ra ý tưởng là đúng rồi
Q2 thì éo biết cái cách tính pairs greedy cho nó đúng, tạch ko oan![]()
Vẫn là DNA issueThực ra dùng heap đc đó fen, tính pairs cho group left, pairs cho group right, xử lí cái case special remaining thôi là ăn![]()
via theNEXTvoz for iPhone

Ngủ đi mai dậy gỡĐáng ra lúc thấy Q2 rate thấp em quay qua Q3 luôn thì bú, quần mãi Q2 hơn 30 phút
Vẫn là DNA issue![]()
![]()
![]()
class Solution:
def score(self, cards: List[str], x: str) -> int:
group1 = defaultdict(int)
group2 = defaultdict(int)
specials = 0
for card in cards:
if card[0] == x and card[1] == x:
specials += 1
continue
if card[0] == x:
group1[card] += 1
if card[1] == x:
group2[card] += 1
def count(group):
heap = []
for key, val in group.items():
heapq.heappush(heap, -val)
total = 0
while len(heap) > 1:
a = -heapq.heappop(heap)
b = -heapq.heappop(heap)
total += 1
if a - 1 > 0:
heapq.heappush(heap, 1 - a)
if b - 1> 0:
heapq.heappush(heap, 1 - b)
reamaining = 0
while heap:
reamaining += -heapq.heappop(heap)
return total, reamaining
# Good pairs from left group + remaining items which is not yet paired
left, leftRemaining = count(group1)
# Good pairs from right group + remaining items which is not yet paired
right, rightRemaining = count(group2)
total = left + right
# Use specials to pair with all left + right remaining.
total += min(specials, leftRemaining)
specials -= min(specials, leftRemaining)
total += min(specials, rightRemaining)
specials -= min(specials, rightRemaining)
# If any special items remaining, we can break the good pairs by specials to get more pairs
total += min(left + right, specials//2)
return total
Math thôi thím. Mà qua đi cày mệt quá làm 40p dc 3Q tay run cầm cập k viết dc bài 4 luônMẹ q2 tricky thế nhỉ, câu 4 ko có ý tưởng gì![]()


Bài 4 math mình đọc đề ko có ý tưởng gì luôn, bài 2 làm trong contest hơi joke chứ làm ngoài contest chắc ok, tí nữa gỡLol check lại 3 câu 2 bug vẫn rank 4 lốp.chắc ae dẹo 2-3 nhiều chứ thấy bài 4 dễ hơn đó![]()

:v sponsor nó khác bác ạ, khó điênContest sáng nay chua quá, mất hết điểm tối qua rồi![]()
Q3 gap. DNA issueEm dùng TrieBit nma vẫn gapMá nó biết ngay bài 3 có thể dùng trie mà, con mẹ nó recursion là ngon rồi éo code ra huhu cay quá
loạn quá
đề khó vl thật:v K nhỏ nên là em backtrack luôn, vẫn pass. O(k*n*sqrt(n))Xem tệp đính kèm 3217178
Sao mình thấy mấy solution O(n^2) vẫn pass nhỉ, ảo vậy