1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
| ''' Author: NEFU AB-IN Date: 2024-07-11 16:28:48 FilePath: \LeetCode\3185\3185.py LastEditTime: 2024-07-11 16:40:51 '''
import random from collections import Counter, defaultdict, deque from datetime import datetime, timedelta from functools import lru_cache from heapq import heapify, heappop, heappush, nlargest, nsmallest from itertools import combinations, compress, permutations, starmap, tee from math import ceil, fabs, floor, gcd, log, sqrt from string import ascii_lowercase, ascii_uppercase from sys import exit, setrecursionlimit, stdin from typing import Any, Dict, List, Tuple, TypeVar, Union
TYPE = TypeVar('TYPE') N = int(2e5 + 10) M = int(20) INF = int(2e9) OFFSET = int(100)
setrecursionlimit(INF)
class Arr: array = staticmethod(lambda x=0, size=N: [x() if callable(x) else x for _ in range(size)]) array2d = staticmethod(lambda x=0, rows=N, cols=M: [Arr.array(x, cols) for _ in range(rows)]) graph = staticmethod(lambda size=N: [[] for _ in range(size)])
@staticmethod def to_1_indexed(data: Union[List, str, List[List]]): """Adds a zero prefix to the data and returns the modified data and its length.""" if isinstance(data, list): if all(isinstance(item, list) for item in data): new_data = [[0] * (len(data[0]) + 1)] + [[0] + row for row in data] return new_data, len(new_data) - 1, len(new_data[0]) - 1 else: new_data = [0] + data return new_data, len(new_data) - 1 elif isinstance(data, str): new_data = '0' + data return new_data, len(new_data) - 1 else: raise TypeError("Input must be a list, a 2D list, or a string")
class Str: letter_to_num = staticmethod(lambda x: ord(x.upper()) - 65) num_to_letter = staticmethod(lambda x: ascii_uppercase[x]) removeprefix = staticmethod(lambda s, prefix: s[len(prefix):] if s.startswith(prefix) else s) removesuffix = staticmethod(lambda s, suffix: s[:-len(suffix)] if s.endswith(suffix) else s)
class Math: max = staticmethod(lambda a, b: a if a > b else b) min = staticmethod(lambda a, b: a if a < b else b)
class IO: input = staticmethod(lambda: stdin.readline().rstrip("\r\n")) read = staticmethod(lambda: map(int, IO.input().split())) read_list = staticmethod(lambda: list(IO.read()))
class Std: pass
class Solution: def countCompleteDayPairs(self, hours: List[int]) -> int: hours = [hour % 24 for hour in hours]
cnt_0 = hours.count(0) res = (cnt_0 - 1) * cnt_0 // 2
cnt_ = Counter() for hour in hours: if not hour: continue if cnt_.get(24 - hour): res += cnt_[24 - hour] cnt_[hour] += 1 return res
print(Solution().countCompleteDayPairs([12, 12, 30, 24, 24]))
|