freedom.9
Senior Member
Sao lại 2^K đc nhỉ, 2^K thì k = 16 là chết à, cũng như bfs thông thường thôi mà chỉ là O(n) thôi chứThuật toán này có Time complexity là 1 + 2 + 4 + 8 + .. + 2^k = 2^(k+1) - 1 = O(2^k) rồi bạn.
via theNEXTvoz for iPhone
Sao lại 2^K đc nhỉ, 2^K thì k = 16 là chết à, cũng như bfs thông thường thôi mà chỉ là O(n) thôi chứThuật toán này có Time complexity là 1 + 2 + 4 + 8 + .. + 2^k = 2^(k+1) - 1 = O(2^k) rồi bạn.
BFS O(n) thì n là số đỉnh trong đồ thị. Trong thuật toán của bạn thì những giá trị total (2,...,k-1) sẽ được thăm nhiều lần.Sao lại 2^K đc nhỉ, 2^K thì k = 16 là chết à, cũng như bfs thông thường thôi mà chỉ là O(n) thôi chứ
via theNEXTvoz for iPhone
Ừ cũng đúng nhỉ, để mình tính toán lại xem sao. Thanks fence. Do mình nghĩ tối đa thì mình chỉ có K đỉnh trong đồ thị thôi, nhưng mà ko phải rồi vì cache kiểu này nó sẽ là O(k*lastNum) nên worst case sẽ là O(n^2) chứ ko phải O(n)BFS O(n) thì n là số đỉnh trong đồ thị. Trong thuật toán của bạn thì những giá trị total (2,...,k-1) sẽ được thăm nhiều lần.
Edit: Mình không lập trình trên python. Có đoạn code "if (total, lastNum) in visited" thì mình hiểu là nếu một cặp (total, lastNum) đã gặp rồi thì bỏ qua, nhưng (total, lastNum nào đó) thì sẽ được xét các lân cận.
Mình tính sai cái time complexity rồi. Phải là O(n^2) như bạn tính mới đúng.Ừ cũng đúng nhỉ, để mình tính toán lại xem sao. Thanks fence. Do mình nghĩ tối đa thì mình chỉ có K đỉnh trong đồ thị thôi, nhưng mà ko phải rồi vì cache kiểu này nó sẽ là O(k*lastNum) nên worst case sẽ là O(n^2) chứ ko phải O(n)
, e luyện tag bài 1 tg nma gặp vẫn ngáo vl 
Em chạy thử thấy k = 3819 là đã TLE rồi, chắc test case bài này khá chặt, phải giải dưới O(n^2) thì mới quaÀ mấy fence cho mình hỏi thử sao bài 2 giải bằng DFS thì nó throws TLE nhỉ
Time complexity với space complexity chỉ là O(n) thôi mà, vì worst case ở mỗi trường hợp nó tăng lên từ 1 -> 10^5 thôi chứ nhỉ
Python:from collections import deque class Solution: def minOperations(self, k: int) -> int: visited = set() queue = deque() queue.append((0, 1, 1)) while queue: operations, total, lastNum = queue.popleft() if total >= k: return operations if (total, lastNum) in visited: continue visited.add((total, lastNum)) queue.append((operations + 1, total + lastNum, lastNum)) queue.append((operations + 1, total + 1, lastNum + 1)) return -1
n = 10^5 thì O(nlogn) th bácEm chạy thử thấy k = 3819 là đã TLE rồi, chắc test case bài này khá chặt, phải giải dưới O(n^2) thì mới qua

Đúng là bài dễ làm nguy hiểm hơn bài khó. Tôi cũng làm 2/4 câu như mọi khi nhưng lần này toi 8 điểmXem tệp đính kèm 2408064
Cày sml ăn quả rank 13k4 mất toi 30 điểm huhu.
Đúng bài contest Q4 dễ nữa chứ![]()

same với bác, c3 mng dùng gì vậy sliding win dc k nhỉcau 2 doc de voi sai mat bo no 2 lan, cay vc

spoil chút là vẫn dùng được nhéOR là destructive éo dùng sliding window theo kiểu + - được cay vlfail r

xin cách với thímspoil chút là vẫn dùng được nhé

c4 bác làm thế nào vậy?
Vẫn là ý tưởng sliding window thôi. Anh duy trì 1 mảng bit để đếm số bit on trong cái window của anh là được. Sau đó tính phép or của cái window đấy dựa trên cái mảng bit đó.xin cách với thím![]()