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.
q4 thuần toán, nháp 40ph mới xong. sợ thật, đi làm ko động toán bố ai nhớ được///

C++:
#define i64 long long
class Solution {
   
public:
    long long p(long long a, long long b, long long c) {
        long long result = 1;
        a = a % c;
        while (b > 0) {
            if (b % 2 == 1) {
                result = (result * a) % c;
            }
            b = b >> 1;
            a = (a * a) % c;
        }
        return result;
    }
    int numberOfWays(int n, int x, int y) {
        i64 mod=1e9+7;
        vector<vector<i64>> dp(x + 1, vector<i64>(x + 1, 0));
        for (int i = 0; i <= x; i++) {
            dp[i][0] = 1;
            if (i <= x) { dp[i][i] = 1; }
        }
        for (int i = 0; i <= x; i++) {
            for (int j = 1; j <= min(i, x); j++) {
                if (i != j) {
                    dp[i][j] = (dp[i - 1][j - 1] + dp[i - 1][j]) % mod;
                }
            }
        }
        vector<vector<i64>> S(n+1, vector<i64>(n+1, 0));
        S[0][0] = 1;
        for (int i = 1; i <= n; ++i) {
            for (int j = 1; j <= min(i, n); ++j) {
                S[i][j] = ((j * S[i - 1][j])%mod + S[i - 1][j - 1]) %mod;
            }
        }
        int res=0;
        vector<i64>gt(x+1,1);
        for(int i=1;i<=x;i++) gt[i]=(gt[i-1]*i)%mod;
        for(int i=0;i<x;i++){
            if(x-i>n) continue;
            i64 k=dp[x][x-i];
            k=(k*gt[x-i])%mod;
            k=(k*S[n][x-i])%mod;
            k=k*p(y,x-i,mod);
            k%=mod;
            res+=k;
            res%=mod;
        }
        return res;
    }
};
 
q4 thuần toán, nháp 40ph mới xong. sợ thật, đi làm ko động toán bố ai nhớ được///

C++:
#define i64 long long
class Solution {
  
public:
    long long p(long long a, long long b, long long c) {
        long long result = 1;
        a = a % c;
        while (b > 0) {
            if (b % 2 == 1) {
                result = (result * a) % c;
            }
            b = b >> 1;
            a = (a * a) % c;
        }
        return result;
    }
    int numberOfWays(int n, int x, int y) {
        i64 mod=1e9+7;
        vector<vector<i64>> dp(x + 1, vector<i64>(x + 1, 0));
        for (int i = 0; i <= x; i++) {
            dp[i][0] = 1;
            if (i <= x) { dp[i][i] = 1; }
        }
        for (int i = 0; i <= x; i++) {
            for (int j = 1; j <= min(i, x); j++) {
                if (i != j) {
                    dp[i][j] = (dp[i - 1][j - 1] + dp[i - 1][j]) % mod;
                }
            }
        }
        vector<vector<i64>> S(n+1, vector<i64>(n+1, 0));
        S[0][0] = 1;
        for (int i = 1; i <= n; ++i) {
            for (int j = 1; j <= min(i, n); ++j) {
                S[i][j] = ((j * S[i - 1][j])%mod + S[i - 1][j - 1]) %mod;
            }
        }
        int res=0;
        vector<i64>gt(x+1,1);
        for(int i=1;i<=x;i++) gt[i]=(gt[i-1]*i)%mod;
        for(int i=0;i<x;i++){
            if(x-i>n) continue;
            i64 k=dp[x][x-i];
            k=(k*gt[x-i])%mod;
            k=(k*S[n][x-i])%mod;
            k=k*p(y,x-i,mod);
            k%=mod;
            res+=k;
            res%=mod;
        }
        return res;
    }
};
số cách lấy n người đưa vào b group * b giai thừa * tổ hợp (b,x) * y^b
bác nào có công thức gọn hơn ko
yBBewst.png
 
Dạo gần đây đọc tiên hiệp dữ quá làm Medium trầy trật thật, thôi luyện tập 1 tháng nữa trở lại contests :ah:

via theNEXTvoz for iPhone
 
Em chúc "thiêng" thật, 2 contest vừa rồi bác chủ thớt thấy làm cũng "bay", mà là bay mấy chục điểm 😂
Bay thật chứ, mà trình chưa tới nên phục thù sau :ah: mấy nay mình random làm medium còn trầy trật thì sao lên nổi, nay làm ổn ko fence.
Mà đề gần đây phân loại dữ quá, tụi nó cheat có vẻ cũng nhiều top toàn thấy AI ko =((
 
Bay thật chứ, mà trình chưa tới nên phục thù sau :ah: mấy nay mình random làm medium còn trầy trật thì sao lên nổi, nay làm ổn ko fence.
Mà đề gần đây phân loại dữ quá, tụi nó cheat có vẻ cũng nhiều top toàn thấy AI ko =((
Nay em cũng 3Q như hôm qua thôi bác, được cái rank cao hơn hôm qua do Q4 ít người làm được.
 
Em cũng TLE Q3, xong thêm cái điều kiện giống bác là chỉ xét các score mà đảm bảo đến cuối Bob vẫn win thôi là Accepted.
lúc đầu e cũng thêm đk như v mà k ra đúng nên mới đổi lại là thấy Bob thua thì nghỉ k chạy nữa =)) nhưng mà k hiểu sao có ông làm chả cần đk gì vẫn accept :V
 
Python:
class Solution:
    def findXSum(self, nums: List[int], k: int, x: int) -> List[int]:
        n = len(nums)
        result = []
        freq = defaultdict(int)

        for i in range(k):
            freq[nums[i]] += 1
      
        def compute_top_x_sum(freq, x):
            heap = [(count, num) for num, count in freq.items()]
            top_x = nlargest(x, heap)
            return sum(freq * value for freq, value in top_x)

        result.append(compute_top_x_sum(freq, x))

        for i in range(k,n):
            freq[nums[i]] += 1
            freq[nums[i-k]] -= 1

            if freq[nums[i-k]] == 0:
                del freq[nums[i-k]]

            result.append(compute_top_x_sum(freq, x))
        return result

mn cho hỏi sao tính thấy độ phức tạp là N^2LOGN vẫn bị LTE nhỉ ở Q4
 
Tính ra contest weekly bữa trước dễ nhỉ, làm chưa tới 40 phút đc 3Q cmnr :ah:
Cái contest biweekly cũng dễ nữa mà bữa trước trigger bài 2 quá, bay mẹ mất mấy chục điểm :ah:

Python:
class Solution:
    def maxRemovals(self, source: str, pattern: str, targetIndices: List[int]) -> int:
        n = len(source)
        m = len(pattern)
        indicies = set(targetIndices)
        cache = [0]*n
        toBeRemoved = 0
        for i in range(n - 1, -1 ,-1):
            toBeRemoved += int(i in indicies)
            cache[i] += toBeRemoved

        #source, pattern
        @lru_cache(None)
        def dp(i, j):
            if i == n:
                if j == m:
                    return 0
                else:
                    return -inf
            if j == m:
                return cache[i]

            ans = -inf

            if i in indicies:
                ans = max(ans, 1 + dp(i + 1, j))
    
            if source[i] == pattern[j]:
                ans = max(ans, dp(i + 1, j + 1))
            else:
                ans = max(ans, dp(i + 1, j))

            return ans

        return dp(0, 0)
Python:
class Solution:
    def countWinningSequences(self, s: str) -> int:
        mod = 10**9 + 7
        n = len(s)
        sArray = [0]*n
        for i, val in enumerate(s):
            if val == 'W':
                sArray[i] = 1
            elif val == 'E':
                sArray[i] = 2
        
        @lru_cache(None, False)
        def dfs(i, last, diff):
            if diff < 0 and n - i <= abs(diff):
                return 0

            if i == n:
                if diff > 0:
                    return 1
                else:
                    return 0
            
            # F, W, E
            moves = [0, 1, 2]
            ans = 0
            for move in moves:
                if move == last:
                    continue

                if move == sArray[i]:
                    ans += dfs(i + 1, move, diff)

                elif move == 0 and sArray[i] == 2:
                    ans += dfs(i + 1, move, diff + 1)
                
                elif move == 1 and sArray[i] == 0:
                    ans += dfs(i + 1, move, diff + 1)

                elif move == 2 and sArray[i] == 1:
                    ans += dfs(i + 1, move, diff + 1)
                else:
                    ans += dfs(i + 1, move, diff - 1)

            return ans%mod
        
        return dfs(0, -1, 0)
 
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.111
Quay lại
Lên đầu trang