---
# System prepended metadata

title: SES3

---

 # BTVN
 
 - [Domino piling](#Domino-piling)
 - [Petya and Strings](#Petya-and-Strings)
 - [Helpful Maths](#Helpful-Maths)
 - [Boy or Girl](#Boy-or-Girl)
 - [Word Capitalization](#Word-Capitalization)
 - [Bear and Big Brother](#Bear-and-Big-Brother)
 - [Stones on the Table](#Stones-on-the-Table)
 - [Elephant](#Elephant)
 - [Soldier and Bananas](#Soldier-and-Bananas)
 - [Word](#Word)
 - [Wrong Subtraction](#Wrong-Subtraction)
 - [Anton and Danik](#Anton-and-Danik)



## Ảnh AC

![Screenshot 2025-06-29 121416](https://hackmd.io/_uploads/HyGlnS0Vex.png)


## Domino piling

- Link : [Domino piling](https://codeforces.com/contest/50/problem/A)

- Tóm tắt bài : Tìm số lượng domino 2×1 lớn nhất có thể xếp lên một bảng M×N ô vuông mà không bị chồng lên nhau hoặc ra ngoài bảng.

- Lời giải: Mỗi quân domino chiếm 2 ô vuông. Tổng số ô vuông trên bảng là M×N.
=> Số lượng domino tối đa có thể đặt được là tổng số ô vuông chia cho 2.

- Giải thích ví dụ:

1. Input : 2 4. => Tổng 8 ô, 8/2 = 4 quân domino
2. Input : 3 3. => Tổng 9 ô, 9/2 = 4 quân domino

- Code giải:
```
#include <bits/stdc++.h>
using namespace std;
#define ll long long

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);

    ll m, n; cin >> m >> n;

    cout << (m*n)/2 << "\n";

    return 0;
}
```

## Petya and Strings

- Link : [Petya and Strings](https://codeforces.com/contest/112/problem/A)

- Tóm tắt bài: So sánh hai chuỗi ký tự cùng độ dài theo thứ tự từ điển và bỏ qua sự khác biệt giữa chữ hoa và chữ thường. 

- Lời giải : Chuyển về chữ hoa/thường rồi so sánh

- Giải thích ví dụ : 
  - aaaa == aaaA
  - abs < Abz (s < z)
  - abcdefg > AbCdEfF (g > f)

- Code giải : 
```
#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);
    
    string s1, s2; cin >> s1 >> s2;

    transform(s1.begin(), s1.end(), s1.begin(), ::tolower);
    transform(s2.begin(), s2.end(), s2.begin(), ::tolower);

    if(s1 < s2) cout << "-1\n";
    else if(s1 == s2) cout << "0\n";
    else cout << "1\n";

    return 0;
}
```

## Helpful Maths
- Link: [Helpful Maths](https://codeforces.com/contest/339/problem/A)

- Tóm tắt bài: Sắp xếp lại các số hạng theo thứ tự không giảm và in ra biểu thức tổng mới.

- Lời giải : Sắp xếp lại rồi in ra

- Code giải :
```
#include <bits/stdc++.h>
using namespace std;
#define ll long long

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);

    string s; cin >> s;

    stringstream ss(s);
    string tmp;

    multiset <ll> st;

    while(getline(ss, tmp, '+')) {
        st.insert(stoll(tmp));
    }

    if(st.size() == 1) {
            cout << *st.begin() << "\n";
            return 0;
    }

    int length = 1;

    for(auto x : st) {
        if(length == st.size()) cout << x << "\n";
        else {
            cout << x << "+";
            length++;
        }
    }

    return 0;
}
```
## Boy or Girl
- Link: [Boy or Girl](https://codeforces.com/contest/236/problem/A)

- Tóm tắt bài: Xét số ký tự không duy nhất trong một chuỗi là chẵn hay lẻ

- Lời giải : Đọc rồi kiểm bằng set
- Giải thích ví dụ: Đối với ví dụ đầu tiên. Có 6 ký tự riêng biệt trong "wjmzbmr". Các ký tự này là: "w", "j", "m", "z", "b", "r". Vì vậy, wjmzbmr là một phụ nữ và bạn nên in "CHAT WITH HER!".

- Code giải :
``` 
#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);

    string s; cin >> s;

    set <char> st;
    
    for(int i = 0; i < s.size(); i++) {
        st.insert(s[i]);
    }

    if(st.size() % 2 == 0) cout << "CHAT WITH HER!\n";
    else cout << "IGNORE HIM!\n";
    
    return 0;
}
```

## Word Capitalization
- Link: [Word Capitalization](https://codeforces.com/contest/281/problem/A)

- Tóm tắt bài: Viết hoa chứ cái đầu của từ

- Lời giải : Tách chữ cái đầu rồi chuyển qua chữ hoa

- Code giải :
``` 
#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);

    string s1; cin >> s1;
    string s2 = s1.substr(1);

    cout << char(toupper(s1[0])) << s2 << "\n";

    return 0;
} 
```

## Bear and Big Brother
- Link : [Bear and Big Brother](https://codeforces.com/contest/791/problem/A)

- Tóm tắt bài : z*(3*x) > z*(2*y). Tìm z.
- Giải thích ví dụ: Trong ví dụ đầu tiên, Limak nặng 4 và Bob nặng 7. Sau một năm, cân nặng của họ lần lượt là 4,3 = 12 và 7,2 = 14 (một cân nặng tăng gấp ba trong khi cân nặng còn lại tăng gấp đôi). Limak vẫn chưa lớn hơn Bob. Sau năm thứ hai, cân nặng là 36 và 28, vì vậy cân nặng đầu tiên lớn hơn cân nặng thứ hai. Limak lớn hơn Bob sau hai năm nên bạn nên in 2.

  Trong ví dụ thứ hai, cân nặng của Limak và Bob trong những năm tiếp theo là: 12 và 18, sau đó là 36 và 36, và cuối cùng là 108 và 72 (sau ba năm). Câu trả lời là 3. Hãy nhớ rằng Limak muốn lớn hơn Bob và anh ấy sẽ không hài lòng với cân nặng bằng nhau.

  Trong ví dụ thứ ba, Limak lớn hơn Bob sau năm đầu tiên. Cân nặng của họ sẽ là 3 và 2 khi đó.
  
 - Code giải : 
 ``` 
 #include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);

    int x, y; cin >> x >> y;

    int z = 1;

    while(1) {
        if(z*(3*x) > z*(2*y)) {
            cout << z << "\n";
            break;
        }

        x *= 3;
        y *= 2;
        z++;
    }

    return 0;
}
```

## Stones on the Table
- Link : [Stones on the Table](https://codeforces.com/contest/266/problem/A)

- Tóm tắt bài : Tìm số đá cần bỏ để 2 viên đá trên bàn luôn khác màu nhau
- Lời giải : Duyệt mảng, thấy 2 viên đá cạnh nhau có màu giống nhau thì tăng câu trả lời
- Giải thích ví dụ: Input "RRG". Cần bỏ 1 viên đá để được 2 viên đá khác màu nhau : "RG"
- Code giải : 
```
#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);

    int n; cin >> n;
    string s; cin >> s;

    int p2 = 1, cnt = 0;

    for(int p1 = 0; p1 < n; p1++) {
        if(s[p1] == s[p2]) cnt++;

        p2++;
    }

    cout << cnt << endl;
    
    return 0;
} 
```
## Elephant
- Link: [Elephant](https://codeforces.com/contest/617/problem/A)

- Tóm tắt bài : Con voi có thể đi từ 1 -> 5 bước mỗi lượt. Tìm số lượt tối thiểu con voi đi để đến nhà bạn.
- Lời giải: Lấy khoảng cách chia 5. Nếu khoảng cách không chia hết cho 5 thì + 1.
- Giải thích ví dụ: 
  Trong ví dụ đầu tiên, con voi cần thực hiện một bước dài 5 để đến điểm x.

  Trong ví dụ thứ hai, con voi có thể đến điểm x nếu nó di chuyển 3, 5 và 4. Có những cách khác để có được câu trả lời tối ưu nhưng con voi không thể đến được x trong ít hơn ba lần di chuyển.
- Code giải : 
``` 
#include <iostream>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);

    long long i; cin >> i;

    if(i % 5 == 0) cout << i/5 << "\n";
    else cout << i/5 + 1 << "\n";
    
    return 0;
}
```
## Soldier and Bananas
- Link: [Soldier and Bananas](https://codeforces.com/contest/617/problem/A)

- Tóm tắt bài: Một người lính muốn mua w quả chuối. Giá của quả chuối thứ i là i * k đô la. Anh ấy có n đô la. Tìm số tiền anh ấy phải vay thêm để mua đủ w quả chuối.
- Lời giải: Tính tổng từ 1 -> w rồi nhân với k rồi trừ n.
- Code giải: 
```
#include <iostream>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);

    long long k, n, w; cin >> k >> n >> w;

    if((w*(w+1)/2*k) - n <= 0) cout << 0 << "\n";
    else cout << (w*(w+1)/2*k) - n << "\n";
    
    return 0;
}
```
## Word
- Link: [Word](https://codeforces.com/contest/59/problem/A)

- Tóm tắt bài: Nếu số chữ thường nhiều hơn hoặc bằng số chữ hoa thì chuyển hết qua chữ thường. Ngược lại chuyển hết qua chữ hoa.
- Lời giải: Đếm số chữ thường và chữ hoa -> So sánh.
- Code giải:
```
#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);

    string s; cin >> s;
    int low = 0, up = 0;

    for(int i = 0; i < s.length(); i++) {
        if(islower(s[i])) low++;
        else up++;
    }

    if(low >= up) transform(s.begin(), s.end(), s.begin(), ::tolower);
    else transform(s.begin(), s.end(), s.begin(), ::toupper);

    cout << s << endl;
    
    return 0;
}
```
## Wrong Subtraction
- Link: [Wrong Subtraction](https://codeforces.com/contest/977/problem/A)

- Tóm tắt bài: Cho số n và số lần trừ k. Mỗi lần trừ, nếu chữ số cuối cùng của n khác 0, n giảm đi 1. Nếu chữ số cuối là 0, n bị chia cho 10 (bỏ đi chữ số cuối). Hãy in ra kết quả sau k lần trừ.
- Lời giải: Nếu n%10 != 0 -> n--. Ngược lại thì n/=10
- Giải thích ví dụ: Ví dụ đầu tiên tương ứng với chuỗi sau: 512→511→510→51→50
- Code giải:
```
#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);

    int n, k; cin >> n >> k;

    for(int i = 0; i < k; i++) {
        if(n%10 != 0) n--;
        else n/=10; 
    }
    
    cout << n << endl;
    
    return 0;
}
```

## Anton and Danik
- Link: [Anton and Danik](https://codeforces.com/contest/734/problem/A)

- Tóm tắt bài: Cho chuỗi gồm các kí tự "A", "D". Nếu "A" nhiều hơn thì in "Anton", ngược lại in "Danik", nếu bằng nhau in "Friendship"
- Lời giải: Tách từng kí tự rồi đếm
- Giải thích ví dụ:
  Trong ví dụ đầu tiên, Anton thắng 6 ván, trong khi Danik chỉ thắng 1 ván. Do đó, câu trả lời là "Anton".

  Trong ví dụ thứ hai, Anton thắng 3 ván và Danik thắng 4 ván, do đó câu trả lời là "Danik".

  Trong ví dụ thứ ba, cả Anton và Danik đều thắng 3 ván và câu trả lời là "Friendship".
- Code giải:
```
#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);

    int n; cin >> n;
    cin.ignore();
    string s; cin >> s;

    int A = 0, D = 0;

    for(int i = 0; i < n; i++) {
        char c = s[i];
        if(int(c) == 65) A++;
        else D++;
    }

    if(A == D) cout << "Friendship\n";
    else if(A > D) cout << "Anton\n";
    else cout << "Danik\n";

    return 0;
}
```