[TOC] # SES0 ## ROP0 :::::spoiler **Yêu cầu** -Link bài. -Hình AC. -Tóm tắt đề. -Tag đề. -Hướng giải. -Ví dụ. -CODE AC. ::::: ::::::spoiler **BÀI LÀM** :::::spoiler B1. 4A **link bài** : https://codeforces.com/problemset/problem/4/A ![Screenshot 2025-06-22 194551](https://hackmd.io/_uploads/BJ-MiuSNlx.png) **Tóm tắt đề**: Chia một quả dưa hấu nặng w kg thành hai phần, mỗi phần đều có khối lượng là số chẵn và lớn hơn 0, nếu chia được, in "YES", ngược lại thì in "NO" **Tag đề**: Math, Brute Force **Hướng giải** -Tổng hai số chẵn là số chẵn -> w là số chẵn (w%2==0) -Mỗi phần đều >=2-> w>=4. -Kết luận: In "YES" nếu w chẵn, ngược lại thì "NO" *Ví dụ:* Input 8 Output YES **CODE AC** ```cpp= #include <iostream> using namespace std; int main() { int w; cin >> w; string a = (w%2==0 && w>2) ? "YES" : "NO"; cout<<a; return 0; } ``` ::::: :::::spoiler B2. 71A **link bài** :https://codeforces.com/problemset/problem/71/A ![image](https://hackmd.io/_uploads/ByhTkFHEex.png) **Tóm tắt đề**: Nếu một từ có độ dài > 10 ký tự, thay thế nó bằng ký tự đầu + số ký tự giữa + ký tự cuối, còn lại giữ nguyên. **Tag đề**: Strings **Hướng giải** -Nhập số lượng từ n. -Với mỗi từ: +Nếu độ dài > 10: +Lấy ký tự đầu (word[0]). +Đếm số ký tự giữa (word.length() - 2). +Lấy ký tự cuối (word.back() hoặc word[word.length() - 1]). +Ghép thành chuỗi mới:first_char + to_string(middle_length) + last_char -Ngược lại, giữ nguyên từ. *Ví dụ:* Input hello Output hello **CODE AC** ```cpp= #include <iostream> #include <string> #include <vector> using namespace std; int main(){ int n; cin>>n; vector<string> results; for(int i;i<n;++i){ string word; cin>> word; if(word.length()>10){ string abbr= word[0]+to_string(word.length()-2)+word.back(); results.push_back(abbr); } else{ results.push_back(word); } } for(const string& result : results){ cout<<result<<'\n'; } return 0; } ``` ::::: :::::spoiler B3. 231A **link bài:** https://codeforces.com/problemset/problem/231/A **Tóm tắt đề:** Có n bài toán và 3 thành viên trong nhóm. Mỗi thành viên biết hoặc không biết cách giải một bài. Quyết định làm bài nếu ít nhất 2 thành viên biết cách giải.Tính số bài toán nhóm sẽ làm. **Tag đề:** Greedy,Brute forrce **Hướng giải:** -đặt biến x=0. -Nhập n bài tập. -Với mỗi bài đếm có bao nhiêu số 1 trong 3 bạn. -Nếu tổng lớn hơn hoặc bằng 2, tăng biến x lên 1 đơn vị. -Xuất x. *Ví dụ* Input 3 1 1 0 1 0 0 1 0 1 Output 2 **CODE AC** ```cpp= #include <iostream> using namespace std; int main(){ int n;cin>>n; int x=0 for(int i=0;i<n;++i){ int a,b,c;cin>>a>>b>>c; if(a+b+c>=2){ x++; } } cout<<x; return 0; } ``` ::::: :::::spoiler B4. 282A **Link bài:** https://codeforces.com/problemset/problem/282/A ![image](https://hackmd.io/_uploads/BkGe8OLVgx.png) **Tóm tắt đề:** Có biến x=0. Cho n phép toán mỗi phép toán là một trong các dạng ++ hoặc --(với phép toán ++ là tăng 1 đơn vị còn -- là giảm một đơn vị).Tính x. **Tag đề:** Implementation **Hướng giải:** -khai báo biến n, và gán giá trị biến n. -Khởi tạo biến X=0. -Với mỗi phép toán: nếu chứa ++ (cả ở trước hoặc sau) thì X tăng thêm 1 còn --(cả ở trước hoặc ở sau) thì giảm X đi 1.(lặp n lần) *Ví dụ* Input 2 X++ X-- Output 0 **CODE AC** ```cpp= #include <iostream> #include <vector> using namespace std; int main(){ int n; cin>>>n; int x=0 for(int i=0;i<n;++i){ string sm;cin>>sm; if(sm.find('+')!=string:npos){ x++; } else{ x--; } } cout<<x; return 0; } ``` ::::: :::::spoiler B5. 1A **Link bài:** https://codeforces.com/problemset/problem/1/A ![image](https://hackmd.io/_uploads/rJR8EYUVgx.png) **Tóm tắt đề:** lát các phiến đá hình vuông diện tích a x a lên quảng trường hình chữ nhật diện tích n x m.Có thể lát dư ra ngoài quảng trường nhưng phải bao phủ hết diện tích quảng trường .Tính số phiến đá cần dùng ít nhất có thể. **Tag đề:** math. **Hướng giải:** -Tính số phiến đá cần theo chiều dài (n) +số phiến đá = ceil((double)n/a) -Tính số phiến đã theo chiều dài (m) +số phiến đá = ceil((double)m/a) -Kết quả: tích hai giá trị trên. *Ví dụ* Input 6 6 4 Output 4 **CODE AC** ```cpp= #include <iostream> #include <cmath> #define ll long long using namespace std; int main(){ int n,m,a;cin>>n>>m>>a; ll x=(ll)ceil((double)n/a); ll y=(ll)ceil((double)m/a); cout<< x*y; return 0; } ``` ::::: :::::spoiler B6. 158A **Link bài:** https://codeforces.com/problemset/problem/158/A ![image](https://hackmd.io/_uploads/BJliec8Eeg.png) **Tóm tắt đề:** Có n thí sinh với các số điểm khác nhau trong một cuộc thi.Để đi tiếp thì phải có số điểm cao hơn hoặc bằng thí sinh thứ k và điểm phải dương thì được vào vòng tiếp theo. Đếm số thí sinh vào vòng tiếp theo. **Tag đề:** *special problem, Implementation **Hướng giải** -Khai báo biến n,k và gán giá trị cho nó. -Đặt biến x=0. -Tạo một mảng scores với n phần tử, tập hợp số điểm của từng thí sinh theo thứ tự. -So sánh số điểm từng thí sinh với scores[k-1],điểm của thí sinh thứ k, nếu lớn hơn hoặc bằng scores[k-1] thì tăng x thêm 1.(lặp n lần) -Kết quả: x. *Ví dụ* Input 5 2 5 3 6 1 -2 Output 2 **CODE AC** ```cpp= #include <iostream> #include <vector> using namespace std; int main(){ int n,k;cin>>n>>k; vector<int> scores(n); for(int i=0;i<n;++i){ cin>>scores[i]; } int x=0; int k_co=scores[k-1]; for(int i=0;i<n;++i){ if(scores[i]>=k_co&&scores[i]>0) x++; } cout<<x; return 0; } ``` ::::: :::::spoiler B7. 50A **Link bài:** https://codeforces.com/problemset/problem/50/A ![image](https://hackmd.io/_uploads/S1Pyp5INxe.png) **Tóm tắt đề:** Cho một bảng có kích thước M x N. Sử dụng các domino có kích thước 2 x 1. Tìm số lượng domino tối đa có thể sếp vào bảng. **Tag đề:** Greedy, math. **Hướng giải:** -mỗi domino chiếm 2 ô vuông và diện tích bảng là M x N. -Số lượng domino tối đa để xếp domino vào bảng là (M x N)/2 (phép chia nguyên). *Ví dụ* Input 9 8 Output 36 **CODE AC** ```cpp= #include <iostream> using namespace std; int main(){ int M,N;cin>>M>>N; cout<< M*N/2; return 0; } ``` ::::: :::::spoiler B8. 263A **Link bài:** https://codeforces.com/problemset/problem/263/A ![image](https://hackmd.io/_uploads/BkDuWiLExg.png) **Tóm tắt đề:** Cho ma trận 5 x 5 chứa các số 0 và 1. Chỉ có một số 1 trong ma trận.Tìm số bước di chuyển để đưa số 1 vào trung tâm ở cột 3, hàng 3 **Tag đề** Implementation **Hướng giải:** -Tìm vị trí của số 1 trong ma trận. -Số bước = |hàng-3|+|cột-3|. *Ví dụ* Input 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 Output 1 **CODE AC** ```cpp= #include <iostream> #include <cmath> using namespace std; int main(){ int a[5][5]; int x,y; for(int i=0;i<5;++i){ for(int j=0;j<5;++j){ cin>>a[i][j]; if(a[i][j]=1){ x=i; y=j; } } } cout<< abs(x-2)+abs(y-2); return 0; } ``` ::::: :::::spoiler B9. 112A **Link bài:** https://codeforces.com/problemset/problem/112/A ![Screenshot 2025-06-23 165229](https://hackmd.io/_uploads/B17pVjL4xg.png) **Tóm tắt đề:** Cho 2 chuỗi ký tự latin. So sánh hai chuỗi không phân biệt hoa hay thường theo thứ tự bảng chữ cái.Nếu chuỗi 1 lớn hơn chuỗi hai xuất 1, ngược lại xuất -1,còn nếu bằng nhau thì xuất ra 0. **Tag đề:** Implementation,strings **Hướng giải:** -Chuyển tất cả chữ cái về cùng một dạng là chữ thường. -So sánh hai chuỗi với nhau. *Ví dụ* Input abc abd Output -1 **CODE AC** ```cpp= #include <iostream> #include <algorithm> #include <string> #include <cctype> using namespace std; int main(){ 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; else if(s1>s2) cout<<1; else cout<<0; return 0; } ``` ::::: :::::spoiler B10. 339A **Link bài:** https://codeforces.com/problemset/problem/339/A ![image](https://hackmd.io/_uploads/rJCRk68Vgl.png) **Tóm tắt đề:** Cho một chuỗi biểu thức gồm các số 1,2,3 và dấu +. Sắp xếp lại thứ tự các số theo một thứ tự không giảm, và giữ nguyên vị trí các dấu +. **Tag đề:** Implementation,greedy,sortings,strings. **Hướng giải:** -Loại bỏ dấu + ra khỏi các chuỗi. -Sắp xếp dãy số theo thứ tự không giảm. -Nối các số với nhau bằng dấu +. *Ví dụ* Input 2+3+1 Output 1+2+3 **CODE AC** ```cpp= #include <iostream> #include <string> #include <vector> #include <algorithm> using namespace std; int main(){ string s;cin>>s; vector<int> num; for(int i=0;i<s.length();i+=2){ num.push_back(s[i]-'0'); } sort(num.begin(),num.end()); for(int i=0;i<num.size();++i){ cout<<num[i] if(i<num.size()-1){ cout<<"+"; } } return 0; } ``` ::::: :::::spoiler B11. 236A **Link bài:** https://codeforces.com/problemset/problem/236/A ![image](https://hackmd.io/_uploads/HJKmSaUVlx.png) **Tóm tắt đề:** Cho một username (chỉ chứa chữ cái thường).Xác định giới tính giữa trên username. Nếu số chữ cái là lẻ thì xuất "IGNORE HIM!", các trường hợp còn lại thì xuất "CHAT WITH HER!". **Tag đề:** Brute force,implementation,strings. **Hướng giải:** -Sử dung tập hợp(set) để lọc các chữ cái không trùng lặp. -Nếu kích thước tập hợp chẵn-> xuất "CHAT WITH HER!" Không thì xuất ra "IGNORE HIM!". *Ví dụ* Input xiaoxiao Output CHAT WITH HER! **CODE AC** ```cpp= #include <iostream> #include <string> #include <set> using namespace std; int main(){ string s;cin>>s; set<char> x; for(char c : s){ x.insert(c); } cout<< (x.size()%2==0 ? "CHAT WITH HER!" : "IGNORE HIM!"); return 0; } ``` ::::: :::::spoiler B12. 281A **Link bài:** https://codeforces.com/problemset/problem/281/A ![Screenshot 2025-06-24 135642](https://hackmd.io/_uploads/H1fj2TPVgl.png) **Tóm tắt đề:** Cho một từ. Viết hoa chữ cái đầu tiên của từ, giữ nguyên các chữ còn lại. Xuất từ sau chỉnh sửa. **Tag đề:** strings. **Hướng giải:** -Kiểm tra nếu ký tự đầu tiên là chữ thường thì in hoa lên. -Giữ nguyên các ký tự còn lại. *Ví dụ* Input yOu Output YOu **CODE AC** ```cpp= #include <iostream> #include <cctype> #include <string> using namespace std; int main(){ string s; cin>>s; if(!s.empty()) s[0]=toupper(s[0]); cout<<s; return 0; } ``` ::::: :::::spoiler B13. 791A **Link bài:** https://codeforces.com/problemset/problem/791/A ![Screenshot 2025-06-24 135704](https://hackmd.io/_uploads/B1YAhaDNxx.png) **Tóm tắt đề:** Có hai chú gấu, Limak và Bob, lần lượt nặng a,b.Mỗi năm, cân nặng của Limak và Bob lần lượt tăng gấp 3,2 lần.Tìm số năm ít nhất để Limak nặng hơn Bob. **Tag đề:** math,loops. **Hướng giải:** -Khởi tạo biến đếm năm. -Tạo vòng lặp kiểm tra điều kiện a<=b -Mỗi năm lặp, tăng cân cho cả hai, tăng biến đếm năm -Kết quả, giá trị của biến đếm năm *Ví dụ* Input 4 7 Output 2 **CODE AC** ```cpp= #include <iostream> using namespace std; int main(){ int a,b,y=0; cin>>a>>b; while (a<=b){ a*=3; b*=2; y++; } cout<<y; return 0; } ``` ::::: :::::spoiler B14. 266A **Link bài:** https://codeforces.com/problemset/problem/266/A ![Screenshot 2025-06-24 135712](https://hackmd.io/_uploads/H1JlYCDVex.png) **Tóm tắt đề:** có n viên đá xếp hàng, mỗi viên có màu đỏ(R) hoặc lục(G) hoặc lam (B).Tìm số viên đá tối thiểu cần lấy ra để không có hai viên liền kề cùng màu. **Tag đề:** strings, implementation. **Hướng giải:** -So sánh từng viên đá liên tiếp. -Nếu hai viên cùng màu, tăng biến đếm. -Kết quả: giá trị biến đề. *Ví dụ* Input 8 RRGBRRBG Output 3 **CODE AC** ```cpp= #include <iostream> #include <string> using namespace std; int main() { int n, c=0; string s; cin>>n>>s; for (int i=1; i<n; i++) { if (s[i] == s[i-1]) c++; } cout << c ; return 0; } ``` ::::: :::::spoiler B15. 617A **Link bài:** https://codeforces.com/problemset/problem/617/A ![Screenshot 2025-06-24 135722](https://hackmd.io/_uploads/BJilK0vVel.png) **Tóm tắt đề:** Một chú voi ở vị trí 0 cần đến vị trí x .Mỗi bước có thể đi 1, 2, 3, 4 hoặc 5 đơn vị. Tìm số bước tối thiểu để voi đến đích. **Tag đề:** Divide and Conquer,math. **Hướng giải:** -Số bước = x / 5 (phép chia nguyên). -Có thể viết thành (x + 4) / 5 để tránh làm tròn. *Ví dụ* Input 12 Output 3 **CODE AC** ```cpp= #include <iostream> using namespace std; int main() { int x;cin >> x; cout << (x+4)/5; return 0; } ``` ::::: :::::spoiler B16. 118A **Link bài:** https://codeforces.com/problemset/problem/118/A ![Screenshot 2025-06-24 135740](https://hackmd.io/_uploads/HySWFCw4xx.png) **Tóm tắt đề:** -Cho một chuỗi ký tự (chỉ chứa chữ cái Latin in hoa hoặc thường). -Xóa tất cả nguyên âm (A, E, I, O, U, Y và cả chữ thường). -Thêm dấu . trước mỗi phụ âm còn lại. -Chuyển tất cả phụ âm về chữ thường. **Tag đề:** strings,implementation. **Hướng giải:** -Kiểm tra từng ký tự: +Bỏ qua nếu là nguyên âm +Giữ lại nếu là phụ âm -Biến đổi phụ âm: +Thêm dấu . phía trước +Chuyển về chữ thường *Ví dụ* Input tour Output .t.r **CODE AC** ```cpp= #include <iostream> #include <cctype> using namespace std; bool isVowel(char c) { c = tolower(c); return (c=='a'||c=='e'||c=='i'||c=='o'||c=='u'||c=='y'); } int main() { string s, r; cin>>s; for (char c : s) { if (!isVowel(c)) { r+='.'; r+=tolower(c); } } cout << r; return 0; } ``` ::::: :::::spoiler B17. 546A **Link bài:** https://codeforces.com/problemset/problem/546/A ![Screenshot 2025-06-24 135747](https://hackmd.io/_uploads/HJFrYAwVel.png) **Tóm tắt đề:** Một người lính muốn mua w quả chuối, quả thứ i có giá i * k đồng. Người lính có n đồng. Tính số tiền cần vay thêm để mua đủ w quả. **Tag đề:** implementation, math, brute force **Hướng giải:** -Tính tổng chi phí: +Tổng = k+2k+...+wk=k*(1+2+...+w)=k*w*(w+1)/2 -Tính tiền thiếu: +Nếu tổng <= n: không cần vay +Ngược lại: in tổng - n *Ví dụ* Input 3 17 4 Output 13 **CODE AC** ```cpp= #include <iostream> #include <cmath> using namespace std; int main() { int k,n,w;cin>>k>>n>>w; int t=k*w*(w+1)/2; cout << max(0, t-n); return 0; } ``` ::::: :::::spoiler B18. 59A **Link bài:** https://codeforces.com/problemset/problem/59/A ![Screenshot 2025-06-24 135752](https://hackmd.io/_uploads/ByxUYRDEgx.png) **Tóm tắt đề:** -Cho một từ gồm các chữ cái Latin -Xác định từ đó thuộc dạng: +Chữ hoa chiếm đa số -> chuyển toàn bộ thành chữ hoa +Chữ thường chiếm đa số -> chuyển toàn bộ thành chữ thường +Nếu số lượng hoa/thường bằng nhau -> ưu tiên chữ thường **Tag đề:** implementation,strings. **Hướng giải:** -Đếm số chữ hoa (upper) và số chữ thường (lower) trong từ -Nếu upper > lower: chuyển toàn bộ thành chữ hoa -Ngược lại: chuyển toàn bộ thành chữ thường *Ví dụ* Input houSe Output house **CODE AC** ```cpp= #include <iostream> #include <cctype> using namespace std; int main() { string s;cin>>s; int u=0, l=0; for (char c : s) { if (isupper(c)) u++; else l++; } for (char &c : s) { if (u>l) c=toupper(c); else c=tolower(c); } cout << s; return 0; } ``` ::::: :::::spoiler B19. 977A **Link bài:** https://codeforces.com/problemset/problem/977/A ![Screenshot 2025-06-24 135756](https://hackmd.io/_uploads/SyYUt0PVxx.png) **Tóm tắt đề:** Cho số nguyên n và số lần thao tác k. Thực hiện k lần thao tác.Nếu chữ số cuối cùng khác 0: giảm số đi 1.Nếu chữ số cuối cùng là 0: chia 10.Xuất kết quả sau k lần thao tác. **Tag đề:** Implementation **Hướng giải:** -Lặp k lần: +Kiểm tra chữ số cuối cùng của n (dùng phép chia dư 10) +Áp dụng thao tác tương ứng -Xuất kết quả cuối cùng *Ví dụ* Input 512 4 Output 50 **CODE AC** ```cpp= #include <iostream> using namespace std; int main() { int n, k; cin >> n >> k; while (k--){ if (n%10!=0) n--; else n/=10; } cout <<n; return 0; } ``` ::::: :::::spoiler B20. 69A **Link bài:** https://codeforces.com/problemset/problem/69/A ![Screenshot 2025-06-24 135801](https://hackmd.io/_uploads/r1GPK0wNll.pn) **Tóm tắt đề:** Cho n vector lực, mỗi vector có 3 thành phần (x, y, z). Kiểm tra xem tổng tất cả các vector có bằng vector 0 (0, 0, 0) hay không. **Tag đề:** Implementation, strings. **Hướng giải:** -Tính tổng từng thành phần(sx,sy,sz) -Kiểm tra điều kiện cân bằng: +Nếu sx=sy=sz=0 -> "YES" +Ngược lại -> "NO" *Ví dụ* Input 3 4 1 7 -2 4 -1 1 -5 -3 Output NO **CODE AC** ```cpp= #include <iostream> using namespace std; int main() { int n, x, y, z, sx=0, sy=0, sz=0; cin >> n; while (n--) { cin>>x>>y>>z; sx+=x; sy+=y; sz+=z; } if (sum_x == 0 && sum_y == 0 && sum_z == 0) cout << "YES"; else cout << "NO"; return 0; } ``` ::::: :::::spoiler B21. 96A **Link bài:** https://codeforces.com/problemset/problem/96/A ![Screenshot 2025-06-24 135806](https://hackmd.io/_uploads/SyoDKCP4gg.png) **Tóm tắt đề:** Cho một chuỗi nhị phân (chỉ gồm '0' và '1') biểu diễn tình huống trên sân bóng. Chuỗi được coi là nguy hiểm nếu có ít nhất 7 ký tự giống nhau liên tiếp. Kiểm tra và xuất "YES" nếu nguy hiểm, "NO" nếu không **Tag đề:** Implementation, strings. **Hướng giải:** -Đếm số ký tự liên tiếp giống nhau -Nếu đạt đến 7 ký tự liên tiếp -> kết luận ngay "YES" -Nếu duyệt hết chuỗi mà không có đoạn 7 ký tự liên tiếp -> "NO" *Ví dụ* Input 00100110111111111 Output YES **CODE AC** ```cpp= #include <iostream> #include <string> using namespace std; int main() { string s;cin >> s; int c=1; for (int i=1; i<s.size(); i++) { if (s[i] == s[i-1]) { c++; if (c>=7) { cout<< "YES"; return 0; } } else { c=1; } } cout << "NO"; return 0; } ``` ::::: :::::spoiler B22. 110A **Link bài:** https://codeforces.com/problemset/problem/110/A ![Screenshot 2025-06-25 144534](https://hackmd.io/_uploads/B15FtQFElg.png) **Tóm tắt đề:** Kiểm tra số lượng chữ số 4 và 7 trong số có phải là số may mắn (4 hoặc 7) không. **Tag đề:** Implementation. **Hướng giải:** -Đếm chữ số 4 và 7. -Kiểm tra tổng có phải là 4 hoặc 7. *Ví dụ* Input 4477 Output YES **CODE AC** ```cpp= #include <iostream> using namespace std; int main(){ string s;cin>>s; int c=0; for(char x:s) if(x=='4'||x=='7') c++; cout<<(c==4||c==7? "YES":"NO"); return 0; } ``` ::::: :::::spoiler B23. 734A **Link bài:** https://codeforces.com/problemset/problem/734/A ![Screenshot 2025-06-25 144539](https://hackmd.io/_uploads/HkjcYQKEel.png) **Tóm tắt đề:** Đếm số trận thắng của Anton(A) và Danik(D). **Tag đề:** Implementation,strings. **Hướng giải:** -Đếm ký tự 'A' và 'D' rồi so sánh. *Ví dụ* Input 6 ADAAAA Output Anton **CODE AC** ```cpp= #include <iostream> #include <algorithm> using namespace std; int main(){ int n;string s;cin>>n>>s; int a=count(s.begin(),s.end(),'A'); cout<<(a>n-a?"Anton":(a==n-a?"Friendship":"Danik")); return 0; } ``` ::::: :::::spoiler B24. 41A **Link bài:** https://codeforces.com/problemset/problem/41/A ![Screenshot 2025-06-25 144546](https://hackmd.io/_uploads/ryHoKmFNeg.png) **Tóm tắt đề:** Kiểm tra chuỗi s có phải đảo ngược của t không. **Tag đề:** Implementation,strings **Hướng giải:** -Đảo t và so sánh với s. *Ví dụ* Input abc cba Output YES **CODE AC** ```cpp= #include <iostream> #include <algorithm> using namespace std; int main(){ string s,t;cin>>s>>t; reverse(t.begin(),t.end()); cout<<(s==t?"YES":"NO"); return 0; } ``` ::::: :::::spoiler B25. 677A **Link bài:** https://codeforces.com/problemset/problem/677/A ![Screenshot 2025-06-25 144551](https://hackmd.io/_uploads/BklnFmtNgg.png) **Tóm tắt đề:** Tính chiều rộng tối thiểu của hàng khi người cao hơn h hai đơn vị. **Tag đề:** Implementation. **Hướng giải:** -Duyệt từng người, cộng 1 hoặc 2 tùy chiều cao. *Ví dụ* Input 3 7 4 5 14 Output 4 **CODE AC** ```cpp= #include <iostream> using namespace std; int main(){ int n,h,x,w=0;cin>>n>>h; while(n--){cin>>x;w+=(x>h?2:1);} cout<<w; return 0; } ``` ::::: :::::spoiler B26. 116A **Link bài:** https://codeforces.com/problemset/problem/116/A ![Screenshot 2025-06-25 144557](https://hackmd.io/_uploads/B16hFmYNle.png) **Tóm tắt đề:** Tìm số hành khách lớn nhất trên tàu qua các trạm. **Tag đề:** Implementation. **Hướng giải:** -Cộng/trừ hành khách tại mỗi trạm, ghi nhận giá trị lớn nhất. *Ví dụ* Input 4 0 3 2 5 4 2 4 0 Output 6 **CODE AC** ```cpp= #include <iostream> #include <cmath> using namespace std; int main(){ int n,a,b,c=0,mp=0;cin>>n; while(n--){cin>>a>>b;c+=b-a;mp=max(mp,c);} cout<<mp; return 0; } ``` ::::: :::::spoiler B27. 271A **link bài:** https://codeforces.com/problemset/problem/271/A ![Screenshot 2025-06-25 144602](https://hackmd.io/_uploads/HJaz1PYEll.png) **Tóm tắt đề:** Tìm năm tiếp heo có chữ số khác nhau. **Tag đề:** Brute force **Hướng giải:** -Duyệt từ năm y+1,kiểm tra tính duy nhất của chữ số. *Ví dụ* Input 1983 Output 2013 **CODE AC** ```cpp= #include <iostream> using namespace std; bool iD(int y){ bool d[10]={false};while(y){if (d[y%10])return false; d[y%10]=true ;y/=10;} return true; } int main(){ int y;cin>>y;while(!iD(++y)); cout<<y; return 0; } ``` ::::: :::::spoiler B28. 1030A **Link bài:** https://codeforces.com/problemset/problem/1030/A ![Screenshot 2025-06-25 144607](https://hackmd.io/_uploads/Byr7ywY4ee.png) **Tóm tắt đề:** Nếu có 1 người đánh giá là khó(1) thì in "HARD", không thì in "EASY". **Tag đề:** Implementation. **Hướng giải:** -Kiểm tra sự tồn tại của số 1 trong input. *Ví dụ* Input 3 0 0 1 Output HARD **CODE AC** ```cpp= #include <iostream> using namespace std; int main(){ int n,x;cin>>n;bool h = false; while (n--){ cin>>x;if(x==1) h=true; } cout<< (h?"HARD":"EASY"); return 0; } ``` ::::: :::::spoiler B29. 266B **Link bài:** https://codeforces.com/problemset/problem/266/B ![Screenshot 2025-06-25 144611](https://hackmd.io/_uploads/HJJVkPKVee.png) **Tóm tắt đề:** một hàng gồm bé trai và gái,sau t giây, bé trai(B) đứng trước bé gái(G) sẽ đổi chỗ cho nhau. **Tag đề:** constructive algorithms,graph mathchings,implementation,shortest paths. **Hướng giải:** -Mô phỏng quá trình đổi chỗ t lần lặp *Ví dụ* Input 5 2 BGGBG Output GGBGB **CODE AC** ```cpp= #include <iostream> using namespace std; int main(){ int n,t;string s;cin>>n>>t>>s; while(t--)for(int i=0;i<n-1;i++) if(s[i]=='B'&&s[i+1]=='G'){swap(s[i],s[i+1]);i++;} cout<<s; } ``` ::::: :::::spoiler B30. 58A **Link bài:** https://codeforces.com/problemset/problem/58/A ![Screenshot 2025-06-25 144615](https://hackmd.io/_uploads/SJcVJDFVex.png) **Tóm tắt đề:** Kiểm tra chuỗi có chứa "hello" theo thứ tự không. **Tag đề:** greedy,strings **Hướng giải:** Duyệt chuỗi để tìm các ký tự 'h','e','l','l','o' liên tiếp *Ví dụ* Input aherolloew Output YES **CODE AC** ```cpp= #include <iostream> using namespace std; int main(){ string s,t="hello";cin>>s;int j=0; for(char c:s) if(c==t[j]) j++; cout<<(j==5?"YES":"NO"); return 0; } ``` ::::: :::::spoiler B31. 467A **Link bài:** https://codeforces.com/problemset/problem/467/A ![Screenshot 2025-06-25 144621](https://hackmd.io/_uploads/SybSJPYVeg.png) **Tóm tắt đề:** Đếm số phòng có sức chứa còn trống >=2 người. **Tag đề:** Implementation. **Hướng giải:** kiểm tra điều kiện q-p>=2 cho mỗi phòng. *Ví dụ* Input 3 1 1 2 2 3 3 Output 0 **CODE AC** ```cpp= #include <iostream> using namespace std; int main(){ int n,p,q,c=0;cin>>n; while(n--){cin>>p>>q;if(q-p>=2) c++;} cout<<c; return 0; } ``` ::::: :::::spoiler B32. 122A **Link bài:** https://codeforces.com/problemset/problem/122/A ![Screenshot 2025-06-25 180025](https://hackmd.io/_uploads/B1I9KvY4xe.png) **Tóm tắt đề:** Kiểm tra số có chia hết cho số may mắn (chỉ gồm 4 và 7) nào không **Tag đề:** brute force,number theory **Hướng giải:** -Tạo danh sách số may mắn (4,7,44,47,...,777) -Kiểm tra số nhập vào có chia hết cho bất kỳ số may mắn nào không. *Ví dụ* Input 94 Output YES **CODE AC** ```cpp= #include <iostream> using namespace std; int main(){ int n;cin>>n; int l[]={4,7,44,47,74,77,444,447,474,477,744,747,777,774} for(int x:l) if(n%x==0) {cout<<"YES";return 0;} cout<<"NO"; return 0; } ``` ::::: :::::spoiler B33. 334A **Link bài:** https://codeforces.com/problemset/problem/334/A ![Screenshot 2025-06-25 180031](https://hackmd.io/_uploads/r13qtvY4gg.png) **Tóm tắt đề:** Đếm số nhóm nam châm khi các cực cùng dấu đẩy nhau. **Tag đề:** Implementation **Hướng giải:** Đếm số lần thay đổi trạng thái giữa 2 nam châm liên tiếp. *Ví dụ* Input 6 10 10 10 01 10 10 Output 3 **CODE AC** ```cpp= #include <iostream> using namespace std; int main(){ int n,g=1;cin>>n; string p,c;cin>>p; while(--n){cin>>c;if(c!=p) g++;p=c;} cout<<g; return 0; } ``` ::::: :::::spoiler B34. 486A **Link bài:** https://codeforces.com/problemset/problem/486/A ![Screenshot 2025-06-25 180039](https://hackmd.io/_uploads/rk7oYPF4gx.png) **Tóm tắt đề:** Tính f(n)=-1+2-3+..+(-)n. **Tag đề:** implementation,math. **Hướng giải:** -Nếu n chẵn: f(n)=n/2 -Nếu n lẻ: f(n)=-(n+1)/2 *Ví dụ* Input 4 Output 2 ```cpp= #include <iostream> using namespace std; int main(){ long long n;cin>>n; cout<<(n%2==0?n/2:-(n+1)/2); return 0; } ``` ::::: :::::spoiler B35 136A **Link bài:** https://codeforces.com/problemset/problem/136/A ![Screenshot 2025-06-25 180044](https://hackmd.io/_uploads/SycotDY4lx.png) **Tóm tắt đề:** Cho mảng p(người i tặng cho p[i],tìm mảng đảo ngược ai tìm quà cho bạn). **Tag đề:** implementation **Hướng giải:** tạo mảng kết quả ans[p[i]]=i. *Ví dụ* Input 4 2 3 4 1 Output 4 1 2 3 **CODE AC** ```cpp= #include <iostream> using namespace std; int main(){ int n;cin>>n;int p[n+1],ans[n+1]; for(int i=1;i<=n;i++) cin>>p[i],ans[p[i]]=i; for(int i=1;i<=n;i++) cout<<ans[i]<<" "; return 0; } ``` ::::: :::::spoiler B36. 200B **Link bài:** https://codeforces.com/problemset/problem/200/B ![Screenshot 2025-06-25 180049](https://hackmd.io/_uploads/S1PhKDYVeg.png) **Tóm tắt đề:** Tính tỷ lệ trung bình phần trăm nước ép trong hỗn hợp. **Tag đề:** implementation,math. **Hướng giải:** Tính trung bình cộng các phần trăm *Ví dụ* Input 4 0 25 50 75 Output 37.500000000000 **CODE AC** ```cpp= #include <iostream> using namespace std; int main(){ int n;cin>>n;double s=0; for(int i=0;i<n;i++) {int x;cin>>X;s+=x;} cout<<s/n; return 0; } ``` ::::: :::::spoiler B37. 160A **Link bài:** https://codeforces.com/problemset/problem/106/A ![Screenshot 2025-06-25 180054](https://hackmd.io/_uploads/rya2KvK4lx.png) **Tóm tắt đề:** Chọn ít nhất số đồng xu sao cho tổng lớn hơn tổng còn lại. **Tag đề:** greedy,sortings **Hướng giải:** -Sắp xếp giảm dần. -Cộng dồn đến khi vượt nửa tổng. *Ví dụ* Input 2 3 3 Output 2 **CODE AC** ```cpp= #include <iostream> #include <algorithm> using namespace std; int main(){ int n;cin>>n;int a[n],s=0,c=0,cnt=0; for(int i=0;i<n;i++) cin>>a[i], sum+=a[i]; sort(a,a+n,greater<int>()); for(int x:a){if(c>s/2) break; c+=x;cnt++} cout <<cnt; return 0; } ``` ::::: :::::spoiler B38. 318A **Link bài:** https://codeforces.com/problemset/problem/318/A ![Screenshot 2025-06-26 140540](https://hackmd.io/_uploads/rkUJqUjVll.png) **Tóm tắt đề** Cho dãy số [1,3,5,...,2,4,6,...], tìm số ở vị trí thứ k. **Tag đề:** math **Hướng giải:** -Nếu k<=(n+1)/2 ->số lẻ: 2k-1. -Ngược lại->số chẵn: 2(k-(n+1)/2). *Ví dụ* Input 10 3 Output 5 **CODE AC** ```cpp= #include <iostream> using namespace std; int main(){ long long n,k;cin>>n,k; long long m=(n+1)/2; cout<<(k<=m?2*k-1:2*(k-m)); return 0; } ``` ::::: :::::spoiler B39. 288A **Link bài:** https://codeforces.com/problemset/problem/288/A ![Screenshot 2025-06-26 140546](https://hackmd.io/_uploads/SJTJqIoElg.png) **Tóm tắt đề:** Đếm số lượng móng ngựa cần mua thêm để có 4 màu khác nhau. **Tag đề:** implementation. **Hướng giải:** dùng set để loại bỏ trùng lặp, kết quả là 4-set.size(). *Ví dụ* Input 1 2 3 1 Output 1 **CODE AC** ```cpp= #include <iostream> #include <set> using namespace std; int main(){ set<int> s;int x; for (int i=0;i<4;i++){cin>>x;s.insert(x);} cout<<4-s.size(); return 0; } ``` ::::: :::::spoiler B40. 61A **Link bài:** https://codeforces.com/problemset/problem/61/A ![Screenshot 2025-06-26 140551](https://hackmd.io/_uploads/S1Exq8sVgg.png) **Tóm tắt đề:** XOR(hoặc loại trừ) hai số nhị phân cùng độ dài. **Tag đề:** implementation **Hướng giải:** so sánh từng bit, in '0' nếu giống,'1' nếu khác. *Ví dụ* Input 1010 1100 Output 0110 **CODE AC** ```cpp= #include <iostream> using namespace std; int main(){ string a,b;cin>>a>>b; for (int i=0;i<a.size();i++) cout<< (a[i]!=b[i]?'1':'0'); return 0; } ``` ::::: :::::spoiler B41. 705A **Link bài:** https://codeforces.com/problemset/problem/705/A ![Screenshot 2025-06-26 140555](https://hackmd.io/_uploads/rJAxq8s4le.png) **Tóm tắt đề:** In chuỗi "I hate ... I love ..." lặp lại n lần. **Tag đề:** implementation. **Hướng giải:** Dùng vòng lặp nối chuỗi xen kẽ "hate" và "love". *Ví dụ* Input 2 Output I hate that I love it **CODE AC** ```cpp= #include <iostream> using namespace std; int main(){ int n;cin>>n; for(int i=1;i<=n;i++){ cout << "I "<< (i%2? "hate":"love") <<(i==n?" it":" that "); return 0; } } ``` ::::: :::::spoiler B42. 1328A **Link bài:** https://codeforces.com/problemset/pproblem/1328/A ![Screenshot 2025-06-26 140559](https://hackmd.io/_uploads/S1TWcLiNeg.png) **Tóm tắt đề:** Tìm số bước nhỏ nhất để a chia hết cho b. **Tag đề:** math. **Hướng giải:** Kết quả là (b-a%b)%b. *Ví dụ* Input 5 10 4 13 9 100 13 123 456 92 46 Output 2 5 4 333 0 **CODE AC** ```cpp= #include <iostream> using namespace std; int main(){ int t;cin>>t; while(t--){ int a,b;cin>>a>>b; cout<<(a%b==0?0:b-a%b)<<'\n'; return 0; } } ``` ::::: :::::spoiler B43. 133A **Link bài:** https://codeforces.com/problemset/problem/133/A ![Screenshot 2025-06-26 140604](https://hackmd.io/_uploads/HkvQqLjNeg.png) **Tóm tắt đề:** Kiểm tra chuỗi có ký tự 'H', 'Q' hoặc '9' không. **Tag đề:** implementation **Hướng giải:** -Duyệt chuỗi, nếu có một trong các ký tự trên in "YES". -Nếu không, in "NO". *Ví dụ* Input stupid Output NO **CODE AC** ```cpp= #include <iostream> using namespace std; int main(){ string s;cin>>s; for (char c:s) if(c=='H'||c=='Q'||c=='9') {cout<<"YES";return 0;} cout<<"NO"; return 0; } ``` ::::: :::::spoiler B44. 405A **Link bài:** https://codeforces.com/problemset/problem/405/A ![Screenshot 2025-06-26 140617](https://hackmd.io/_uploads/BJz4q8iEge.png) **Tóm tắt đề:** Mô phỏng hiệu ứng trọng lực làm các khối rới sang phải. **Tag đề:** greedy,implementation,sortings. **Hướng giải:** Sắp xếp mảng tăng dần. *Ví dụ* Input 3 3 2 1 Output 1 2 3 **CODE AC** ```cpp= #include <iostream> #inlcude <algorithm> using namespace std; int main(){ int n;cin>>n;int a[n]; for (int i=0;i<n;i++) cin>>a[i]; sort(a,a+n) for(int x:a) cout<<x<<" "; return 0; } ``` ::::: :::::spoiler B45. 520A **Link bài:** https://codeforces.com/problemset/problem/520/A ![Screenshot 2025-06-26 140620](https://hackmd.io/_uploads/Hk_N9LiVxl.png) **Tóm tắt đề:** Kiểm tra chuỗi có đủ 26 chữ cái không(không phân biệt hoa thường). **Tag đề:** implementation,strings **Hướng giải:** Dùng mảng đếm tần suất xuất hiện. *Ví dụ* Input 5 Hello Ouput NO **CODE AC** ```cpp= #include <iostream> #include <cctype> using namespace std; int main(){ int n;string s;cin>>n>>s; bool f[26]={false} for(char c:s) f[tolower(c)-'a']=true; for(bool x:f) if(!x){cout<<"NO";return 0;} cout<<"YES"; return 0; } ``` ::::: :::::spoiler B46. 469A **Link bài:** https://codeforces.com/problemset/problem/469/A ![Screenshot 2025-06-26 140626](https://hackmd.io/_uploads/HJAEqUoVee.png) **Tóm tắt đề:** Kiểm tra X và Y có thể hoàn thành cấp độ từ 1 đến n không. **Tag đề:** greedy,implementation. **Hướng giải:** Dùng set để gộp các cấp độ, kiểm tra đủ n phần tử. *Ví dụ* Input 4 3 1 2 3 2 2 4 Output I become the guy. **CODE AC** ```cpp= #include <iostream> #include <set> using namespace std; int main(){ int n,p,q,x;cin>n; set<int> l; cin>>p;while(p--){cin>>x;l.insert(x);} cin>>q;while(q--){cin>>x;l.insert(x);} cout<<(l.size()==n?"I become the guy.":"Oh, my keyboard!"); return 0; } ``` ::::: :::::spoiler B47. 144A **Link bài:** https://codeforces.com/problemset/problem/144/A ![Screenshot 2025-06-26 140633](https://hackmd.io/_uploads/r1DrcLs4el.png) **Tóm tắt đề:** Tìm số bước đổi chỗ để đưa người cao nhất lên đầu và người thấp nhất xuống cuối. **Tag đề:** implementation. **Hướng giải:** -Tìm vị trí người cao nhất(ưu tiên người bên trái) và thấp nhất(ưu tiên bên phải) -Số bước = pma+(n-1-pmi)-(pma>pmi?1:0). *Ví dụ* Input 4 33 44 11 22 Output 2 **CODE AC** ```cpp= #include <iostream> using namespace std; int main(){ int n,x,mav=0,miv=101,pma,pmi; cin>>n; for(int i=0;i<n;i++){ cin>>x; if(x>mav){mav=x;pma=i;} if(x<=miv){miv=x;pmi=i;} } cout<<pma+(n-1-pmi)-(pma>pmi?1:0); return 0; } ``` ::::: :::::spoiler B48. 996A **Link bài:** https://codeforces.com/problemset/problem/996/A ![Screenshot 2025-06-27 142939](https://hackmd.io/_uploads/SJnxoIRVee.png) **Tóm tắt đề:** Đổi số tiền n USD thành các mệnh giá 1,2,5,10,20,100 ít nhất có thể. **Tag đề:** dp,greedy **Hướng giải:** -Ưu tiên dùng mệnh giá lớn nnhất trước. -Công thức: số tờ = n/mệnh giá và cập nhật n=n%mệnh giá. *Ví dụ* Input 125 Output 3 **CODE AC** ```cpp= #include <iostream> using namespace std; int main(){ int n,a=0; cin>>n; int b[]={100,20,10,5,2,1}; for (int bi:b){ a+=n/bi; n%=bi; } cout<<a; return 0; } ``` ::::: :::::spoiler B49. 479A **Link bài:** https://codeforces.com/problemset/problem/479/A ![Screenshot 2025-06-27 142944](https://hackmd.io/_uploads/SJIZsLA4ee.png) **Tóm tắt đề:** cho ba số a,b,c. Tính giá trị lớn nhất của các biểu thức: a+b*c a*(b+c) a*b*c (a+b)*c a+b+c **Tag đề:** brute forces, math **Hướng giải:** -Tính tất cả 5 biểu thức có thể -Chọn giá trị lớn nhất. *Ví dụ* Input 1 2 3 Output 9 **CODE AC** ```cpp= #include <iostream> #include <algorithm> using namespace std; int main(){ int a,b,c;cin>>a>>b>>c; cout << max({a+b+c,(a+b)*c,a*b*c,a*(b+c),a+b*c}); return 0; } ``` ::::: :::::spoiler B50. 148A **Link bài:** https://codeforces.com/problemset/problem/148/A ![Screenshot 2025-06-27 142837](https://hackmd.io/_uploads/HyyWhUREge.png) **Tóm tắt đề:** -Có d con rồng, mỗi con rồng sẽ bị tấn công nếu số thứ tự của nó chia hết cho k,m,n,l. -Đếm số rồng bị thương. **Tag đề:** constructive algorithms, implemtation,math. **Hướng giải:** -Duyệt từ 1 đến d -Kiểm tra từng số có chia hết cho ít nhất 1 trong bốn số k,m,n,l. **CODE AC** ```cpp= #include <iostream> using namespace std; int main(){ int k,m,n,l,d,c=0;cin>>k>>m>>n>>l>>d; for (int i=1;i<=d;i++){ if(i%k==0||i%m==0||i%n==0||i%l==0) c++; } cout<<c; return 0; } ``` ::::: :::::spoiler B51. 443A **Link bài:** https://codeforces.com/problemset/problem/443/A ![Screenshot 2025-06-27 142951](https://hackmd.io/_uploads/SJ1MjICEel.png) **Tóm tắt đề:** Đếm số chữ cái khác nhau trong tập hợp(bỏ qua dấu phẩy và khoảng trắng). **Tag đề:** constructive algorithms, implementation. **Hướng giải:** dùng set để lưu các chữ cái duy nhất. *Ví dụ* Input {a,c,d,e,r,r,s} Output 6 **CODE AC** ```cpp= #include <iostream> #include <set> using namespace std; int main(){ set<char> s; char c; while(cin>>c) if(isalpha(c)) s.insert(c); cout<< s.size(); return 0; } ``` ::::: :::::spoiler B52. 785A **Link bài:** https://codeforces.com/problemset/problem/785/A ![Screenshot 2025-06-27 142955](https://hackmd.io/_uploads/r1Tzs8ANgg.png) **Tóm tắt đề:** Tính tổng số mặt của các khối đa diện (Tetrahedron:4,Cube:6,Octahedron:8,...) **Tag đề:** implementation,strings. **Hướng giải:** Dùng map ánh xạ tên khối đa diện với số mặt tương ứng. *Ví dụ* Input 3 Icosahedron Tetrahedron Dodecahedron Output 36 **CODE AC** ```cpp= #include <iostream> #include <map> using namespace std; int main(){ map<string,int> m={{"Tetrahedron",4},{"Cube",6},{"Octahedron",8},{"Dodecahedron",12},{"Icosahedron",20}}; int n,s=0;cin>>n; while(n--) {string x;cin>>x;s+=m[x];} cout<<s; return 0; } ``` ::::: :::::spoiler B53. 208A **Link bài:** https://codeforces.com/problemset/problem/208/A ![Screenshot 2025-06-27 143000](https://hackmd.io/_uploads/rJdQj8ANee.png) **Tóm tắt đề:** Chuyển đổi chuỗi Dupstep (có nhiều WUB) về lời bài hát gốc(thay WUB bằng khoảng trắng). **Tag đề:** strings **Hướng giải:** Dùng regex hoặc duyệt chuỗi để thay thế. *Ví dụ* Input WUBWEWUBAREWUBWUBTHEWUBCHAMPIONS Output WE ARE THE CHAMPION **CODE AC** ```cpp= #include <iostream> #include <regex> using namespace std; int main(){ string s;cin>>s; cout<<regex_replace(s,regex("WUB")," "); return 0 } ``` ::::: :::::spoiler B54. 580A **Link bài:** https://codeforces.com/problemset/problem/580/A ![Screenshot 2025-06-27 143005](https://hackmd.io/_uploads/B1JVsL0Vgx.png) **Tóm tắt đề:** Tìm dãy con tăng dài nhất trong mảng. **Tag đề:** brute force,dp,implementation **Hướng giải:** Duyệt mảng, đếm độ dài dãy con tăng liên tiếp. *Ví dụ* Input 3 2 2 9 Output 3 **CODE AC** ```cpp= #include <iostream> using namespace std; int main(){ int n,c=1,ml=1;cin>>n; int a[n];for(int &x:a) cin>>x; for(int i=1;i<n;i++) { c=(a[i]>=a[i-1])?c+1:1; ml=max(ml,c); } cout<<ml; return 0; } ``` ::::: :::::spoiler B55. 268A **Link bài:** https://codeforces.com/problemset/problem/268/A ![Screenshot 2025-06-27 143010](https://hackmd.io/_uploads/B1_Ej8AVll.png) **Tóm tắt đề:** Đếm số cặp đội có màu áo khách trùng màu áo nhà của đội khác. **Tag đề:** brute force. **Hướng giải:** Duyệt qua tất cả các cặp đội. *Ví dụ* Input 3 1 2 2 4 3 4 Output 1 **CODE AC** ```cpp= #include <iostream> using namespace std; int main(){ int n,ct=0;cin>>n; int h[n],a[n]; for (int i=0;i<n;i++) cin>>h[i]>>a[i]; for (int i=0;i<n;i++) for(int j=0;j<n;j++) if(i!=j&&h[i]==a[j]) ct++; cout<<ct; return 0; } ``` ::::: :::::spoiler B56. 25A **Link bài:** https://codeforces.com/problemset/problem/25/A ![Screenshot 2025-06-27 143016](https://hackmd.io/_uploads/rkLHi8REgx.png) **Tóm tắt đề:** Tìm vị trí khác tính chẵn lẻ so với các số còn lại. **Tag đề:** brute force **Hướng giải:** Dếm số chẵn lẻ, tìm số duy nhất khác biệt. *Ví dụ* Input 4 5 6 9 7 Output 2 **CODE AC** ```cpp= #include <iostream> using namespace std; int main(){ int n,e=0;cin>>n; int a[n]; for(int &x:a){cin>>x;e+=(x%2==0);} for(int i=0;i<n;i++) if((e>1&&a[i]%2!=0)||(e<=1&&a[i]%2==0)) {cout<<i+1;break;} return 0; } ``` ::::: :::::spoiler B57. 4C **Link bài:** https://codeforces.com/problemset/problem/4/C ![Screenshot 2025-06-27 143021](https://hackmd.io/_uploads/HyTBjU0Veg.png) **Tóm tắt đề:** Xử lý yêu cầu đăng ký tên, nếu trùng thì thêm số thứ tự. **Tag đề:** data structures, hashing, implementation. **Hướng giải:** Dùng map để lưu số lần xuất hiện của mỗi tên. *Ví dụ* Input 4 abacaba acaba abacaba acab Output OK OK abacaba1 OK **CODE AC** ```cpp= #include <iostream> #include <mapmap> using namespace std; int main(){ int n;cin>>n; map<string,int> m; while(n--){ string s;cin>>s; if((m[s]==0) cout<<"OK\n"); else cout <<s<<m[s]<<'\n'; m[s]++; } return 0; } ``` ::::: :::::spoiler B58. 158B **Link bài:** https://codeforces.com/problemset/problem/158/B ![Screenshot 2025-06-27 143027](https://hackmd.io/_uploads/Hk88j8RNxg.png) **Tóm tắt đề:** Tính số taxi ít nhất cần dùng để chở các món (mỗi taxi tối đa 4 người) **Tag đề:** *special problem,greedy, implementation **Hướng giải:** Ưu tiên xếp nhóm 4 người . *Ví dụ* Input 5 1 2 4 3 3 Output 4 **CODE AC** ```cpp= #include <iostream> using namespace std; int main(){ int n,ct[5]={0},a=0;cin>>n; while (n--){int x;cin>>x;ct[x]++;} a+=ct[4]; a+=ct[3];ct[1]=max(0,ct[1]-ct[3]); a+=ct[2]/2;ct[2]%=2; if(ct[2]){a++;ct[1]=max(0,ct[1]-2);} a+=(ct[1]+3)/4; cout<<a; return 0; } ``` ::::: :::::spoiler B59. 1335A **Link bài:** https://codeforces.com/problemset/problem/1335/A ![Screenshot 2025-06-27 143031](https://hackmd.io/_uploads/rJiDoICNxe.png) **Tóm tắt đề:** Tính số cách chia kẹo thành 2 phần sao cho phần đầu nhiều hơn phần sau. **Tag đề:** math; **Hướng giải:** Kết quả là floor((n-1)/2). *Ví dụ* Input 9 Output 4 **CODE AC** ```cpp= #include <iostream> using namespace std; int main(){ int t; cin>>t; while (t--){ int n;cin>>n; cout<<(n-1)/2<<'\n'; } return 0; } ``` ::::: :::::spoiler B60. 510A **Link bài:** https://codeforces.com/problemset/problem/510/A ![Screenshot 2025-06-28 091911](https://hackmd.io/_uploads/SyLOsLRVxl.png) **Tóm tắt đề:** Vẽ con rắn theo hoa văn với kích thước nxm. **Tag đề:** math **Hướng giải:** -Dòng lẻ: in toàn bộ '#' -Dòng chẵn: xen kẻ '#' và '.' theo vị trí. *Ví dụ* Input 3 7 Output ####### ... ... ... ..# (con gõ nhiều dấu "." liên tục không được nên con làm vậy nha) ####### **CODE AC** ```cpp= #include <iostream> using namespace std; int main(){ int n,m;cin>>n>>m; for(int i=1;i<=n;i++){ for (int j=1;j<=m;i++){ if(i%2==1) cout<<"#"; else cout<< ((i%4==0&&j==1)||(i%4!=0&&j==m)?"#":"."); } cout<<"\n"; } } ``` ::::: :::::spoiler B61. 131A **Link bài:** https://codeforces.com/problemset/problem/131/A ![Screenshot 2025-06-28 101748](https://hackmd.io/_uploads/r10uoICEge.png) **Tóm tắt đề:** Chuyển đổi chuỗi theo quy tắc Caps Lock(chữ thường <-> chữ hoa). **Tag đề:** implementation,strings. **Hướng giải:** Nếu tất cả ký tự sau ký tự đầu đều viết hoa -> đảo ngược case. *Ví dụ* Input hELLO Output Hello **CODE AC** ```cpp= #include <iostream> #include <cctype> using namespace std; int main(){ string s;cin>>s; bool need=true; for(int i=1;i<s.size();i++) if(islower(s[i])) {need=false;break;} if(need){ for(char &c:s) c=islower(c)?toupper(c):tolower(c); } cout <<s; return 0; } ``` ::::: :::::spoiler B62. 141A **Link bài:** https://codeforces.com/problemset/problem/141/A ![Screenshot 2025-07-01 091340](https://hackmd.io/_uploads/H1aANpxBeg.png) **Tóm tắt đề:** Kiểm tra xem các chữ cái trong 2 chuỗi đầu có bằng chuỗi thứ 3 không. **Tag đề:** implementation,sortings,strings. **Hướng giải:** Sắp xếp và so sánh tổng hai chuỗi đầu với chuỗi thứ 3. *Ví dụ* Input Y W YW Output YES **CODE AC** ```cpp= #include <iostream> #include <algorithm> using namespace std; int main(){ string a,b,c;cin>>a>>b>>c; a+=b; sort(a.begin(),a.end()); sort(c.begin(),c.end()); cout<<(a==c?"YES":"NO"); return 0; } ``` ::::: :::::spoiler B63. 1352A **Link bài:** https://codeforces.com/problemset/problem/1352/A ![image](https://hackmd.io/_uploads/ry0DVplrxe.png) **Tóm tắt đề:** phân tích số thành tổng các số tròn (có dạng 10^k) **Tag đề:** implementation,math **Hướng giải:** tách từng chứ số bằng mod và nhân 10^(vị trí) *Ví dụ* Input 1207 Output 7 200 1000 **CODE AC** ```cpp= #include <iostream> #include <vector> using namespace std; int main(){ int t;cin>>t; while(t--){ int n;cin>>n; vector<int> r; int mu; while(n){ if(n%10) r.push_back(n%10*mu); n/=10;mu*=10; } cout<<r.size()<<endl; for(int i:r) cout<<i<<" "; cout<<endl; } return 0; } ``` ::::: :::::spoiler B64. 723A **Link bài:** https://codeforces.com/problemset/problem/723/A ![Screenshot 2025-06-30 141020](https://hackmd.io/_uploads/Sk_mMagBel.png) **Tóm tắt đề:** Tìm điểm gặp mặt sao cho tổng khoảng cách từ 3 nhà là nhỏ nhất. **Tag đề:** implementation,math,sortings, **Hướng giải:** chọn trung vị của ba điểm *Ví dụ* Input 7 1 4 Output 6 **CODE AC** ```cpp= #include <iostream> #include <algorithm> using namespace std; int main(){ int x[3];cin>>x[0]>>x[1]>>x[2]; sort(x,x+3); cout<<x[2]-x[0]; return 0; } ``` ::::: :::::spoiler B65. 230A **Link bài:** https://codeforces.com/problemset/problem/230/A ![Screenshot 2025-06-30 141025](https://hackmd.io/_uploads/H1N4fplBxx.png) **Tóm tắt đề:** Xác định xem có thể đánh bại tất cả con rồng khi sức mạnh tăng dần. **Tag đề:** greedy,sortings **Hướng giải:** sắp xếp rồng theo sức mạnh tăng dần rồi kiểm tra. *Ví dụ* Input 10 1 100 100 Output NO **CODE AC** ```cpp= #include <iostream> #include <algorithm> using namespace std; int main(){ int s,n;cin>>s>>n; pair<int,int>d[n]; for(auto &p:d) cin>>p.first>>p.second; sort(d,d+n); for(auto p:d){ if(s<=p.first){ cout<<"NO";return 0; } s+=p.second; } cout<<"YES"; return 0; } ``` ::::: :::::spoiler B66. 1742A **Link bài:** https://codeforces.com/problemset/problem/1742/A ![Screenshot 2025-06-30 141029](https://hackmd.io/_uploads/r1pNM6lrlg.png) **Tóm tắt đề:** Kiểm tra xem tổng hai số này có bằng số còn lại không. **Tag đề:** implementation **Hướng giải:** So sánh từng cặp số *Ví dụ* Input 1 2 3 Output YES **CODE AC** ```cpp= #include <iostream> using namespace std; int main(){ int x; cin>>x; int a,b,c; for(int i=0;i<x;i++){ cin>>a>>b>>c; if(a==b+c||b==a+c||c==a+b){ cout<<"YES"<<endl; } else { cout<<"NO"<<endl; } } return 0; } ``` ::::: :::::spoiler B67. 427A **Link bài:** https://codeforces.com/problemset/problem/427/A ![Screenshot 2025-06-30 141032](https://hackmd.io/_uploads/HJ-LM6xHgg.png) **Tóm tắt đề:** Tính số tội phạm không bị bắt khi lực lượng cảnh sát thiếu hụt. **Tag đề:** implementation **Hướng giải:** Theo dõi số cảnh sát hiện có. *Ví dụ* Input 11 -1 -1 2 -1 -1 -1 -1 -1 -1 -1 -1 Output 8 **CODE AC** ```cpp= #include <iostream> using namespace std; int main(){ int n,x,p=0,c=0; cin>>n; while(n--){ cin>>x; if(x>0) p+=x; else if(p>0) p--; else c++; } cout<<c; return 0; } ``` ::::: :::::spoiler B68. 337A **Link bài:** https://codeforces.com/problemset/problem/337/A ![Screenshot 2025-06-30 141037](https://hackmd.io/_uploads/SkpUz6grxx.png) **Tóm tắt đề:** Chọn m món quà có độ chênh lệch nhỏ nhất từ n món. **Tag đề:** greedy **Hướng giải:** Sắp xếp và tìm hiệu nhỏ nhật giữa i+m-1 và i *Ví dụ* 4 6 10 12 10 7 5 22 Output 5 **CODE AC** ```cpp= #include <iostream> #include <algorithm> #include <climits> using namespace std; int main(){ int n,m,f[50],md=INT_MAX; cin>>n>>m; for(int i=0;i<m;i++) cin>>f[i]; sort(f,f+m); for(int i=0;i<=m-n;i++) {md=min(md,f[i+n-1]-f[i]);} cout<<md; return 0; } ``` ::::: :::::spoiler B69. 230B **Link bài:** https://codeforces.com/problemset/problem/230/B ![Screenshot 2025-06-30 141040](https://hackmd.io/_uploads/B1_wMalrxl.png) **Tóm tắt đề:** kiểm tra số có đúng 3 ước số **Tag đề:** binary search, implementation, math, number theory **Hướng giải:** kiểm tra căn bậc hai của số đó có phải số nguyên tố không. *Ví dụ* Input 49 Output YES **CODE AC** ```cpp= #include <iostream> #include <vector> #include <cmath> using namespace std; const int L = 1000000; vector<bool> ip(L + 1, true); void s() { ip[0] = ip[1] = false; for (int i = 2; i * i <= L; ++i) { if (ip[i]) { for (int j = i * i; j <= L; j += i) { ip[j] = false; } } } } int main() { s(); int n; cin >> n; while (n--) { long long x; cin >> x; long long r = sqrt(x); if (r * r == x && ip[r]) { cout << "YES\n"; } else { cout << "NO\n"; } } return 0; } ``` ::::: :::::spoiler B70. 750A **Link bài:** https://codeforces.com/problemset/problem/750/A ![Screenshot 2025-06-30 141044](https://hackmd.io/_uploads/S1hKGpeSxl.png) **Tóm tắt đề:** -Giới hạn thời gian 240-k phút. -Mỗi bài thứ i tốn 5*i phút. -Tìm số bài tối đa có thể làm. **Hướng giải:** Binary kiểm tra điều kiện 5*m*(m+1)/2<=240-k *Ví dụ* Input 4 190 Output 4 **CODE AC** ```cpp= #include <iostream> using namespace std; int main(){ int n,k,i=0,t=0; cin>>n>>k; while(t+5*(i+1)<=240-k&&i<n){ i++; t+=5*i; } cout<<i; return 0; } ``` ::::: :::::spoiler B71. 155A **Link bài:** https://codeforces.com/problemset/problem/155/A ![Screenshot 2025-06-30 141048](https://hackmd.io/_uploads/B1D5GalSgl.png) **Tóm tắt đề:** đếm số lần phá kỉ lục điểm. **Tag đề:** brute force **Hướng giải:** Theo dõi min và max khi duyệt mảngmảng. *Ví dụ* Input 5 100 50 200 150 200 Output 2 **CODE AC** ```cpp= #include <iostream> using namespace std; int main(){ int n,p,mip,map,am=0; cin>>n>>p; mip=map=p; while(--n){ cin>>p; if(p<mip){mip=p;am++;} if(p>map){map=p;am++;} } cout<<am; return 0; } ``` ::::: :::::spoiler B72. 151A **Link bài:** https://codeforces.com/problemset/problem/151/A ![Screenshot 2025-06-30 141052](https://hackmd.io/_uploads/r1NjMplHxl.png) **Tóm tắt đề:** Tìm số bữa tiệc tối đa. **Tag đề:** implementation,math **Hướng giải:** tìm min của các thành phần chia cho yêu cầu. *Ví dụ* Input 3 4 5 10 8 100 3 1 Output 2 **CODE AC** ```cpp= #include <iostream> #include <algorithm> using namespace std; int main(){ int n,k,l,c,d,p,nl,np; cin>>n>>k>>l>>c>>d>>p>>nl>>np; int td=k*l/nl; int ts=c*d; int tts=p/np; cout<<min({td,ts,tts})/n; return 0; } ``` ::::: :::::spoiler B73. 492B **Link bài:** https://codeforces.com/problemset/problem/492/B ![Screenshot 2025-06-30 141058](https://hackmd.io/_uploads/ryG3Gagrgx.png) **Tóm tắt đề:** Tìm bán kính nhỏ nhất để chiếu sáng cả đường. **Tag đề:** binary search,implementation,math,sortings. **Hướng giải:** Sắp xếp mảng, tìm khoảng cách lớn nhất giữa các đèn. *Ví dụ* 5 5 0 2 5 7 10 Output 3.0 **CODE AD** ```cpp= #include <iomanip> #include <iostream> #include <algorithm> using namespace std; int main() { int n,l; cin>>n>>l; int a[n]; for (int i=0;i<n;i++) cin>>a[i]; sort(a,a+n); double mg=max((double)a[0],(double)(l-a[n-1])); for (int i=1;i<n;i++) { mg=max(mg,(a[i]-a[i-1])/2.0); } cout<<fixed<<setprecision(10)<<mg; return 0; } ``` ::::: :::::spoiler B74. 1703A **Link bài:** https://codeforces.com/problemset/problem/1703/A ![Screenshot 2025-06-30 141102](https://hackmd.io/_uploads/BJ62zpxree.png) **Tóm tắt đề:** Kiểm tra chuỗi nhập vào có phải "YES" (không phân biệt hoa hay thường) không **Tag đề:** brute force,implementation,strings **Hướng giải:** Chuyển chuỗi về chữ hoa hoặc thường rồi so sánh, lặp t lần. *Ví dụ* Input yes Output YES **CODE AC** ```cpp= #include <iostream> #include <algorithm> using namespace std; int main(){ int t; string s; cin>>t; while(t--){ cin>>s; transform(s.begin(),s.end(),s.begin(),::toupper); cout<<(s=="YES"?"YES":"NO")<<endl; } return 0; } ``` ::::: :::::spoiler B75. 732A **Link bài:** https://codeforces.com/problemset/problem/732/A ![Screenshot 2025-06-30 141106](https://hackmd.io/_uploads/SkDpMTlBle.png) **Tóm tắt đề:** Tìm số lượng xẻng ít nhất để mua mà không cần thối tiền. **Tag đề:** brute force,constructive algorithms,implementation,math **Hướng giải:** Duyệt từ 1 đến 10 để kiểm tra điều kiện *Ví dụ* Input 117 3 Output 9 **CODE AC** ```cpp= #include <iostream> using namespace std; int main() { int k,r,i=1; cin>>k>>r; while(true) { if ((k*i)%10==0||(k*i)%10==r){ cout<<i; break; } i++; } return 0; } ``` ::::: :::::spoiler B76. 630A **Link bài:** https://codeforces.com/pproblemset/problem/630/A ![Screenshot 2025-06-30 141111](https://hackmd.io/_uploads/rkf0GaxHgx.png) **Tóm tắt đề:** Tìm 2 chữ số cuối của 5^n(n>=2). **Hướng giải:** với mọi n>=2 thì 2 chữ số cuối luôn là 25->xuất 25. *Ví dụ* Input 120920 Output 25 **CODE AC** ```cpp= #include <iostream> int main(){ std::cout<<"25"; return 0; } ``` ::::: :::::spoiler B77. 1154A **Link bài:** https://codeforces.com/problemset/problem/1154/A ![Screenshot 2025-06-30 141115](https://hackmd.io/_uploads/rk2AfaxSex.png) **Tóm tắt đề:** Cho tổng 3 cặp số, tìm 3 số ban đầu **Tag đề:** math **Hướng giải:** Tìm số lớn nhất(tổng của ba số),rồi trừ đi các tổng từng cặp. *Ví dụ* Input 3 6 5 4 Output 2 1 3 **CODE AC** ```cpp= #include <iostream> #include <algorithm> using namespace std; int main(){ int x[4]; for(int i=0;i<4;i++) cin>>x[i]; sort(x,x+4); cout<<x[3]-x[0]<<" "<<x[3]-x[1]<<" "<<x[3]-x[2]; return 0; } ``` ::::: :::::spoiler B78. 581A **Link bài:** https://codeforces.com/problemset/problem/581/A ![Screenshot 2025-06-30 141119](https://hackmd.io/_uploads/rkH17alSlg.png) **Tóm tắt đề:** Tính số ngày mặc 2 tất khác màu và số ngày mặc 2 tất cùng màu. **Tag đề:** implementation. **Hướng giải:** số ngày khác màu là min(a,b),cùng màu là (max(a,b)-min(a,b)). *Ví dụ* Input 3 1 Output 1 1 **CODE AC** ```cpp= #include <iostream> #include <algorithm> using namespace std; int main(){ int a,b; cin>>a>>b; cout<<min(a,b)<<" "<<(max(a,b)-min(a,b))/2; return 0; } ``` ::::: :::::spoiler B79. 381A **Link bài:** https://codeforces.com/problemset/problem/381/A ![Screenshot 2025-06-30 141123](https://hackmd.io/_uploads/rJlgQaxBxl.png) **Tóm tắt đề:** hai người lần lượt chọn số lớn nhất ở đầu hoặc cuối mảng. Tính tổng điểm mỗi người. **Tag đề:** greedy,implementation,two pointers **Hướng giải:** Dùng hai con trỏ ở đầu và cuối mảng,mỗi lượt chọn số lớn hơn. *Ví dụ* Input 4 4 1 2 10 Output 12 5 **CODE AC** ```cpp= #include <iostream> using namespace std; int main(){ int n,a[1000],l=0,r,s=0,d=0,t=0; cin>>n; r=n-1; for(int i=0;i<n;i++) cin>>a[i]; while(l<=r){ if(a[l]>=a[r]) { if(t%2==0) s+=a[l]; else d+=a[l]; l++; } else{ if(t%2==0) s+=a[r]; else d+=a[r]; r--; } t++; } cout<<s<<" "<<d; return 0; } ``` ::::: :::::spoiler B80. 339B **Link bài:** https://codeforces.com/problemset/problem/339/A ![Screenshot 2025-06-30 141128](https://hackmd.io/_uploads/S1y-XTlSll.png) **Tóm tắt đề:** Tính thời gian di chuyển qua các nhà theo thứ tự yêu cầu trên đường tròn. **Tag đề:** implementation. **Hướng giải:** Duyệt mảng yêu cầu, tính thời gian di chuyển giữa các vị trí liên tiếp. *Ví dụ* Input 4 3 3 2 3 Output 6 **CODE AC** ```cpp= #include <iostream> using namespace std; int main(){ long long n,m,c=1,nx,t=0; cin>>n>>m; while(m--){ cin>>nx; if(nx>=c) t+=nx-c; else t+=n-c+nx; c=nx; } cout<<t; return 0; } ``` ::::: :::::spoiler B81. 1692A **Link bài:** https://codeforces.com/problemset/problem/1692/A ![Screenshot 2025-06-30 141136](https://hackmd.io/_uploads/rkpZ7TgBle.png) **Tóm tắt đề:** đếm số vận động viên có thành tích tốt hơn bạn. **Tag đề:** implementation **Hướng giải:** so sánh từng thành tích với thành tích bạn *Ví dụ* Input 4 2 3 1 Output 2 **CODE AC** ```cpp= #include <iostream> using namespace std; int main(){ int t,a,b,c,d; cin>>t; while (t--){ cin>>a>>b>>c>>d; int co=0; if(b>a) co++; if(c>a) co++; if(d>a) co++; cout<<co<<endl; } return 0; } ``` ::::: :::::spoiler B82. 1669A **Link bài:** https://codeofrces.com/problemset/problem/1669/A ![Screenshot 2025-06-30 141140](https://hackmd.io/_uploads/SyvGQagBlg.png) **Tóm tắt đề:** xác định division dựa trên rating **Tag đề:** implementation. **Hướng giải:** kiểm tra rating các khoảng đã cho trong t lần lặp. *Ví dụ* Input 1 1500 Output Division 2 **CODE AC** ```cpp= #include <iostream> using namespace std; int main(){ int t,r; cin>>t; while(t--){ cin>>r; if(r>=1900) cout <<"Division 1\n"; else if(r>=1600) cout<<"Division 2\n"; else if(r>=1400) cout<<"Division 3\n"; else cout<<"Division 4\n"; } return 0; } ``` ::::: :::::spoiler B83. 1676A **Link bài:** https://codeforces.com/problemset/problem/1676/A ![Screenshot 2025-06-30 141145](https://hackmd.io/_uploads/BkMXXpgBlx.png) **Tóm tắt đề:** Xác định tổng ba số đầu có bằng tổng ba số cuối không **Tag đề:** implementation **Hướng giải:** tách dãy số không phân cách thành từng chữ số và so sánh tổng 3 số đầu với 3 số cuối. *Ví dụ* Input 123321 Output YES **CODE AC** ```cpp= #include <iostream> using namespace std; int main(){ int t; string s; cin>>t; while(t--){ cin>>s; int f=(s[0]-'0')+(s[1]-'0')+(s[2]-'0'); int sec=(s[3]-'0')+(s[4]-'0')+(s[5]-'0'); cout<<(f==sec?"YES":"NO")<<endl; } return 0; } ``` ::::: :::::spoiler B84. 189A **Link bài:** https://codeforces.com/problemset/problem/189/A ![Screenshot 2025-06-30 141148](https://hackmd.io/_uploads/ryhQ7Txrll.png) **Tóm tắt đề:** Cắt dây thành các đoạn có độ dài a,b,c sao cho tổng độ dài bằng n. **Tag đề:** dp,implementation. **Hướng giải:** Dùng quy hoạch động hoặc duyệt tất cả khả năng. *Ví dụ* Input 5 5 3 2 Output 2 **CODE AC** ```cpp= #include <iostream> #include <algorithm> using namespace std; int main(){ int n,a,b,c,mp=0;cin>>n>>a>>b>>c; for(int i=0;i<=n/a;i++){ for(int j=0;j<=(n-i*a)/b;j++){ int r=n-i*a-j*b; if(r>=0&&r%c==0){mp=max(mp,i+j+r/c);} } } cout<<mp; return 0; } ``` ::::: :::::spoiler B85. 1409A **Link bài:** https://codeforces.com/problemset/problem/189/A ![Screenshot 2025-06-30 141158](https://hackmd.io/_uploads/rk24QaeBll.png) **Tóm tắt đề:** Tìm số bước tối thiểu để biến a thành b, mỗi bước thay đổi tối đa 10. **Tag đề:** greedy,math. **Hướng giải:** Tính hiệu và chia 10 (làm tròn lên) *Ví dụ* Input 5 13 Output 1 **CODE AC** ```cpp= #include <iostream> #include <cmath> using namespace std; int main(){ int t,a,b; cin>>t; while(t--){ cin>>a>>b; int d=abs(a-b); cout<<(d+9)/10<<endl; } return 0; } ``` ::::: :::::spoiler B86. 1807A **Link bài:** https://codeforces.com/problemset/problem/1807/A ![Screenshot 2025-06-30 141153](https://hackmd.io/_uploads/HJluQaerxx.png) **Tóm tắt đề:** Cho 3 số a,b,c. Xác định phép toán (+) hoặc (-) thỏa mãn a+(-)b=c. **Tag đề:** implementation **Hướng giải:** So sánh a+b và a-b với c. *Ví dụ* Input 1 2 3 Output + **CODE AC** ```cpp= #include <iostream> using namespace std; int main(){ int t,a,b,c; cin>>t; while(t--){ cin>>a>>b>>c; cout<<(a+b==c?"+":"-")<<endl; } return 0; } ``` ::::: :::::spoiler B87. 1399A **Link bài:** https://codeforces.com/problemset/problem/1399/A ![Screenshot 2025-06-30 141202](https://hackmd.io/_uploads/B1R_QagHgx.png) **Tóm tắt đề:** Kiểm tra có thể xóa các phần tử sao cho mảng còn lại có tất cả phần tử bằng nhau không. **Tag đề:** greedy,sortings **Hướng giải:** Sắp xếp mảng và kiểm tra hiệu giữa các phần tử liên tiếp. *Ví dụ* Input 3 1 2 2 Output YES **CODE AC** ```cpp= #include <algorithm> #include <iostream>> using namespace std; int main(){ int t,n,a[50]; cin>>t; while(t--){ cin>>n; for(int i=0;i<n;i++) cin>>a[i]; sort(a,a+n); bool p= true; for(int i=1;i<n;i++){ if(a[i]-a[i-1]>1) {p=false;break;} } cout<<(p?"YES":"NO")<<endl; } return 0; } ``` ::::: :::::spoiler B88. 706B **Link bài:** https://codeforces.com/problemset/problem/706/B ![Screenshot 2025-06-30 141206](https://hackmd.io/_uploads/ryhtmalrlx.png) **Tóm tắt đề:** Với mỗi số tiền cho trước, đếm số cửa hàng có giá <= số tiền đó. **Tag đề:** binary search,dp,implementation. **Hướng giải:** sắp xếp mảng giá và dùng binary search. *Ví dụ* Input 5 3 10 8 6 11 4 10 3 11 1 **CODE AC** ```cpp= #include <iostream> #include <algorithm> using namespace std; int main(){ int n,q,x[100000]; cin>>n; for(int i=0;i<n;i++) cin>>x[i]; sort(x,x+n); cin>>q; while(q--){ int m;cin>>m; cout<<upper_bound(x,x+n,m)-x<<endl; } return 0; } ``` ::::: :::::spoiler B89. 1475A **Link bài:** https://codeforces.com/problemset/problem/1475/A ![Screenshot 2025-06-30 141210](https://hackmd.io/_uploads/BkY5XTgHxg.png) **Tóm tắt đề:** Kiểm tra số n có ước số lẻ nào khác 1 không. **Tag đề:** math,number theory. **Hướng giải:** Kiểm tra n có phải lũy thừa của 2 không. *Ví dụ* Input 2 Output NO **CODE AC** ```cpp= #include <iostream> using namespace std; bool iPOT(long long n){ return (n&(n-1))==0; } int main(){ int t; long long n; cin>>t; while(t--){ cin>>n; cout<<(iPOT(n)?"NO":"YES")<<endl; } return 0; } ``` ::::: :::::spoiler B90. 32B **Link bài:** https://codeforces.com/problemset/problem/32/B ![Screenshot 2025-06-30 141215](https://hackmd.io/_uploads/ry4iQ6xrlx.png) **Tóm tắt đề:** Giải mã chuỗi Borze thành số **Tag đề:** expression parsing,implementation. **Hướng giải:** Duyệt chuỗi và dịch các ký hiệu. *Ví dụ* Input .-.-- Output 012 **CODE AC** ```cpp= #include <iostream> #include <string> using namespace std; int main(){ string s,r; cin>>s; for(int i=0;i<s.size();){ if(s[i]=='.'){ r+='0'; i++; } else{ if(s[i+1]=='.') r+='1'; else r+='2'; i+=2; } } cout<<r; return 0; } ``` ::::: :::::spoiler B91. 1512A **Link bài:** https://codeforces.com/problemset/problem/1512/A ![Screenshot 2025-06-30 141220](https://hackmd.io/_uploads/Syl3XaxHlx.png) **Tóm tắt đề:** Cho một mảng trong đó tất cả phần tử giống nhau trừ một phần tử duy nhất. Tìm vị trí của phần tử khác biệt đó. **Tag đề:** brute force,implementation. **Hướng giải:** -So sánh 3 phần từ đầu để xác dịnh giá chung -Duyệt mảng tìm phần tử khác giá trị chung. *Ví dụ* Input 4 11 16 11 11 Output 2 **CODE AC** ```cpp= #include <iostream> using namespace std; int main(){ int t,n,a[100]; cin>>t; while(t--){ cin>>n; for(int i=0;i<n;i++) cin>>a[i]; int v=(a[0]==a[1]?a[0]:(a[0]==a[2]?a[0]:a[1])); for(int i=0;i<n;i++){ if(a[i]!=v){ cout<<i+1<<endl; break; } } } return 0; } ``` ::::: :::::spoiler B92. 1791A **Link bài:** https://codeforces.com/problemset/problem/1791/A ![Screenshot 2025-06-30 141225](https://hackmd.io/_uploads/r1O276xHgl.png) **Tóm tắt đề:** Kiểm tra xem ký tự cho trước có nằm trong từ codeforces không. **Tag đề:** implementation,strings **Hướng giải:** -Tạo set chứa các ký tự của "codeforces" -Kiểm tra membership. *Ví dụ* Input 1 o Output YES **CODE AC** ```cpp= #include <iostream> #include <unordered_set> using namespace std; int main(){ unordered_set<char> cf={'c','o','d','e','f','r','s'}; int t;char c; cin>>t; while(t--){ cin>>c; cout<<(cf.count(c)?"YES":"NO")<<endl; } return 0; } ``` ::::: :::::spoiler B93. 451A **Link bài:** https://codeforces.com/problemset/problem/451/A ![Screenshot 2025-06-30 141229](https://hackmd.io/_uploads/H1WT7peBlx.png) **Tóm tắt bài:** Hai người chơi với n thanh ngang và m thanh dọc. Ai không chơi được nữa sẽ thua. **Tag đề:** implementation. **Hướng giải:** -Số lượt chơi là min(n,m). -Nếu số lượt lẻ: Akshat thắng, chẵn: Malvika thắng. *Ví dụ* Input 2 2 Output Malvika **CODE AC** ```cpp= #include <iostream> #include <algorithm> using namespace std; int main(){ int n,m; cin>>n>>m; cout<<(min(n,m)%2?"Akshat":"Malvika"); return 0; } ``` ::::: :::::spoiler B94. 1999A **Link bài:** https://codeforces.com/problemset/problem/1999/A ![Screenshot 2025-06-30 141233](https://hackmd.io/_uploads/Hk3pXpgBeg.png) **Tóm tắt đề:** Cho một dãy số gồm t số là số có hai chữ số.Tính tổng hai chữ số của mỗi số trong dãy. **Tag đề:** implementation,math. **Hướng giải:** Cộng hai chữ số lại của mỗi số và đẩy vào mảng.(lặp t lần) *Ví dụ* Input 2 12 70 Output 3 7 **CODE AC** ```cpp= #include <iostream> using namespace std; int main(){ int t; cin>>t; while(t--){ int n; cin>>n; int s=(n/10)+(n%10); cout<<s<<endl; } return 0; } ``` ::::: :::::spoiler B95. 466A **Link bài:** https://codeforces.com/problemset/problem/466/A ![Screenshot 2025-06-30 141237](https://hackmd.io/_uploads/r1V07axBee.png) **Tóm tắt đề:** Tính chi phí tối thiểu để mua đúng n vé, có thể mua vé đơn hoặc vé combo m vé. **Tag đề:** implementation. **Hướng giải:** So sánh 3 phương án: toàn vé đơn, toàn vé combo,kết hợp. *Ví dụ* Input 6 2 1 2 Output 6 **CODE AC** ```cpp= #include <iostream> #include <algorithm> using namespace std; int main() { int n, m, a, b; cin >> n >> m >> a >> b; int cost1 = n * a; int cost2 = (n/m) * b + min((n%m)*a, b); cout << min(cost1, cost2); return 0; } ``` ::::: :::::spoiler B96. 1760A **Link bài:** https://codeforces.com/problemset/problem/1760/A ![Screenshot 2025-06-30 141240](https://hackmd.io/_uploads/BJ0RQ6eHlg.png) **Tóm tắt đề:** Tìm số trung vị của 3 số. **Tag đề:** implementation,sortings. **Hướng giải:** Sắp xếp 3 số và lấy số ở giữa. *Ví dụ* Input 5 2 6 Output 5 **CODE AC** ```cpp= #include <iostream> #include <algorithm> using namespace std; int main(){ int t,a[3]; cin>>t; while(t--){ cin>>a[0]>>a[1]>>a[2]; sort(a,a+3); cout<<a[1]<<endl; } return 0; } ``` ::::: :::::spoiler B97. 579A **Link bài:** https://codeforces.com/problemset/problem/579/A ![Screenshot 2025-06-30 141246](https://hackmd.io/_uploads/BJ9kE6gSlx.png) **Tóm tắt đề:** Tìm số vi khuẩn tối thiểu cần đặt để cuối ngày có đúng x vi khuẩn. **Tag đề:** bitmasks **Hướng giải:** Đếm số bit 1 trong biểu diễn nhị phân của x. *Ví dụ* Input 5 Output 2 **CODE AC** ```cpp= #include <iostream> using namespace std; int main(){ int x,c=0; cin>>x; while(x){ c+=x&1; x>>=1; } cout<<c; return 0; } ``` ::::: :::::spoiler B98. 1915A **Link bài:** https://codeforces.com/problemset/problem/1915/A ![Screenshot 2025-06-30 141250](https://hackmd.io/_uploads/SJIlEaeSgx.png) **Tóm tắt đề:** Tìm số xuất hiện 1 lần trong 3 số. **Tag đề:** bitmasks,implementation. **Hướng giải:** Sử dụng XOR để tìm số duy nhất. *Ví dụ* Input 1 2 3 2 Output 3 **CODE AC** ```cpp= #include <iostream> using namespace std; int main(){ int t,a,b,c; cin>>t; while(t--){ cin>>a>>b>>c; cout<<(a^b^c)<<endl; } return 0; } ``` ::::: :::::spoiler B99. 758A **Link bài:** https://codeforces.com/problemset/problem/758/A ![Screenshot 2025-06-30 141254](https://hackmd.io/_uploads/HJz-ETeSee.png) **Tóm tắt đề:** Tính tổng số tiền cần chia để tất cả công dân có cùng số tiền. **Tag đề:** implementation,math. **Hướng giải:** -Tìm giá trị lớn nhất. -Tính tổng chênh lệch. *Ví dụ* Input 3 1 3 2 Output 3 **CODE AC** ```cpp= #include <iostream> #include <algorithm> using namespace std; int main(){ int n,a[100],mV=0,s=0; cin>>n; for(int i=0;i<n;i++){ cin>>a[i]; mV=max(mV,a[i]); } for(int i=0;i<n;i++){ s+=mV-a[i]; } cout<<s; return 0; } ``` ::::: :::::spoiler B100. 1560A **Link bài:** https://codeforces.com/problemset/problem/1560/A ![Screenshot 2025-06-30 141258](https://hackmd.io/_uploads/HkJfVTxrge.png) **Tóm tắt đề:** Tìm số thứ k trong dãy bỏ các số chia hết cho 3 hoặc tận cùng là 3. **Tag đề:** implementation **Hướng giải:** -Tạo trước dãy số đến phần tử thứ 1000. -Tra lời truy vấn trong O(1). *Ví dụ* Input 1 4 Output 5 **CODE AC** ```cpp= #include <iostream> #include <vector> using namespace std; vector<int> s; void pc(){ for(int i=1;s.size()<1000;i++){ if(i%3!=0&&i%10!=3){ s.push_back(i); } } } int main(){ pc(); int t,k; cin>>t; while (t--){ cin>>k; cout<<s[k-1]<<endl; } return 0; } ``` ::::: :::::: ## ROP1 ## ROP2 :::spoiler **Yêu cầu** -Tìm 100 thuật ngữ chuyên ngành trong lập trình thi đấu, giải nghĩa, đưa ví dụ -Dịch 100 thuật ngữ việt sang tiếng anh, 100 thuật ngữ tiếng anh sang tiếng việt ::: :::::spoiler **100 thuật ngữ chuyên ngành** #### 1 -> 10 1. Input (Đầu vào) -Giải thích: là dữ liệu được cung cấp cho chương trình để xử lý, thường được đọc từ bàn phím, file hoặc các nguồn khác. :::spoiler Code mẫu ```cpp= int x; cin >> x; // nếu nhập x là 3 thì 3 chính là đầu vào. ``` ::: 2. Ouput (Đầu ra) -Giải thích: là kết quả mà chương trình trả về sau khi xử lý input. :::spoiler Code mẫu ```cpp= int x=9; cout << x; // chương trình chạy giá trị của biến x là 9. Vậy output: 9 ``` ::: 3. Mảng: -Giải thích: Cấu trúc lưu trữ các phần tử cùng kiểu liên tiếp trong bộ nhớ. :::spoiler Code mẫu ```cpp= int main(){ int arr[4]={1,2,3,4}; //khởi tạo mảng arr gồm 4 phần tử 1,2,3,4 cout<<arr[2]; //in ra phần tử thứ 3 trong mảng return 0; } ``` ::: 4. Mảng động: -Giải thích: Là mảng có thể thêm hoặc bớt các phần tử ngay trong lúc chương trình đang chạy. :::spoiler Code mẫu ```cpp= int main(){ vector<int> a={1,2,3,4,5}; // khởi tạo mảng động a gồm 5 phần tử từ 1 đến 5 a.push_back(6); // thêm 6 vào mảng a cout<<a[a.size()-1]<<"\n"; // in ra phần tử cuối của mảng ,ở đây là 6 a.pop_back(); // xóa phần tử cuối cùng của mảng cout<<a[a.size()-1]; return 0; } ``` ::: 5. Mảng tĩnh -Giải thích: là mảng phải khai báo số lượng hoặc phần tử trước khi chạy chương trình. :::spoiler Code mẫu ```cpp= int arr[4]={1,2,3,4}; // khởi tạo mảng tĩnh arr gồm 4 phần tử 1 đến 4 cout<<arr[0]; // xuất ra phần tử đầu tiên trong mảng return 0; } ``` ::: 6. TLE (TIME LIMIT EXCEEDED) -Giải thích: là lỗi khi chương trình chạy lâu hơn thời gian được đặt ra. -Ví dụ: khi thời gian quy định đặt ra là 1 giây mà chương trình chạy đến 1.5 giây, hệ thống sẽ báo lỗi TLE. 7. RE hay RTE (RUNTIME ERROR) -Giải thích: là lỗi xảy ra khi chương trình đang chạy (runtime) bị crash hoặc dừng đột ngột do vi phạm các quy tắc hệ thống. -Ví dụ: Chia một số cho 0 hay xuất ra phần tử thứ 10 trong khi mảng chỉ có 9 phần tử. 8. MLE -Giải thích: là lỗi xảy ra khi chương trình có bộ nhớ lớn hơn số lượng bộ nhớ được đặt ra. -Ví dụ: khi số lượng bộ nhớ tối đa là 365 GB mà chương trình lại có bộ nhớ là 364 TB thì hệ thống báo lỗi MLE. 9. CE hay CLE (COMPILATION ERROR) -Giải thích: là lỗi xảy ra khi trình biên dịch không thể dịch mã nguồn thành chương trình thực thi do vi phạm cú pháp hoặc quy tắc ngôn ngữ. -Ví dụ: thiếu dấu chấm phẩy hay thiếu dấu ngoặc nhọn. 10. WA (WRONG ANSWER) -Giải thích: là khi chương trình xuất ra kết quả không như đáp án của đề bài. -Ví dụ: Đáp án của đề bài 1+1 là 2 mà bạn xuất ra 3. 11. AC (ACCEPTED) -Giải thích: Là khi chương trình xuất ra kết quả giống đáp án của đề bài. -Ví dụ: Đáp án của đề bài 5+2 là 7 thì kết quả chương trình xuất ra là 12. AK (ALL KILL) -Giải thích: Là khi bạn AC hết được mọi đề bài trong một cuộc thi hay contest. -Ví dụ: Trong contest của anh Hoàng Anh mà AC được hết bài thì được AK. 13. Mod (Modulo) -Giải thích: là phép chia lấy dư.(%) -Ví dụ: 5 mod 3 bằng 2 hay 5%3=2. 14. Overflow (tràn số) -Giải thích: Xảy ra khi một giá trị được lưu trữ trong một biến vượt quá giới hạn của kiểu dữ liệu đó. -Ví dụ: Giới hạn của kiểu dữ liệu là int là từ -2,147,483,648 đến 2,147,483,647 mà biến của bạn lại lưu trữ giá trị là 3,000,000,000 lớn hơn giới hạn của int thì sẽ bị tràn số, cho ra kết quả không chính xác. 15. Function Overloading: -Giải thích: là khả năng tạo ra nhiều hàm cùng tên với các triển khai khác nhau. :::spoiler Code mẫu ```cpp= int Sum(int a,int b){ return a+b; } double Sum(double a,double b){ return a+b; } int main(){ int y=1,x=2; double d=1.1,e=1.2; cout<<Sum(y,x)<<"\n"; // Output: 3 (chứ không phải 3.0) cout<<Sum(d,e)<<"\n"; // Output: 2.3 (chứ không phải 2) return 0; } ``` ::: 16. IDE (Integrated Development Environment) \ -Giải thích: là một môi trường phát triển tích hợp, cung cấp các công cụ cần thiết để viết, biên dịch, gỡ lỗi và chạy các chương trình. -Ví dụ: Code::Blocks,Dev-C++,VSC (VISUAL STUDIO CODE),... 17. Kiểu dữ liệu -Giải thích: là một khái niệm trong lập trình quy định loại giá trị mà một biến có thể lưu trữ và các phép toán có thể thực hiện trên giá trị đó. -Ví dụ: int, long long, double,... 18. Tham số -Giải thích: là giá trị đầu vào được truyền vào một hàm, phương thức hoặc chương trình để xử lý. :::spoiler Code mẫu ```cpp= void StupidSum(int a,int b){ // a,b là tham số. return a+b; } ``` ::: 19. Đối số -Giải thích: là các giá trị được truyền vào một hàm (function) khi bạn gọi hàm đó. :::spoiler Code mẫu ```cpp= cout<< StupidSum(1,5); // 1,5 là các đối số return 0; ``` ::: 20. Tham trị -Giải thích: là một cách truyền tham số vào hàm, trong đó một bản sao của giá trị biến được truyền đi, chứ không phải chính biến đó. :::spoiler Code mẫu ```cpp= void makeClone(int y) { y = 2; // thay đổi giá trị bản sao của biến } int main() { int x = 0; makeClone(x); // không ảnh hưởng biến gốc . cout<<x; //Output: 0 return 0; } ``` ::: 21. Tham chiếu -Giải thích: Khi một biến được truyền vào hàm theo kiểu tham chiếu, hàm sẽ nhận trực tiếp địa chỉ bộ nhớ (reference) của biến đó thay vì một bản sao. :::spoiler Code mẫu ```cpp= void Dumb5(int &x){ x=5; } int main(){ int x=0; Dumb5(x); //truyền tham chiếu cout<< x; //Có ảnh hưởng tới biến gốc. Output: 5 } ``` ::: 22. Đệ quy -Giải thích: là kỹ thuật một hàm gọi lại chính nó để giải quyết bài toán bằng cách chia nhỏ vấn đề thành các bài toán con giống nhau nhưng nhỏ hơn. :::spoiler Code mẫu ```cpp= int f(int n) { if (n==0||n==1) return 1; return n*f(n - 1); // sử dụng đệ quy để tìm giai thừa. Khi nào } ``` ::: :::::