b4 e dùng trie thấy acceptedBài 3 gang thế nhỉ, brute force 30 phút mới ra
Còn bài 4 xử lí sao đây ko có ý tưởng gì![]()
Bài 3 làm màu dùng pre compute để check số nguyên tố xong TLE, ăn mấy cái pen trong khi brute force check prime thì ăn ngayBài 3 gang thế nhỉ, brute force 30 phút mới ra
Còn bài 4 xử lí sao đây ko có ý tưởng gì![]()

Đỉnh thế fence, b4 quá sức quáb4 e dùng trie thấy accepted

Bài 3 gang thế nhỉ, brute force 30 phút mới ra
Còn bài 4 xử lí sao đây ko có ý tưởng gì![]()
vl. lại mấy câu pattern matchingbài 4 dùng zFunction với Trie là ra
.struct Trie {
Trie *next[26];
long long count;
Trie() {
count = 0;
for (int i = 0; i < 26; ++i) {
next[i] = NULL;
}
}
long long Count(string &s) {
auto current = this;
for (auto c: s) {
if (current->next[c - 'a'] == NULL) {
return 0;
}
current = current->next[c - 'a'];
}
return current->count;
}
};
class Solution {
vector<int> z_function(string &s) {
int n = s.size();
vector<int> z(n);
int l = 0, r = 0;
for(int i = 1; i < n; i++) {
if(i < r) {
z[i] = min(r - i, z[i - l]);
}
while(i + z[i] < n && s[z[i]] == s[i + z[i]]) {
z[i]++;
}
if(i + z[i] > r) {
l = i;
r = i + z[i];
}
}
return z;
}
public:
long long countPrefixSuffixPairs(vector<string>& words) {
Trie* t = new Trie();
long long ans = 0;
for (int i = words.size() - 1; i >= 0; --i) {
auto w = words[i];
ans += t->Count(w);
auto zf = z_function(w);
int pos = 0;
zf[0] = w.size();
Trie* current = t;
for (int j = w.size() - 1; j >= 0; j--) {
int sz = w.size() - j;
if (current->next[w[sz - 1] - 'a'] == NULL) {
current->next[w[sz - 1] - 'a'] = new Trie();
}
current = current->next[w[sz - 1] - 'a'];
if (zf[j] == sz) {
current->count++;
}
}
}
return ans;
}
};
ở nhà là +50 rating rvl. lại mấy câu pattern matching.

Đi chơi thôi tối lên Hà Nội rồiở nhà là +50 rating r![]()

class Solution:
def mostFrequentPrime(self, mat: List[List[int]]) -> int:
freq = defaultdict(int)
ans = [-1,-1]
m,n = len(mat),len(mat[0])
dir = [(0,1),(1,0),(0,-1),(-1,0),(1,1),(-1,-1),(1,-1),(-1,1)]
def isPrime(n):
if (n <= 1):
return False
for i in range(2, int(sqrt(n))+1):
if (n % i == 0):
return False
return True
frequency = {}
maxFrequency = -1
for i in range(m):
for j in range(n):
for dx,dy in dir:
digit = mat[i][j]
x,y = i + dx,j + dy
while 0<=x<m and 0<=y<n:
digit = digit*10 + mat[x][y]
if isPrime(digit):
frequency[digit] = frequency.get(digit, 0) + 1
maxFrequency = max(maxFrequency, frequency[digit])
x+=dx
y+=dy
if maxFrequency == -1:
return -1
ans = -1
for key, value in frequency.items():
if value == maxFrequency:
ans = max(ans, key)
return ans

lập lại acc đi pressing à tím
Gạch thôi, lập clone đi lấy rating của anh em à

gáng nàoHình như Leetcode lập clone là bị ban đấy, thím report điGạch thôi, lập clone đi lấy rating của anh em à
Xem tệp đính kèm 2345099
1695, sắp thoát khỏi kiếp dalit chỉ nhận được monthly badge rồi
4 contests nữa rank 2k đổ lên là sure kèo knightgáng nào

Hèn gì mấy nay ko thấy fence đâu, quay lại luyện đi fence. Đang ngó nghiêng tìm Job bên Canada thử xem đây, nay mới nhận tin bạn direct manager làm việc bên phía KH của mình bị layoff do lương cao quá, thấy tương lai bấp bênhHình như Leetcode lập clone là bị ban đấy, thím report đi
Bỏ bê nhiều quá, tuần này mình sẽ quay lại làm.

