thảo luận Leetcode contest, đường tới Guardian

  • Người tạo chủ đề Người tạo chủ đề freedom.9
  • Ngày bắt đầu Ngày bắt đầu
Trạng thái
Không mở để trả lời thêm.
1726978750546.png

C# toang, dễ unrate cmnr :ah:
 
1727015896422.png


Đề dễ hơn hẳn tuần trước mà sợ choke nên skip mất contest này :rolleyes:. Rating đang có 1577, các bác cho em bí kíp luyện lên 1900 với
 
các bác cho em hỏi có nhiều cheat không nhỉ? E đọc sol của mấy acc thì thấy có cả comment hoặc là sol bài 3 với 4 y nhau mà submit lệch cả mấy phút
 
1727539259091.png

Má nó vẫn ko hiểu sao cứ TLE mãi với cái python. Ý tưởng là xài Rabin Karp tính ra n*26 hash mà mãi nó cứ TLE. Đổi Base đổi MOD các kiểu vẫn TLE. Tức điên thật chứ
 
Q3 medium 5đ tưởng đơn giản mà đề dị thật. May còn 40p thì mới có 200 accepted nên em biết contest này 2Q cũng ko bị trừ nhiều lắm
 
Q3 đọc đề thấy khó tiếp cận quá nên bỏ
Q4 xài Rabin Karp như thế này thì pass còn 1 test case, đm đời đúng đen
Python:
class Solution:
    def minStartingIndex(self, s: str, pattern: str) -> int:
        base = 60
        MOD = 10**18 + 7
        n = len(pattern)
        lastBase = pow(base, n - 1, MOD)
        basePowers = [pow(base, i, MOD) for i in range(n)]

        if len(s) < n:
            return -1

        def calculateHash(target):
            currentHash = 0
            for i in range(n):
                currentHash = (currentHash * base + (ord(target[i]) - ord('a'))) % MOD
            return currentHash

        def getHashList(pattern):
            hashResult = set()
            currentHash = calculateHash(pattern)
            
            for i in range(n):
                order = ord(pattern[i]) - ord('a')
                originalContribution = (order * basePowers[n - i - 1]) % MOD

                newHash = (currentHash - originalContribution + MOD) % MOD
                if newHash < 0:
                    newHash += MOD

                for j in range(26):
                    modifiedHash = (newHash + (j * basePowers[n - i - 1]) % MOD) % MOD
                    hashResult.add(modifiedHash) 

            return hashResult

        patternHashes = getHashList(pattern)

        h2 = calculateHash(s[:n])

        if h2 in patternHashes:
            return 0

        left = 0
        for i in range(n, len(s)):
            h2 = (h2 - (ord(s[left]) - ord('a')) * lastBase) % MOD
            h2 = (h2 * base + (ord(s[i]) - ord('a'))) % MOD
            left += 1

            if h2 < 0:
                h2 += MOD

            if h2 in patternHashes:
                return left

        return -1
 
Q3 đọc đề thấy khó tiếp cận quá nên bỏ
Q4 xài Rabin Karp như thế này thì pass còn 1 test case, đm đời đúng đen
Python:
class Solution:
    def minStartingIndex(self, s: str, pattern: str) -> int:
        base = 60
        MOD = 10**18 + 7
        n = len(pattern)
        lastBase = pow(base, n - 1, MOD)
        basePowers = [pow(base, i, MOD) for i in range(n)]

        if len(s) < n:
            return -1

        def calculateHash(target):
            currentHash = 0
            for i in range(n):
                currentHash = (currentHash * base + (ord(target[i]) - ord('a'))) % MOD
            return currentHash

        def getHashList(pattern):
            hashResult = set()
            currentHash = calculateHash(pattern)
           
            for i in range(n):
                order = ord(pattern[i]) - ord('a')
                originalContribution = (order * basePowers[n - i - 1]) % MOD

                newHash = (currentHash - originalContribution + MOD) % MOD
                if newHash < 0:
                    newHash += MOD

                for j in range(26):
                    modifiedHash = (newHash + (j * basePowers[n - i - 1]) % MOD) % MOD
                    hashResult.add(modifiedHash)

            return hashResult

        patternHashes = getHashList(pattern)

        h2 = calculateHash(s[:n])

        if h2 in patternHashes:
            return 0

        left = 0
        for i in range(n, len(s)):
            h2 = (h2 - (ord(s[left]) - ord('a')) * lastBase) % MOD
            h2 = (h2 * base + (ord(s[i]) - ord('a'))) % MOD
            left += 1

            if h2 < 0:
                h2 += MOD

            if h2 in patternHashes:
                return left

        return -1
Thấy tụi nó dùng zfunction pass ầm ầm mà, :ah:
 
Q4 lúc thi em chưa giải do nghĩ Q3 khó hơn. Giờ đọc Q4 thấy với mỗi xâu con của word1, mình chặt nhị phân để tìm tiền tố chung dài nhất + hậu tố chung dài nhất của nó với word2, nếu tổng độ dài 2 cái này >= word2.length - 1 thì là thoả mãn.
 
Trạng thái
Không mở để trả lời thêm.

Thống kê chủ đề

Ngày tạo
freedom.9,
Người trả lời cuối
freedom.9,
Trả lời
2.480
Lượt xem
130.255
Quay lại
Lên đầu trang