### 1. Theatre Square [math][*1000]
Link: https://codeforces.com/problemset/problem/1/A

#### Tóm tắt đề
Tính số gạch lát đường ít nhất cần để phủ một ô nhất định (gạch tràn ra ngoài không sao)
#### Cách làm
Do ta có thể đặt tấm lát dường ở ngoài khu cho phép nên ta chỉ cần quan tâm việc lấp đầy mà không cần phải đè lên các tấm khác. Từ đó, ta suy ra được công thức để tính số tấm lát đường cần là lấy số tấm cần cho chiều dài nhân với số tấm cần cho chiều rộng.
vậy, ta có công thức là: ceil(n/a) * ceil(m/a); (ceil để đề phòng và chúng ta cũng không cần phải lo về diện tích chỗ ngoài vùng)
#### Ví dụ
Input: n = 7, m = 3, a = 5
Output: 2
Giải thích: Áp dụng công thức trên
#### Code
``` C++=
#include <iostream>
#include <cmath>
using namespace std;
int main() {
long long n, m, a;
cin >> n >> m >> a;
long long tiles_length = (n + a - 1) / a;
long long tiles_width = (m + a - 1) / a;
cout << tiles_length * tiles_width << endl;
return 0;
}
```
(Ta dùng (n+a-1)/a để làm tròn lên vừa đủ mà không hẳn thành n/a + 1)
### 2. Plus or Minus [implementation][*800]
Link: https://codeforces.com/problemset/problem/1807/A

#### Tóm tắt đề:
Cho tc testcase, mỗi testcase gồm 3 số a, b, và c. Ta xét xem a + b hay a-b bằng c.
#### Cách làm
Khi ta có ba số a, b, c, ta xét xem a + b có bằng c không. Nếu có thì ta in ra "+", còn không thì ta in ra "-".
#### Ví dụ:
Input:
3
1 2 3
7 3 4
3 5 8
Output:
+
-
+
#### Code
``` C++=
#include<iostream>
#include<cmath>
using namespace std;
int main(){
ios::sync_with_stdio(0), cin.tie(0);
int tc, a, b, c;
cin>>tc;
while (tc--){
cin>>a>>b>>c;
if(a + b == c){
cout<<"+\n";
}
else{
cout<<"-\n";
}
}
}
```
### 3. Two Elevators [math][*800]
Link: https://codeforces.com/problemset/problem/1729/A

#### Tóm tắt:
Có hai thang máy, thang máy thứ nhất ở tầng $a$ chạy xuóng tầng 1, thang máy thứ hai ở tầng $b$ phải chạy lên tầng $c$ trước khi xuống tầng 1. Tính xem nên thang máy nào tới tầng 1 nhanh hơn.
#### Cách làm
Ta tính được thời gian để thang máy a tới nơi là a - 1, thời gian để thang máy b tới nơi là |c -b| + c - 1 do thang máy phải tới c trước rồi mới quay
lại tầng 1. Sau khi ta có rồi thì ta so sánh rồi in ra kết quả.
#### Ví dụ
#### Code
```C++=
#include<cmath>
#include <iostream>
using namespace std;
int main()
{
int n, ta=0, tb=0;
cin>>n;
int a[n], b[n], c[n];
for(int i = 0; i < n; i++){
cin>>a[i]>>b[i]>>c[i];
}
for(int i = 0; i < n; i++){
tb = 0;
ta=0;
ta=a[i]- 1;
tb+=abs(c[i] - b[i]);
tb+=c[i] - 1;
if(ta > tb){
cout<<"2"<<endl;
}
if(ta == tb){
cout<<"3"<<endl;
}
if(ta < tb){
cout<<"1"<<endl;
}
}
return 0;
}
```
### 4. Division? [implementation][*800]
Link: https://codeforces.com/problemset/problem/1669/A

#### Tóm tắt:
Xét div dựa theo rating của từng người
#### Cách làm
Ta lập if dựa trên các yêu cầu chia của đề bài.
#### Code
``` C++=
#include <iostream>
using namespace std;
int main()
{
int t;
cin>>t;
while(t--){
int rating;
cin>>rating;
if(rating >= 1900){
cout<<"Division 1"<<endl;
}
else if(rating >= 1600 && rating <= 1899){
cout<<"Division 2"<<endl;
}
else if(rating >= 1400 && rating <= 1599){
cout<<"Division 3"<<endl;
}
else{
cout<<"Division 4"<<endl;
}
}
return 0;
}
```
### 5. Codeforces Checking [implementation][strings][*800]
Link: https://codeforces.com/problemset/problem/1791/A

#### Tóm tắt
Xét một chữ xem nó có nằm trong từ "codeforces" hay không.
#### Cách làm
Ta nhận thấy rằng trong từ "codeforces" có các ký tự c, o, d, e, f, r, s nên ta chỉ cần xét xem chữ nhập vào có phải một trong các chữ trên hay không.
#### Ví dụ
Input:
c
a
t
j
e
r
Output:
YES
NO
NO
NO
YES
YES
#### Code
``` C++=
#include<bits/stdc++.h>
using namespace std;
int main(){
ios::sync_with_stdio(0), cin.tie(0);
int tc;
cin>>tc;
while (tc--){
char ch, word[7]={'c', 'o', 'd', 'e', 'f', 'r', 's'};
cin>>ch;
bool correct = false;
for(int i = 0; i < 7; i++){
if(ch == word[i]){
correct = true;
break;
}
}
if(correct == true){
cout<<"YES\n";
}
else{
cout<<"NO\n";
}
}
return 0;
}
```
### 6. Following Directions [geometry][implementation][*800]
Link: https://codeforces.com/problemset/problem/1791/B
#### Tóm tắt
Cho một con robot nghe lệnh và xét xem nó có đi qua ô (1, 1) hay không.
#### Cách làm
Đặt hai biến x, y bằng 0 để theo dõi di chuyển của nhân vật khỏi chỗ ban đầu. Xét từng chữ, nếu chữ là "U", tăng y lên 1, nếu chữ là "D", giảm y xuống 1, nếu chữ là "R", tăng x lên 1, nếu chữ là "L", giảm x xuống 1. Sau mỗi chữ xét xem x và y có bằng 1 hay không.
#### Ví dụ
Input:
7
7
UUURDDL
2
UR
8
RRRUUDDD
3
LLL
4
DUUR
5
RUDLL
11
LLLLDDRUDRD
Output:
YES
YES
NO
NO
YES
YES
NO
#### Code
```C++=
#include<bits/stdc++.h>
using namespace std;
int main(){
ios::sync_with_stdio(0), cin.tie(0);
int tc;
cin>>tc;
while (tc--){
int num, x =0, y = 0;
cin>>num;
string str;
cin>>str;
bool c = false;
for(int i =0; i <= num; i++){
if(str[i] == 'U'){
y++;
}
else if(str[i] == 'D'){
y--;
}
else if(str[i] == 'L'){
x--;
}
else if(str[i] == 'R'){
x++;
}
if(x == 1 && y == 1){
c = true;
}
}
if(c == true){
cout<<"YES\n";
}
else{
cout<<"NO\n";
}
}
return 0;
}
```
### 7. Boy or Girl [strings][brute force][implementation][*800]
Link: https://codeforces.com/problemset/problem/236/A

#### Cách làm
Xét xem trong tên có bao nhiêu ký tự khác nhau (có nhiều cách làm) rồi kiểm tra xem có chia hết cho 2 hay không rồi in đáp án phụ thuộc theo đề bài.
#### Code
``` C++=
#include<bits/stdc++.h>
using namespace std;
int main(){
string s;
cin>>s;
set<char> a (s.begin(), s.end());
if(a.size() % 2 == 0) cout<<"CHAT WITH HER!";
else cout<<"IGNORE HIM!";
return 0;
}
```
(Ta dùng set vì nó tiện hơn còn nếu ai chưa học thì có thể làm cách thủ công cũng được)
### 8. System of Equations [brute force][implementatione[strings][*800]
Link: https://codeforces.com/problemset/problem/214/A

#### Tóm tắt
Cho hai phương trình $a^2 + b = n$, và $a + b^2 = m$. Ta có n, m, tìm số cặp $(a, b)$ phù hợp.
#### Cách làm
Ta có $a^2 + b = n$ nên từ đó ta có $b = n - a^2$. Ta sẽ lặp $a$ từ 0 đến $\sqrt{n}$, rồi lấy $b = n - a^2$, và cuối cùng là thế vào xem $a + b^2$ có bằng $m$ hay không.
#### Ví dụ
Input:
66 296
Output:
1
#### Code
``` C++=
#include<bits/stdc++.h>
using namespace std;
int main(){
int n, m;
cin>>n>>m;
int dem = 0;
for (int a = 0; a*a <= n; ++a) {
int b = n - a*a;
if (b >= 0 && a + b * b == m) {
dem++;
}
}
cout<<dem;
return 0;
}
```
### 9. Next Round [*special problem][implementation][*800]
Link: https://codeforces.com/problemset/problem/158/A

#### Tóm tắt
Cho điểm số của n thí sinh trong một cuộc thi (với n ≥ k), hãy tính có bao nhiêu thí sinh sẽ được vào vòng sau, biết rằng một thí sinh sẽ được vào nếu điểm ≥ điểm của người xếp thứ k và điểm > 0.
#### Cách làm
Ta xét từng phần tử của dãy xem phần tử nào lớn hơn hoặc xem phần tử nào lớn hơn hoặc bằng phần tử thứ k -1 (do k được tính theo kiểu 1, 2,...) và xét xem phẩn tử đó có lớn hơn 0 hay không, nếu có thì cộng 1 vào số thí sinh được qua và in ra số đó ở cuối cùng.
#### Ví dụ
Input:
8 5
10 9 8 7 7 7 5 5
Output: 6
#### Code
```C++=
#include<bits/stdc++.h>
using namespace std;
int main(){
int n, k, dem = 0;
cin>>n>>k;
int a[n];
for(int i = 0; i < n; i++){
cin>>a[i];
}
for(int i = 0; i < n; i++){
if(a[i] >= a[k-1] && a[i] > 0){
dem++;
}
}
cout<<dem;
return 0;
}
```
### 10. I_love_%username% [brute force][*800]
https://codeforces.com/problemset/problem/155/A

#### Tóm tắt
Vasya muốn đếm số lần lập trình viên yêu thích của mình đạt điểm cao hơn hoặc thấp hơn tất cả các lần trước đó (trừ lần đầu).
#### Cách làm
Đặt max, min là phần tử đầu tiên rồi xét từng phần tử sau đó, nếu nó lớn hơn max thì max = phẩn tử đó và số lần amazing + 1. Ta làm tương tự với những phàn tử nhỏ hơn min. Cuối cùng, ta in ra số lần amazing.
#### Ví dụ
Input:
10
4664 6496 5814 7010 5762 5736 6944 4850 3698 7242
Ouput:
4
#### Code
```C++=
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
int score;
cin >> score;
int a = score, b = score;
int dem = 0;
for (int i = 1; i < n; i++) {
cin >> score;
if (score > a) {
dem++;
a = score;
} else if (score < b) {
dem++;
b = score;
}
}
cout << dem;
return 0;
}
```
### 11. Remove smallest [greedy][strings][*800]
Link: https://codeforces.com/problemset/problem/1399/A

#### Tóm tắt
Cho t testcase. Trong mỗi testcase, có một mảng gồm các số nguyên dương, bạn được phép nhiều lần xóa phần tử nhỏ hơn trong hai phần tử có hiệu tuyệt đối không quá 1; hãy xác định có thể biến mảng thành chỉ còn một phần tử hay không.
#### Cách làm
Sort lại mảng, nếu như giữa hai phần tử liên tiếp có khoảng cách lớn hơn 1 thì in ra NO, còn nếu có thì in ra YES.
#### Ví dụ
Input:
1
5
1 2 2 3 4
Output:
YES
#### Code
``` C++=
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int t;
cin >> t;
while (t--) {
int n;
cin >> n;
vector<int> a(n);
for (int i = 0; i < n; i++)
cin >> a[i];
sort(a.begin(), a.end());
bool possible = true;
for (int i = 1; i < n; i++) {
if (a[i] - a[i - 1] > 1) {
possible = false;
break;
}
}
cout << (possible ? "YES" : "NO") << endl;
}
return 0;
}
```
### 12. Soft Drinking[ịmplementation][math][*800]
Link: https://codeforces.com/problemset/problem/151/A

#### Cách làm
Ta có thể tính được số sản phẩm có thể làm được với lượng nước hiện tại bằng cách nhân số người với số nước mỗi người mang rồi chia cho lượng nước cần để làm một sản phẩm. Từ đó, ta có công thức để tính số sản phẩm có thể làm được với lượng nước hiện tại là: $floor(\frac{k*l}{nl})$ (floor để tránh trường hợp làm tròn lên)
Do mỗi sản phẩm chỉ cần 1 lát chanh nên số sản phẩm có thể tạo được từ số lát chanh là $c*d$. Và ta có số sản phẩm có thể làm được với lượng muối hiện tại là $floor(\frac{p}{np})$ (dùng floor tương tự như lý do trên)
Nếu ta muốn tính số sản phẩm làm được, ta lấy $min$ của cả ba thứ đã tính trên, vì ta không thể tạo sản phẩm mà một trong ba nguyên liệu trên bị thiếu được. Cuối cùng, muốn tính được số sản phẩm từng người làm được, ta lấy $floor$ của số sản phẩm làm được sau khi chia cho số người vì ta muốn chắc chắn ai cũng sẽ làm được một số sản phẩm nhất định và ta không tính phần thập phân của từng người gộp lại.
##### Ví dụ
Input: 5 100 10 1 19 90 4 3
Output: 3
#### Code
``` C++=
#include <bits/stdc++.h>
using namespace std;
int main() {
int n, k, l, c, d, p, nl, np;
cin>>n>>k>>l>>c>>d>>p>>nl>>np;
int nc = floor(k*l/nl), ch = c*d, m = floor(p/np);
cout<<floor(min(nc, min(ch, m))/n);
return 0;
}
```
### 13. Word Capitalization[implementation][strings][*800]
Link: https://codeforces.com/problemset/problem/281/A

#### Tóm tắt
In hoa chữ cái đầu tiên của từ.
#### Cách làm
Sử dụng bảng ASCII và tra cứu giá trị phù hợp để thay thế chữ cái đầu tiên.
#### Ví dụ
Input: ilOveCoding
Output: IlOveCoding
#### Code
``` C++=
#include <bits/stdc++.h>
using namespace std;
int main() {
string s;
cin>>s;
if(s[0] > 96) s[0] -= 32;
cout<<s;
return 0;
}
```
### 14. Insomnia cure [constructive algorithms][implementation][math][*800]
Link: https://codeforces.com/problemset/problem/148/A

#### Tóm tắt
Đếm có bao nhiêu rồng trong số d con bị ảnh hưởng ít nhất một lần nếu mỗi con bị tác động khi là bội số của k, l, m hoặc n.
#### Cách làm
Xét từng số từ 1 đến $d$ tương ứng với từng con rồng, xét xem nó có chia hết $k, l, m,$ hay $n$ không, nếu có thì cộng 1 vào biến đếm. Trường hợp đặc biệt: nếu $k, l, m,$ hay $n$ bằng 1 in ra $d$ luôn để tránh TLE với test lừa.
#### Ví dụ
Input:
2
3
4
5
24
Output:
17
#### Code
``` C++=
#include <bits/stdc++.h>
using namespace std;
int lcm(int a, int b) {
return a / __gcd(a, b) * b;
}
int main() {
int k, l, m, n, d;
cin >> k >> l >> m >> n >> d;
if (k == 1 || l == 1 || m == 1 || n == 1){
cout << d;
return 0;
}
int dem = 0;
for (int i = 1; i <= d; ++i) {
if (i % k == 0 || i % l == 0 || i % m == 0 || i % n == 0){
dem++;
}
}
cout << dem;
return 0;
}
```
### 15. A+B? [implementation][800]
Link: https://codeforces.com/problemset/problem/1772/A

#### Tóm tắt
Cho t testcase, mỗi test cho 2 số a, b. Cộng 2 số đó.
#### Cách làm:
Tách hai số ra rồi cộng như bình thường.
#### Ví dụ
Input:
4
4+2
0+0
3+7
8+9
Output:
6
0
10
17
#### Code
```C++=
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
cin>>n;
for(int i = 0; i < n; i++){
string s;
cin>>s;
int a = s[0] - 48, b = s[2] - 48;
cout<<a+b<<"\n";
}
return 0;
}
```
### 16. Elephant [math][*800]
Link: https://codeforces.com/problemset/problem/617/A

#### Tóm tắt
Tính số bước con voi cần để tới đích.
#### Cách làm
Do con voi có thể đi 1, 2, 3, 4, hay 5 ô, nên ta chỉ cần quan tâm việc bước 5 ô vào lúc đầu. Nếu như ta không thể đi nữa thì ta chỉ việc đi số ô nhỏ hơn là được.
#### Ví dụ
Input:
36
Output:
6
#### Code
```C++=
#include <bits/stdc++.h>
using namespace std;
int main() {
int n, dem;
cin>>n;
dem = n/5;
if(n - dem*5 > 0) cout<<dem+1;
else cout<<dem;
return 0;
}
```
### 17. Wrong subtraction [implementation][*800]
Link: https://codeforces.com/problemset/problem/977/A

#### Tóm tắt
Cho số n, nếu như chữ sô cuối của n không phải là 0 thì trừ như bình thường, còn nếu nó là 0 thì chia 10.
#### Cách làm
Làm như đề bài, dùng vòng lặp lặp lại k lần và mỗi lần xét theo đề bài.
#### Ví dụ
Input:
512 4
Ouput: 50
#### Code:
```C++=
#include <bits/stdc++.h>
using namespace std;
int main() {
int n, k;
cin>>n>>k;
for(int i = 0; i < k; i++){
if(n % 10 != 0) n--;
else n/=10;
}
cout<<n;
return 0;
}
```
### 18. Stones on the Table [implementation][*800]
Link: https://codeforces.com/problemset/problem/266/A

#### Tóm tắt
Có $n$ hòn đá trên bàn, xét xem cần bỏ bao nhiêu cục để cho hai cục đá cạnh nhau có màu khác nhau.
#### Cách làm
Xét từng phần tử từ thứ 1 đến cuối và xét xem phần tử nào kế bên giống nhau, nếu giống thì cộng 1 vào biến đếm.
#### Ví dụ
Input:
5
RRRRR
Output:
4
#### Code
```C++=
#include <bits/stdc++.h>
using namespace std;
int main() {
int n = 0, t;
cin>>t;
string s;
cin>>s;
for(int i = 1; i < t; i++){
if(s[i] == s[i-1]) n++;
}
cout<<n;
}
```