--- title: 'Lời giải Demo contest' disqus: hackmd --- **Lời giải Demo contest** === ✍️ ***Lê Trường Minh Đăng*** ## **Table of Contents** [TOC] --- ----- # Bài 1: OTT ### Bài này chủ yếu sử dụng kiến thức rất cơ bản là cấu trúc rẽ nhánh hay câu lệnh điều kiện (If ... else) để chia ra các trường hợp kéo, búa, bao tương ứng. ### * Thống kê: Đa số nhiều bạn làm được # Bài 2: Chăn bò ## Ý tưởng: ### Bài này sử dụng vòng for để tính tổng từ 1 đến N với độ phức tập là: $O(N)$ ### Cách tốt hơn là sử dụng công thức tính tổng từ 1 đến N là: $(n*(n-1))/2$ để chạy nhanh hơn ### Sau đó lấy tổng vừa tính trừ cho số k thì sẽ tìm ra số hiệu con bò bị lạc # Bài 3: ## Ý tưởng: ### Bài này sử dụng kĩ thuật tính tổng đoạn nâng cao để chọn lọc. Bài này khó để AC nếu chưa biết! Trong vài bữa ôn sắp tới thầy cô hoặc anh sẽ hướng dẫn cho tụi em. # Bài 4: MMAX ## Ý tưởng: ### Chúng ta sẽ xét hết tất cả trường hợp có thể xảy ra của các cặp tích hai phần tử với 3 phần tử. ### Đầu tiên phải sort (sắp xếp) lại mảng đã cho. ### TH1: a[1]*a[2] ### TH2: a[1]*a[2]*a[3] ### TH3: a[1]*a[2]*a[n] ### TH4: a[n]*a[n-1] ### TH5: a[n]*a[n-1]*a[n-2] # Bài 5: POINTS ### Ý tưởng bài này thì sẽ dùng kĩ thuật lùa bò vào chuồng, các em có thể tự tham khảo. ### Code tham khảo của một bạn đã AC: ```pas= uses crt; var i,n,k:longint; A:array[1..200000] of longint; B:array[1..200000] of longint; begin clrscr; read(n,k); for i:=1 to n do begin read(A[i]); A[i]:=A[i]+k; end; for i:=1 to k do begin read(B[i]); A[B[i]]:=A[B[i]]-1; end; for i:=1 to n do writeln(A[i]); end. ``` > [color=#9b46c9] Have a nice day. Bye!