• 🚀 Đăng ký ngay để không bỏ lỡ những nội dung chất lượng! 💯 Hoàn toàn miễn phí!

Có Video Toán và thuật toán mỗi ngày

codeforce vẫn là 1 đẳng cấp khác, mất hơn nửa ngày. Bài này dùng sparse table vs sliding window @LQDuy2 @sangnguyen112233 @Kengoc2018
C:
#include <bits/stdc++.h>
using namespace std;

const int N = 1e5 + 5;
const int M = 5;
int dp[N][M][20];
int a[N][M];
int log_2[N];
int n, m, k;
/**
3 2 4
1 2
1 3
2 2
**/
void prepare() {
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < m; ++j) {
            dp[i][j][0] = a[i][j];
        }
    }
    for (int k = 1; (1<<k) <= n; ++k) {
       int step = 1<<(k-1);
       for (int i = 0; i + 2*step <= n; ++i) {
           for (int mi = 0; mi < m; ++mi) {
               int i1 = dp[i][mi][k-1];
               int i2 = dp[i+step][mi][k-1];
               dp[i][mi][k] = max(i1, i2);
           }
       }
    }
    log_2[1] = 0;
    for (int i = 2; i <= n; i++) {
        log_2[i] = log_2[i/2] + 1;
    }
}

int query(int l, int r, int mi) {
   int k = log_2[r - l + 1];
   return max(dp[l][mi][k], dp[r - (1<<k) + 1][mi][k]);
}

int main() {
  cin >> n >> m >> k;
  for (int i = 0; i < n; ++i) {
    for (int j = 0; j < m; ++j) {
      cin >> a[i][j];
    }
  }
  prepare();
  int l = 0;
  int maxLen = INT_MIN;
  int result[m];
  int saveResult[5] = {0, 0, 0, 0, 0};
  for (int r = 0; r < n; ++r) {
    while(l <= r) {
      int maxCount = 0;
      for(int mi = 0; mi < m; ++mi) {
        int qResult = query(l, r, mi);
        result[mi] = qResult;
        maxCount += qResult;
      }
      if (maxCount > k) {
        ++l;
      } else {
        int len = r-l + 1;
        if (len > maxLen) {
            maxLen = len;
            for (int i = 0; i < m; ++i) {
              saveResult[i] = result[i];
            }
        }
        break;
      }
    }
  }
  for (int i = 0; i < m; ++i) {
    cout << saveResult[i] << " ";
  }
  return 0;
}
 
codeforce vẫn là 1 đẳng cấp khác, mất hơn nửa ngày. Bài này dùng sparse table vs sliding window @LQDuy2 @sangnguyen112233 @Kengoc2018
C:
#include <bits/stdc++.h>
using namespace std;

const int N = 1e5 + 5;
const int M = 5;
int dp[N][M][20];
int a[N][M];
int log_2[N];
int n, m, k;
/**
3 2 4
1 2
1 3
2 2
**/
void prepare() {
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < m; ++j) {
            dp[i][j][0] = a[i][j];
        }
    }
    for (int k = 1; (1<<k) <= n; ++k) {
       int step = 1<<(k-1);
       for (int i = 0; i + 2*step <= n; ++i) {
           for (int mi = 0; mi < m; ++mi) {
               int i1 = dp[i][mi][k-1];
               int i2 = dp[i+step][mi][k-1];
               dp[i][mi][k] = max(i1, i2);
           }
       }
    }
    log_2[1] = 0;
    for (int i = 2; i <= n; i++) {
        log_2[i] = log_2[i/2] + 1;
    }
}

int query(int l, int r, int mi) {
   int k = log_2[r - l + 1];
   return max(dp[l][mi][k], dp[r - (1<<k) + 1][mi][k]);
}

int main() {
  cin >> n >> m >> k;
  for (int i = 0; i < n; ++i) {
    for (int j = 0; j < m; ++j) {
      cin >> a[i][j];
    }
  }
  prepare();
  int l = 0;
  int maxLen = INT_MIN;
  int result[m];
  int saveResult[5] = {0, 0, 0, 0, 0};
  for (int r = 0; r < n; ++r) {
    while(l <= r) {
      int maxCount = 0;
      for(int mi = 0; mi < m; ++mi) {
        int qResult = query(l, r, mi);
        result[mi] = qResult;
        maxCount += qResult;
      }
      if (maxCount > k) {
        ++l;
      } else {
        int len = r-l + 1;
        if (len > maxLen) {
            maxLen = len;
            for (int i = 0; i < m; ++i) {
              saveResult[i] = result[i];
            }
        }
        break;
      }
    }
  }
  for (int i = 0; i < m; ++i) {
    cout << saveResult[i] << " ";
  }
  return 0;
}
cin thế này nhập to tay luôn, sao k đọc từ file vào cho tiện
 
Lên thêm 1 bài theo đơn đặt hàng của thầy Sang Nguyên nhé aenh em.


shortest-subarray-with-or-at-least-k-ii
Sliding window


C++:
class Solution {
private:
    void bits_update(vector<int>& bits, int n, int diff) {
        for (int i = 0; i < 32; ++i) {
            if (n & (1 << i)) {
                bits[i] += diff;
            }
        }
    }

    int bits_to_int(vector<int>& bits) {
        int res = 0;
        for (int i = 0; i < 32; ++i) {
            if (bits[i]) {
                res += (1 << i);
            }
        }
        return res;
    }

public:
    int minimumSubarrayLength(vector<int>& nums, int k) {
        int res = INT_MAX;
        std::vector<int> bits(32, 0);

        int l = 0;
        for (int r = 0; r < nums.size(); ++r) {
            bits_update(bits, nums[r], 1);
            int cur_or = bits_to_int(bits);

            while (cur_or >= k && l <= r) {
                res = min(res, r - l + 1);
                bits_update(bits, nums[l], -1);
                ++l;
                cur_or = bits_to_int(bits);
            }
        }

        return res == INT_MAX ? -1 : res;
    }
};
 
codeforce vẫn là 1 đẳng cấp khác, mất hơn nửa ngày. Bài này dùng sparse table vs sliding window @LQDuy2 @sangnguyen112233 @Kengoc2018
C:
#include <bits/stdc++.h>
using namespace std;

const int N = 1e5 + 5;
const int M = 5;
int dp[N][M][20];
int a[N][M];
int log_2[N];
int n, m, k;
/**
3 2 4
1 2
1 3
2 2
**/
void prepare() {
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < m; ++j) {
            dp[i][j][0] = a[i][j];
        }
    }
    for (int k = 1; (1<<k) <= n; ++k) {
       int step = 1<<(k-1);
       for (int i = 0; i + 2*step <= n; ++i) {
           for (int mi = 0; mi < m; ++mi) {
               int i1 = dp[i][mi][k-1];
               int i2 = dp[i+step][mi][k-1];
               dp[i][mi][k] = max(i1, i2);
           }
       }
    }
    log_2[1] = 0;
    for (int i = 2; i <= n; i++) {
        log_2[i] = log_2[i/2] + 1;
    }
}

int query(int l, int r, int mi) {
   int k = log_2[r - l + 1];
   return max(dp[l][mi][k], dp[r - (1<<k) + 1][mi][k]);
}

int main() {
  cin >> n >> m >> k;
  for (int i = 0; i < n; ++i) {
    for (int j = 0; j < m; ++j) {
      cin >> a[i][j];
    }
  }
  prepare();
  int l = 0;
  int maxLen = INT_MIN;
  int result[m];
  int saveResult[5] = {0, 0, 0, 0, 0};
  for (int r = 0; r < n; ++r) {
    while(l <= r) {
      int maxCount = 0;
      for(int mi = 0; mi < m; ++mi) {
        int qResult = query(l, r, mi);
        result[mi] = qResult;
        maxCount += qResult;
      }
      if (maxCount > k) {
        ++l;
      } else {
        int len = r-l + 1;
        if (len > maxLen) {
            maxLen = len;
            for (int i = 0; i < m; ++i) {
              saveResult[i] = result[i];
            }
        }
        break;
      }
    }
  }
  for (int i = 0; i < m; ++i) {
    cout << saveResult[i] << " ";
  }
  return 0;
}
đúng là codeforce chỉ hợp ccho bọn thi competitive programming, t nhìn code C++ toàn con trỏ là nản mẹ r.
 
đúng là codeforce chỉ hợp ccho bọn thi competitive programming, t nhìn code C++ toàn con trỏ là nản mẹ r.
ngày xưa thầy dốt ko biết dạy C với C++ chứ bản chất con trỏ cũng chỉ là 1 loại biến, thay vì truyền giá trị thì truyền địa chỉ , và mày nhớ khởi tạo nó, dùng xong phải thủ tiêu nó đi dọn dẹp bộ nhớ, trước khi dùng thì kiểm tra tính hợp lệ mọi thứ là OK thôi mà.
 
thuật toán phải vững lý thuyết trước rồi dùng tư duy áp dụng vào
ngồi 6 7 tiếng đéo suy nghĩ đc gì do m chưa học thôi
trừ khi m thiên tài tới mức tự sáng tạo ra lý thuyết (mà thiên tài cũng cần vài chục năm)
về sau chỉ cần có tài liệu đặc tả, đọc lướt 1 lần thấy có vẻ đầy đủ các trường hợp rồi thì cắm đầu vào code liên tục 3 ngày 3 đêm :D, code xong đẩy lên git bảo bọn QC vào test. Logic code khi đi làm cũng ko khó bằng lúc đi học, và gần như ko dùng đến khi đi làm.
 
về sau chỉ cần có tài liệu đặc tả, đọc lướt 1 lần thấy có vẻ đầy đủ các trường hợp rồi thì cắm đầu vào code liên tục 3 ngày 3 đêm :D, code xong đẩy lên git bảo bọn QC vào test. Logic code khi đi làm cũng ko khó bằng lúc đi học, và gần như ko dùng đến khi đi làm.
do m làm gì thôi
bọn cày trâu học thuật toán chủ yếu hướng tới làm big tech
 
do m làm gì thôi
bọn cày trâu học thuật toán chủ yếu hướng tới làm big tech
big tech cũng vậy thôi, thi đầu vào xong (khó nhất) cũng đá vào ngồi làm việc với framework chứ không code chay nữa. Lúc này thì cũng chỉ làm theo quy trình sản xuất phần mềm thông thường và các tiêu chuẩn của ngành phần mềm. Thuật toán sử dụng đa phần là logic đơn giản (cũng là 1 tiêu chuẩn).
 
big tech cũng vậy thôi, thi đầu vào xong (khó nhất) cũng đá vào ngồi làm việc với framework chứ không code chay nữa. Lúc này thì cũng chỉ làm theo quy trình sản xuất phần mềm thông thường và các tiêu chuẩn của ngành phần mềm. Thuật toán sử dụng đa phần là logic đơn giản (cũng là 1 tiêu chuẩn).
thì code rồi cần gì code lại
phải hiểu nó hoạt động ntn thôi
 
thì code rồi cần gì code lại
phải hiểu nó hoạt động ntn thôi
về sau chủ yếu hiểu là thông tin A tuân theo chuẩn b, lưu ở hệ thống C, trước khi gọi bởi hệ thống D thì kiểm tra qua hệ thống E và ghi log vào hệ thống F. Các nghiệp vụ dùng đến A bao gồm {a1,a2,a3}... còn sắp xếp hoạt động ntn chả quan trọng bằng nó sắp xếp trên hệ thống nào.
 
thuật toán phải vững lý thuyết trước rồi dùng tư duy áp dụng vào
ngồi 6 7 tiếng đéo suy nghĩ đc gì do m chưa học thôi
trừ khi m thiên tài tới mức tự sáng tạo ra lý thuyết (mà thiên tài cũng cần vài chục năm)
tao có ngồi 6 tiếng để suy nghĩ 1 bài thuật toán đâu, tao còn đi làm đi học, giờ đéo đâu mà ngồi 6 tiếng cho 1 bài thuật toán
 
ngày xưa thầy dốt ko biết dạy C với C++ chứ bản chất con trỏ cũng chỉ là 1 loại biến, thay vì truyền giá trị thì truyền địa chỉ , và mày nhớ khởi tạo nó, dùng xong phải thủ tiêu nó đi dọn dẹp bộ nhớ, trước khi dùng thì kiểm tra tính hợp lệ mọi thứ là OK thôi mà.
Vãi thầy dốt. M dốt thì có
Dăm ba câu căn bản, ai chẳng biết con trỏ là vậy.
Vấn đề là dùng nó dễ gây lỗi, vấn đề toàn cầu trong toàn giới dev, chứ riêng gì một cá nhân dốt nát nào.
Microsoft và Gu-gờ dốt hơn cả m, đếu biết sử dụng con trỏ an toàn.
Recent studies from Microsoft and Google have found that about 70 percent of all security vulnerabilities are caused by memory safety issues.
 
Vãi thầy dốt. M dốt thì có
Dăm ba câu căn bản, ai chẳng biết con trỏ là vậy.
Vấn đề là dùng nó dễ gây lỗi, vấn đề toàn cầu trong toàn giới dev, chứ riêng gì một cá nhân dốt nát nào.
Microsoft và Gu-gờ dốt hơn cả m, đếu biết sử dụng con trỏ an toàn.
mày trích cái câu đấy ở đâu thì hiểu theo đúng ngữ cảnh nhé, và "memory safety issues" là những vấn đề cụ thể thế nào nữa. Gán hết tội cho con trỏ là đéo ổn.
 

Có thể bạn quan tâm

Top