Link bài:
Thuật toán:
Ta duyệt các ô trống, nếu ô đó chưa kiểm soát thì ta đánh dấu lại.
Quân xe sẽ kiểm soát các ô từ dòng 1-8 của cột xc và các ô từ cột 1-8 của dòng xd.
Quân tượng sẽ kiểm soát các đường chéo tỏa ra 4 hướng.
Code:
#include <bits/stdc++.h>
using namespace std;
int...
Link bài:
Thuật toán:
Ta bao các cạnh bên ngoài của thành bằng các phần tử mang giá trị 1.
Tường thành là một mảng 2 chiều.
Tạo một chương trình con để di chuyển, khi đụng trúng bờ bao 1 hoặc đụng trúng lớp tường bên ngoài, sẽ lập tức rẽ phải.
Bài này gần tương tự bài VOXO, chỉ khác...
Link bài:
Thuật toán:
Khởi chạy mảng 2 chiều chứa hình xoắn ốc của bài, lấy tọa độ a (i) (j) với i = 101 và j = 101 làm gốc tọa độ.
Dùng chương trình con để chạy từng cạnh một của hình xoắn ốc, ta sẽ khởi tạo từ trong ra ngoài.
Đối với 1 cạnh, hướng đi của ta sẽ thẳng tiến với 1 trục giữ...
Link bài:
Thuật toán:
Dùng một mảng 2 chiều để đánh dấu các ô trên bàn cờ.
Với mỗi quân cờ, ta bắt đầu lan ra theo các hướng đi hợp lệ của nó.
Code:
#include<bits/stdc++.h>
#define fi first
#define se second
#define ii pair <int, int>
#define rep(k, n) for (int i = k; i <= n; i++)
using...
Link bài:
Thuật toán:
Trường hợp k = 1, người chiến thắng sẽ được xác định đơn giản:
Nếu n lẻ, Alice sẽ là người thắng. Bằng không, Bob sẽ thắng.
Trường hợp k > n, Alice sẽ thắng sau một lượt chơi.
Trường hợp n = k, Alice sẽ thắng sau một lượt chơi. Tổng quát với trường hợp (2x+1) *k...
Link bài:
Thuật toán:
Với bài này ta chỉ cần duyệt O (n).
Xét từng phần tử thỏa mãn dãy tăng dần. Nếu gặp phần tử i ≤ phần tử i-1, ta sẽ xét dãy i→n xem liệu đây có là dãy tăng hay không.
Điều kiện ràng buộc rằng phần tử thứ n phải nhỏ hơn phần tử thứ nhất, nếu không thì trong bất cứ...
Link bài:
Thuật toán:
Với bài này, ta sắp xếp các chương trình theo thứ tự lớn dần về thời gian bắt đầu phát sóng.
Dùng 2 vòng for để đếm thủ công.
Code:
#include <bits/stdc++.h>
#define ii pair<int, int>
#define fi first
#define se second
#define rep(k, n) for (int i = k; i <= n; i++)...
Cho dãy n số nguyên không âm a1, a2, an. Người ta tiến hành chọn ra 2 chỉ số i, j sao cho i < j
Và xóa khỏi dãy 2 số ai, aj để tổng giá trị các số còn lại trong dãy là số chẵn.
Yêu cầu: Cho dãy số a1, a2, an. Hãy đếm số lượng cách chọn 2 chỉ số i, j thỏa mãn. Hai cách chọn khác nhau nếu tồn...
Link bài:
Thuật toán:
Đầu tiên, khi trong hàng có 0 con bò (n = 0), ta có 1 cách xếp.
Thống kê số cách xếp i con bò thành hàng (i < n), với trường hợp i ≤ k tức trong hàng chỉ có thể có nhiều nhất 1 con bò đực, số cách sắp chỉ có thể có i con bò trắng và i trường hợp trong đó có 1 con bò...
Link bài:
Thuật toán:
Ta duyệt mảng từ 3 tới n (Vì dãy có tính chất Fibonanci chỉ được xác định với 3 phần tử trở lên và tính chất chỉ có thể xác định khi có ít nhất 3 phần tử).
So sánh và chọn ra độ dài lớn nhất ta tìm được.
Code:
#include <bits/stdc++.h>
using namespace std;
int ans...
Link bài:
Thuật toán:
Nhận xét: Ở trường hợp n = 0, ta chỉ có 1 cách xếp các ô gạch.
Trường hợp n = 1, ta có 3 cách xếp các ô gạch trên.
Gọi số cách điểm xuyết của i ô gạch là ai: Với tường hợp thứ i (i > 1) ta có nhận xét sau:
Nếu ô gạch thứ i-1 có điểm xuyết là 1 0 thì ở ô thứ i, điểm...
Link bài:
Thuật toán:
Mục đích ở đây là sắp xếp các cặp đấu sao cho trường sở tại đạt được số điểm lớn nhất.
Sắp xếp lần lượt số điểm năng lực của 2 đội từ thấp đến cao.
Dùng 2 con trỏ, con trỏ i cho trường đề xuất, con trỏ j cho trường sở tại. Ta sẽ tìm các cặp đấu Ai và Bj sao cho Ai <...
Link bài:
Thuật toán:
Ta sắp xếp dãy người theo thứ tự tăng dần của chiều cao.
Do không có 2 người nào có chiều cao giống nhau, nên ta sẽ dùng chặt nhị phân để giải quyết bài toán (Giảm thời gian tìm kiếm khi chặt nhị phân chỉ cần O (logn) thay vì duyệt hết dãy với O (n).
Duyệt dãy từ 1...
Link bài:
Thuật toán:
Ta dùng thuật toán quay lui để đánh dấu tất lan dần cả các ô mà ốc sên có thể đi đến.
Nếu các ô đó có rau thì ốc sên măm măm rồi đi tiếp.
Code:
#include <bits/stdc++.h>
using namespace std;
int n, m, y, x, ans, a[107][107];
void doit(int i, int j){
if (a[i][j]...
Link bài:
Thuật toán:
Ta dùng quay lui để gọi ra hết các trường hợp có thể xảy ra của chuỗi nhị phân rồi in ra.
Code:
#include<bits/stdc++.h>
using namespace std;
int i, n; int a[1000];
void viet(){
for (int i = 1; i <= n; i++){
cout << a[i];
}
cout << endl;
}
void...