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.
Mới report cả đống cheaters rồi, lên tầm 50 ranks nữa chắc đủ điểm Guardian.
Hơi tiếc chỗ Q2 đọc đề ngu quá tốn đống thời gian =(( lại bị cái Q2 củ chuối này
FAANG mà cần gì tới 2k5 bác, bác pv FAANG ở đâu mà ác thế:ah:
Thừa hơn thiếu bác, chứ sợ lúc có cơ hội phỏng vấn mà gặp bài khó quá không ra solution mất cơ hội thì lại giá như ... :oops:
 
Q3 thì em ko nhìn ra cách làm. Q4 em thấy giống Q3 weekly trước nhỉ. Cũng là đếm cách chia 1 tập đã cho thành 2 tập nhỏ (có thể chia hết, hoặc không), để thoả mãn điều kiện nào đó.
Cái q4 này khó hơn q3 trước ở chỗ đếm trùng, stuck mãi ko loại bỏ được nó ra :too_sad:

via theNEXTvoz for iPhone
 
Chắc vậy rồi bác, dạo này thị trường xuống quá. FAANG là tụi chịu sponsor visa nhất còn như vậy thì không biết mấy cty nhỏ còn ra sao nữa
Cv của mình từ Us nộp qua Can, làm 7 năm .Net mà nộp vô Ms nó reject luôn ko còn có cả 1 cái OA. Hẻo vl, nói chung cũng hên xui lắm.
Chịu khó luyện chờ thời thôi bác, topic này chắc có vài bác 2k5 đó, các bác làm kinh quá :too_sad:

via theNEXTvoz for iPhone
 
cho e hỏi sao mấy bác biết thằng nào cheat để report vậy, sắp tới định quay lại contest để lên guard mà thấy mấy bác bảo bno cheat nhiều quá =))
 
cho e hỏi sao mấy bác biết thằng nào cheat để report vậy, sắp tới định quay lại contest để lên guard mà thấy mấy bác bảo bno cheat nhiều quá =))
Fence cứ xem thằng nào acc mới, rating thấp mà làm q4 như chém chả thì nó cheat rồi fen, leetcode dạo này làm căng nên mấy thằng nick cũ nó ko dám cheat đâu.
Mình thấy tụi nó cũng ko cheat nhiều lắm đâu, tụi Leetcode nó ban khá nhiều đó


via theNEXTvoz for iPhone
 
Xõa đi, comeback try hard đi
osCpCsi.gif

Tuần sau mình lên Guard rồi lôi clone ra múc nhau tiếp. Giờ đặt mục tiêu 2k5
zFNuZTA.gif


via theNEXTvoz for iPhone
 
Q4 sao của e TLE nhỉ? max length là 80 thì duyệt max là 10 số có tổng nhỏ hơn 40 thì số case ~ là 10^6 thôi mà nhỉ?
1730631270875.png


C++:
class Solution
{
public:
    long long res = 0;

    int dp[41][41];

    long long nCr(int n, int r)
    {
        if (dp[n][r] != -1)
            return dp[n][r];
        long long sum = 1;
        for (int i = 1; i <= r; i++)
        {
            sum = sum * (n - r + i) / i;
        }
        return dp[n][r] = sum;
    }

    void dfs(vector<int> &count, int index, int currentSum, int targetSum, int pendingEvenLength, int pendingOddLength, long long even, long long odd)
    {
        if (currentSum > targetSum || pendingEvenLength < 0 || pendingOddLength < 0)
            return;
        if (currentSum == targetSum && pendingEvenLength == 0 && pendingOddLength == 0)
        {
            res += (even * odd) % MOD;
            res = res % MOD;
            return;
        }
        if (index > 9)
            return;
        for (int i = 0; i <= count[index]; i++)
        {
            long long nextEven = (even * nCr(pendingEvenLength, i)) % MOD;
            long long nextOdd = (odd * nCr(pendingOddLength, count[index] - i)) % MOD;
            dfs(count, index + 1, currentSum + i * index, targetSum, pendingEvenLength - i, pendingOddLength + i - count[index], nextEven, nextOdd);
        }
    }

    int countBalancedPermutations(string num)
    {
        int sum = 0;
        vector<int> count(10, 0);
        memset(dp, -1, sizeof(dp));
        for (auto &i : num)
        {
            sum += (i - '0');
            count[i - '0']++;
        }
        if (sum % 2)
            return 0;

        dfs(count, 0, 0, sum / 2, num.size() / 2, num.size() - num.size() / 2, 1, 1);

        return res;
    }
};

Edit: cắm dp cái odd, even với current sum là xong ạ :confused:
 
Sửa lần cuối:
Cái Q4 hôm qua cũng ko khó lắm nhỉ, nếu như maintain số odd và số even slots rồi tìm cách distribute n digits vô đó bằng combination thì quá dễ rồi =((
Do mình đi DP nó chỉ maintain cái slots nên ko đúng =((
Sửa 1 tí cái solution sai của mình là ăn cmnr, hơi non :ah:
Từ ban đầu code sai tới code đúng sửa có 1 tí =((
Python:
class Solution:
    def countBalancedPermutations(self, num: str) -> int:
        m = len(num)
        MOD = 10**9 + 7
        count = defaultdict(int)
        for i in range(m):
            count[int(num[i])] += 1

        digits = list(set(list(num)))
        n = len(digits)
        oddCounts = m//2 + 1
        evenConts = m//2
            
        @lru_cache(None)
        def dp(i, oddSum, evenSum, diff):
            if i == n:
                if m%2 == 0 and diff == 0 and oddSum == evenSum:
                    return 1

                if m%2 == 1 and abs(diff) == 1 and oddSum == evenSum:
                    return 1

                return 0

            ans = 0
            total = count[int(digits[i])]
            intDigit = int(digits[i])
            for k in range(0, total + 1):
                currentDiff = k - (total - k)
                odds = k
                evens = total - k
                if odds <= oddCounts and evens <= evenConts:
                    ans += dp(i + 1, oddSum + intDigit*k, evenSum + intDigit*(total - k), diff + currentDiff)

            return ans%MOD

        ans = dp(0, 0, 0, 0)
            
        return ans
Python:
class Solution:
    def countBalancedPermutations(self, num: str) -> int:
        m = len(num)
        MOD = 10**9 + 7
        count = defaultdict(int)
        total = 0
        for i in range(m):
            numInt = int(num[i])
            count[numInt] += 1
            total += numInt

        if total%2 != 0:
            return 0

        digits = list(set(list(num)))
        n = len(digits)
         
        @lru_cache(None)
        def dp(i, odds, evens, balance):
            if i == n:
                if odds == evens == balance == 0:
                    return 1

                return 0

            if odds < 0 or evens < 0 or balance < 0:
                return 0

            ans = 0
            total = count[int(digits[i])]
            intDigit = int(digits[i])
            for k in range(0, total + 1):
                ans += comb(odds, k)*comb(evens, total - k)*dp(i + 1, odds - k, evens - (total - k), balance - intDigit*k)

            return ans%MOD

        ans = dp(0, m - m//2, m//2, total// 2)
         
        return ans
 
Sửa lần cuối:
1730926614266.png

Cuối cùng mình cũng đủ điểm lên Guardian, 1k550 câu trong khoảng 1 năm 6 tháng, rất nhiều lần định bỏ cuộc vì ko giải được những bài easy, medium hay làm ko được bài trong contests. Một hành trình khá dài đối với mình, đặc biệt là khi đã có gia đình, rất mệt nhưng đổi lại rất vui và học được rất nhiều về coding và algorithm, cũng may có Voz lên học hành chém gió :p :p
Tiếp theo là mục tiêu 2k5, để năm sau tính. Chắc để từ 2k1 lên 2k5 sẽ mất khoảng 1 năm nữa.
 
Sửa lần cuối:
Xem tệp đính kèm 2769253
Cuối cùng mình cũng đủ điểm lên Guardian, 1k550 câu trong khoảng 1 năm 6 tháng, rất nhiều lần định bỏ cuộc vì ko giải được những bài easy, medium hay làm ko được bài trong contests. Một hành trình khá dài đối với mình, đặc biệt là khi đã có gia đình, rất mệt nhưng đổi lại rất vui và học được rất nhiều về coding và algorithm, cũng may có Voz lên học hành chém gió :p :p
Tiếp theo là mục tiêu 2k5, để năm sau tính. Chắc để từ 2k1 lên 2k5 sẽ mất khoảng 1 năm nữa.
chúc mừng bác :love:
 
Xem tệp đính kèm 2769253
Cuối cùng mình cũng đủ điểm lên Guardian, 1k550 câu trong khoảng 1 năm 6 tháng, rất nhiều lần định bỏ cuộc vì ko giải được những bài easy, medium hay làm ko được bài trong contests. Một hành trình khá dài đối với mình, đặc biệt là khi đã có gia đình, rất mệt nhưng đổi lại rất vui và học được rất nhiều về coding và algorithm, cũng may có Voz lên học hành chém gió :p :p
Tiếp theo là mục tiêu 2k5, để năm sau tính. Chắc để từ 2k1 lên 2k5 sẽ mất khoảng 1 năm nữa.
Chúc mừng bác nhé.
 
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.074
Quay lại
Lên đầu trang