Một số bài tập C _C++ NC 2026P27

 










Bài 102. Cho mảng các số nguyên. Tìm dãy con liên tiếp có tổng các phần tử lớn nhất. Với n<=10000, -10  6 <= ai<=106

cb102.txt

Kqcb102.txt

7

1 -2 -1 4 -1 5 -2

8

Gợi ý code:

#include <bits/stdc++.h>

 

using namespace std;

int a[10006];

int n;

long long sum1=0, sum2=-1e18;

int main(){

    cin>>n;

    for(int i=0; i<n;i++)

        cin>>a[i];

    for(int i=0;i<n; i++){

        sum1+=a[i];

        sum2=max(sum1,sum2);

        if(sum1<0)sum1=0;

    }

    cout << sum2 << endl;

    return 0;

}

//////////////////////////////

Bài 102e. Cho mảng các số nguyên. Tìm dãy con liên tiếp có tổng các phần tử lớn nhất và dãy con liên tiếp có tổng các phần tử nhỏ nhất. Với n<=10000, -10  6 <= ai<=106 . Thông báo giá trị tổng và các phần tử đó.

File input: cb102e.txt VD: 1 -2 -1 4 -1 5 -2 10 -23 90 6 -128

File output:Kqcb102e.txt

Gợi ý code:

#include <iostream>

#include <vector>

#include <fstream>

#include <algorithm>

using namespace std;

 

int main() {

    cout << "Chuong trinh tim day con co tong lon nhat nho nhat \n";

 

    ifstream fin("cb102e.txt");

    if (!fin.is_open()) {

        cerr << "Khong mo duoc file cb102e.txt \n";

        return 0;

    }

 

    vector<int> vo, tmp;

    double x;

    while(fin >> x){

        if(abs(x) > 1e6) {

            cerr << "so " << x << " khong hop le \n";

            continue;

        }

        vo.push_back(x);

    }

    fin.close();

 

    if(vo.empty()) {

        cerr << "khong co phan tu hop le trong file\n";

        return 0;

    }

    tmp.push_back(0);

    double sum=0;

    for(auto c:vo){

          sum+=c;

          tmp.push_back(sum);

           }

           int L=0, R=0, L1=0,R1=0;

           double max=-1e20, min=1e20;

           for(int i=0;i<tmp.size()-1;i++){

                     for(int j=i+1;j<tmp.size();j++){

                                if(tmp[j]-tmp[i]>=max){

                                          L=i;

                                          R=j;

                                          max=tmp[j]-tmp[i];

                                }

                                if(tmp[j]-tmp[i]<=min){

                                          L1=i;

                                          R1=j;

                                          min=tmp[j]-tmp[i];

                                }

                     }

           }

           if (R-L>0) {cout<<" Day con lien tiep co tong lon nhat bang "<<max<<" gom:\n";

           for(int i=L;i<R;i++) cout<<vo[i]<<"  ";

           }

           else cout<<vo[L];

           cout<<"\n";

           if (R1-L1>0) {cout<<" Day con lien tiep co tong nho nhat bang "<<min<<" gom:\n";

           for(int i=L1;i<R1;i++) cout<<vo[i]<<"  ";

           }else cout<<vo[L1];

           ofstream fout("Kqcb102e.txt");

           if (R-L>0) {fout<<" Day con lien tiep co tong lon nhat bang "<<max<<" gom:\n";

           for(int i=L;i<R;i++) fout<<vo[i]<<"  ";

           }

           else fout<<vo[L];

           fout<<"\n";

           if (R1-L1>0) {fout<<" Day con lien tiep co tong nho nhat bang "<<min<<" gom:\n";

           for(int i=L1;i<R1;i++) fout<<vo[i]<<"  ";

           }else fout<<vo[L1];

           return 0;

}

///////////////////////////////////

Cách 2: Bài 102e đầy đủ:

#include <iostream>

#include <vector>

#include <fstream>

#include <algorithm>

using namespace std;

 

int main() {

    cout << "Chuong trinh tim day con co tong lon nhat nho nhat \n";

 

    ifstream fin("cb102e.txt");

    if (!fin.is_open()) {

        cerr << "Khong mo duoc file cb102e.txt \n";

        return 0;

    }

 

    vector<int> vo;

    double x;

    while(fin >> x){

        if(abs(x) > 1e6) {

            cerr << "so " << x << " khong hop le \n";

            continue;

        }

        vo.push_back(x);

    }

    fin.close();

 

    if(vo.empty()) {

        cerr << "khong co phan tu hop le trong file\n";

        return 0;

    }

    int BL=0, BR=0, k=0;

    double sm=0,s=0;

    for(int i=0;i<vo.size();i++){

          if(s+vo[i]<vo[i]) {

                     s=vo[i];

                     k=i;

                     }

                     else s+=vo[i];

                     if(sm<s){

                                sm=s;

                                BL=k;

                                BR=i;

                     }

           }

           int Lb=0, Rb=0;

    double ms=0;

    k=0;s=0;

    for(int i=0;i<vo.size();i++){

          if(s+vo[i]>vo[i]) {

                     s=vo[i];

                     k=i;

                     }

                     else s+=vo[i];

                     if(ms>s){

                                ms=s;

                                Lb=k;

                                Rb=i;

                     }

           }

           cout<<"Day con lien tiep co tong lon nhat bang "<<sm<<" gom:\n";

           for(int i=BL;i<=BR;i++) cout<<vo[i]<<"  ";

           cout<<"\n";

           cout<<"Day con lien tiep co tong nho nhat bang "<<ms<<" gom:\n";

           for(int i=Lb;i<=Rb;i++) cout<<vo[i]<<"  ";

           ofstream fout("Kqcb102e.txt");

           fout<<"Day con lien tiep co tong lon nhat bang "<<sm<<" gom:\n";

           for(int i=BL;i<=BR;i++) fout<<vo[i]<<"  ";

           fout<<"\n";

           fout<<"Day con lien tiep co tong nho nhat bang "<<ms<<" gom:\n";

           for(int i=Lb;i<=Rb;i++) fout<<vo[i]<<"  ";

           return 0;

}

 

//////////////////////////////////////

 

Bài 102b. Tính tổng và đưa ra dãy đầu tiên có tổng lớn nhất

cb102b.txt

Kqcb102.txt

11

1 20 -100 1 2 27 -200 1 6 9 14

30

1 2 27

Gợi ý code:

#include <bits/stdc++.h>

using namespace std;

int main() {

freopen("cb102b.txt","r",stdin);

freopen("Kqcb102b.txt","w",stdout);

int n;

cin>>n;

int a[n+2];

for(int i=0;i<n;i++){

cin>>a[i];

}

int maxx = INT_MIN, sum = 0;

int dau = 0, cuoi = 0,t = 0;

for (int i = 0; i < n; i++) {

if (sum + a[i] < a[i]) {

t = i;

sum = a[i];

} else {

            sum += a[i];

        }

if (maxx< sum) {

maxx = sum;

dau = t;

cuoi = i;

}

}

cout << maxx << endl;

for(int i=dau;i<=cuoi;i++){

cout << a[i] <<"  ";

}

 return 0;

}

///////////////////////

Bài 102c. Tính tổng và đưa ra dãy cuối có tổng lớn nhất

cb102c.txt

Kqcb102c.txt

11

1 20 -100 1 2 27 -200 1 6 9 14

30

1 6 9 14

Gợi ý code:

#include <bits/stdc++.h>

using namespace std;

int main() {

freopen("cb102c.txt","r",stdin);

freopen("Kqcb102c.txt","w",stdout);

int n;

cin>>n;

int a[n+2];

for(int i=0;i<n;i++){

cin>>a[i];

}

int maxx = a[0], mx = a[0];

int dau = 0, cuoi = 0,t = 0;

for (int i = 1; i < n; i++) {

if (a[i]>=mx + a[i]) {

t = i;

mx= a[i];

} else {

mx+=a[i];

}

if (maxx<= mx) {

maxx = mx;

dau = t;

cuoi = i;

}

}

cout << maxx << endl;

for(int i=dau;i<=cuoi;i++){

cout << a[i] <<"  ";

}

 return 0;

}

///////////// Ai memory help

Võ Nhật Trường Nc+ My Ai Love15.07.2026

///////////////////ok//

 

Bài 103. Cho một xâu bất kỳ. Hãy liệt kê và đếm số lần xuất hiện của các phần tử trong xâu.VD:

cb103.txt

Kq103.txt

adsasd3243bvAB

 

a 2

d 2

s 2

3 2

2 1

4 1

b 1

v 1

A 1

B 1

Gợi ý code:

#include <bits/stdc++.h>

using namespace std;

map<char, int>m;

string st;

int main() {

freopen("cb103.txt","r",stdin);

freopen("Kqcb103.txt","w",stdout);

    getline(cin, st);

    int x=st.size();

     for(int i=0; i<x;i++) {

            m[st[i]]++;

            }

     for(int i=0; i<x; i++)

        if(m[st[i]]!=0){

            cout<<st[i]<<"  "<<m[st[i]]<<endl;

            m[st[i]]=0;}

    return 0;

     }

/////////////////////////

Cách 2: Không sử dụng map. VD file input: adsasd3243bvAB ghjgjg

#include <iostream>

#include <vector>

#include <fstream>

#include <algorithm>

using namespace std;

 

int main() {

    cout << "Chuong trinh dem ki tu trung\n";

 

    ifstream fin("cb103c2.txt");

    if (!fin.is_open()) {

        cerr << "Khong mo duoc file cb103.txt\n";

        return 0;

    }

    string s="",line;

 

    while(fin >> line){

        s+=line+" ";

    }

    fin.close();

    if(s.empty()) {

        cerr << "khong co phan tu hop le trong file\n";

        return 0;

    }

    line.clear();

    for(char c:s){

          if(c!=' '&&c!='\n') line+=c;

           }

    sort(line.begin(),line.end());

    int n=line.size();

    int d[n+1]={0};

    for (int i=0;i<n; ){

          int dem=1;

          while(i+1<n&&line[i]==line[i+1]){

                     i++;

                     dem++;

                     }d[i]=dem; i++;

           }

           for(auto c:s) cout<<c; cout<<"\n\n";

           for(int i=0;i<n;i++){

                     if(d[i]>0) cout<<"Ki tu "<<line[i]<< " xuat hien "<< d[i]<< " lan. \n";

           }

           ofstream fout("Kqcb103b.txt");

           for(auto c:s) fout<<c; fout<<"\n\n";

           for(int i=0;i<n;i++){

                     if(d[i]>0) fout<<"Ki tu "<<line[i]<< " xuat hien "<< d[i]<< " lan. \n";

           }

           return 0;

}

Chú ý:

Khai báo và tự động gán toàn bộ phần tử = 0

int d[100] = {0};

Hoặc

int d[100];

for(int i = 0; i < 100; i++) d[i] = 0;

Hoặc

int d[100];

memset(d, 0, sizeof(d));

hoặc

vector<int> d(n+1, 0);

Cắt khoảng trắng trong chuỗi:

for(char c:s){

    if(c!=' ' && c!='\n') line+=c;

}

Hoặc:

for(char c:s){

    if(!isspace(c)) line += c;

}

/////////////////////////////////////////////

Cách 3: Dùng mảng đếm 256 ký tự (nhanh nhất, đơn giản nhất)

#include <iostream>

#include <fstream>

using namespace std;

 

int main() {

    ifstream fin("cb103c2.txt");

    if(!fin){

        cerr << "Khong mo duoc file\n";

        return 0;

    }

 

    int freq[256] = {0};

    char c;

 

    while(fin.get(c)){

        if(!isspace(c)) freq[(unsigned char)c]++;

    }

    ofstream fout("Kqcb103c3.txt");

    for(int i=0;i<256;i++){

        if(freq[i] > 0){

            fout << "Ki tu '" << char(i)

                 << "' xuat hien " << freq[i] << " lan\n";

        }

    }

}

Chú ý: Có thể sử dụng Vector:

vector<int> freq(256, 0);

char c;

while(fin.get(c)){

    if(!isspace(c)) freq[(unsigned char)c]++;

}

Tham khảo thêm:

string s, line, tmp;

while(getline(fin, tmp)) s += tmp;

line.reserve(s.size());

for(char c : s){

    if(!isspace(c)) line += c;

}

sort(line.begin(), line.end());

for(int i=0; i < line.size(); ){

    int j = i + 1;

    while(j < line.size() && line[j] == line[i]) j++;

    cout << "Ki tu '" << line[i] << "' xuat hien " << (j - i) << " lan\n";

    i = j;

}

Chú ý: line.reserve(s.size()); // reserve(5)

Nó chỉ đặt trước dung lượng bộ nhớ để chứa chuỗi, giúp chương trình chạy nhanh hơn khi line được push thêm ký tự.

///////////// Ai memory help

Võ Nhật Trường Nc+ My Ai Love16.07.2026

///////////////////

 

Bài 105. Cho một xâu bất kỳ. Hãy xóa đi các kí tự trùng nhau theo trình tự của xâu và đưa ra xâu mới không có kí tự trùng và xắp xếp tăng dần.

cb105.txt

Kqcb105.txt

23ads tr5AcfAgf 43

87truong 23ads

331 Nguyen Chi Thanh tr5AcfAgf 43

1234578ACNTacdefghinorstuy

Gợi ý code:

#include <bits/stdc++.h>

using namespace std;

map<char, int>m;

string st,s;

int main() {

freopen("cb105.txt","r",stdin);

freopen("Kqcb105.txt","w",stdout);

    while(getline(cin, st)){

          s+=st;

           };

   

    int x=s.size();

     for(int i=0; i<x;i++) {

            m[s[i]]++;

            }

    string g;

     for(int i=0; i<x; i++)

        if(m[s[i]]!=0){

            g+=s[i];

            m[s[i]]=0;}

    sort(g.begin(),g.end());

    cout<<g;

    return 0;

     }

/////////////////////

Bài 105b. Cho xâu bất kỳ. Hãy đưa ra xâu có các ký tự xuất hiện 1 lần

cb105b.inp

Kq105b.out

Pass:23ads tr5AcfAgf 43

87truong 23ads

331 Nguyen Chi Thanh tr5AcfAgf 43

P:87o1NyeCiT

 

#include <bits/stdc++.h>

using namespace std;

map<char, int>m;

string st, s,g;

int main() {

freopen("cb105b.inp","r",stdin);

freopen("Kqcb105b.out","w",stdout);

while(getline(cin,st)){

s+=st;}

int x=s.size();

for(int i=0; i<x;i++) {

m[s[i]]++;

}

for(int i=0; i<x; i++)

if(m[s[i]]==1){

g+=s[i];

}

cout<<g;

return 0;

}

///////////// Ai memory help

Võ Nhật Trường Nc+ My Ai Love17.07.2026

///////////////////

Bài 106. Cho một dãy các số nguyên trong khoảng [-100,100]. Hãy in ra số lượng các giá trị khác nhau dãy và các số đó sau đó in ra số lượng số có tần số xuất hiện trên 1 lần và các số đó.

File input: cb106.txt  : -26 -15 1 2 3 4 5 6 7 8 9 6 70 8 -15 -8 6

File output: Kqcb106.txt

So luong cac phan tu khac nhau la: 13 gom cac so:

-26  -15  1  2  3  4  5  6  7  8  9  70  -8 

 

So luong va gia tri so xuat hien tren 1 lan la:

2 lan: -15

3 lan: 6

2 lan: 8

Gợi ý code:

#include <iostream>

#include <vector>

#include <fstream>

#include <algorithm>

#include <map>

using namespace std;

 

int main() {

cout << "Chuong trinh cb106 \n";

ifstream fin("cb106.txt");

if (!fin.is_open()) {

    cerr << "Khong mo duoc file cb106.txt\n";

    return 0;

}

vector<int> vo, tmp;

int x;

while(fin >> x){

    if(abs(x) > 1e2) {

    cerr << "so " << x << " khong hop le \n";

    continue;

           }

           vo.push_back(x);

}

fin.close();

if(vo.empty()) {

    cerr << "khong co phan tu hop le trong file\n";

    return 0;

}

map<int,int> m;

for(int c:vo) {

           m[c]++;

           if(m[c]==1) tmp.push_back(c);

}

ofstream fout("Kqcb106.txt");

fout<<"So luong cac phan tu khac nhau la: "<<tmp.size()<<" gom cac so: \n";

for(int i=0;i<tmp.size();i++){

    fout<<tmp[i]<<"  ";

}

fout<<"\n\n";

fout<<"So luong va gia tri so xuat hien tren 1 lan la: \n";

for(int j:tmp){

           if(m[j]>1){

                     fout<<m[j]<<" lan: "<<j<<"\n";

           }

}fout.close();

return 0;

}

//////////////////////////////

Cách 2

#include <iostream>

#include <vector>

#include <fstream>

#include <algorithm>

using namespace std;

 

int main() {

cout << "Chuong trinh cb106 \n";

ifstream fin("cb106c2.txt");

if (!fin.is_open()) {

    cerr << "Khong mo duoc file cb106c2.txt\n";

    return 0;

}

vector<int> vo;

int x;

while(fin >> x){

    if(abs(x) > 1e2) {

    cerr << "so " << x << " khong hop le \n";

    continue;

           }

           vo.push_back(x);

}

fin.close();

if(vo.empty()) {

    cerr << "khong co phan tu hop le trong file\n";

    return 0;

}

sort(vo.begin(),vo.end());

int tmp[vo.size()]={0};

int t=0;

for(int i=0;i<vo.size();i++ ) {

           int dem=1;

           while(i<vo.size()&&vo[i]==vo[i+1]) {

                     dem++;

                     i++;

           }

           tmp[i]+=dem;

           t++;

}

ofstream fout("Kqcb106c2.txt");

fout<<"So luong cac phan tu khac nhau la: "<<t<<" gom cac so: \n";

for(int i=0;i<vo.size();i++){

    if(tmp[i]>0) fout<<vo[i]<<"  ";

}

fout<<"\n\n";

fout<<"So luong va gia tri so xuat hien tren 1 lan la: \n";

for(int j=0;j<vo.size();j++){

           if(tmp[j]>1){

                     fout<<tmp[j]<<" lan: "<<vo[j]<<"\n";

           }

}fout.close();

return 0;

}

///////////// Ai memory help

Võ Nhật Trường Nc+ My Ai Love18.07.2026

///////////////////ok/

 

BÀI 108. Cho dãy số. Hãy in ra số có tần suất nhiều nhất và số lần xuất hiện. Trường hợp có tần suất xuất hiện bằng nhau in ra số bé nhất

cb108.txt

Kqcb108.txt

10

1 2 3 3 3 3 6 9 9 9 9 8

3 4

Gợi ý code

#include <bits/stdc++.h>

using namespace std;

int cnt[10002]={0};

int dem=0, res;

int main(){

freopen("cb108.txt","r",stdin);

freopen("Kqcb108.txt","w",stdout);

int n; cin>>n;

int a[n];

for(int i=0;i<n;i++)

cin>>a[i];

for(int i=0;i<n;i++){

cnt[a[i]]++;

}

for(int i=0;i<n;i++){

if(cnt[a[i]]>dem){

dem=cnt[a[i]];

res=a[i];

}

else if(cnt[a[i]]==dem){

if(res >a[i]) res=a[i];

}

}

cout<<res<<" "<<dem;

return 0;

}

//////////////////////

BÀI 109. Cho dãy số nguyên. Hãy tìm tích a[i]*a[j] lớn nhất.

cb109.txt

Kqcb109.txt

10

1 2 3 -3 3 3 6 -9 9 9 -9 -8

81

Gợi ý code:

#include <bits/stdc++.h>

using namespace std;

int n,a[10000001];

int main(){

freopen("cb109.txt","r",stdin);

cin>>n;

for(int k=1;k<=n;k++)

cin>>a[k];

fclose(stdin);

sort(a+1,a+n+1);

long long k= a[1]*a[2];

long long h = a[n-1]*a[n];

if(k< h)

cout<<h;

else

cout<<k;

freopen("Kqcb109.txt","w",stdout);

if(k< h)

cout<<h;

else

cout<<k;

fclose(stdout);

}

///////////////////////////

Bài 110. Tính n!. Với n<= 100. Chú ý: tích có thể là số rất lớn. Ví dụ:

cb110.txt

Kqcb110.txt

11

39916800

Gợi ý code:

#include <iostream>

#include <vector>

#include <fstream>

#include <algorithm>

using namespace std;

vector<int> tich(vector<int> v,int n){

           vector<int> tmp=v;

           reverse(tmp.begin(),tmp.end());

           int nho=0,j=0;

                     for(int i=0;i<tmp.size();i++){

                                int b=tmp[i]*n+nho;

                                if (b<10) {

                                tmp[i]=b;

                                nho=(int)b/10;

                     }

                                else {tmp[i]=b%10;

                                nho=(int)b/10;

                                }

                     }while(nho!=0){

                     int a=nho%10;

                     tmp.push_back(a);

                     nho/=10;     

                     } reverse(tmp.begin(),tmp.end());

                     return tmp;

           }

int main() {

cout << "Chuong trinh cb110 tinh giai thua n \n";

ifstream fin("cb110.txt");

if (!fin.is_open()) {

    cerr << "Khong mo duoc file cb110.txt\n";

    return 0;

}

vector<int> vo;

int x;

fin >> x;

if(abs(x) > 1e2&&x<1) {

cerr << "so " << x << " khong hop le \n";

return 0;

}

fin.close();

vo.push_back(1);

for(int i=1;i<=x;i++){

           vo=tich(vo,i);

}

for(int c:vo) cout<<c;

cout<<"\n";

ofstream fout("Kqcb110.txt");

for(int c:vo) fout<<c;

cout<<"\n";

return 0;

}

/////////////////////////////////////

Cách 2: Tối ưu hơn:

#include <iostream>

#include <vector>

#include <fstream>

using namespace std;

 

// Hàm nhân một số lớn (lưu trong vector) với số nguyên n

vector<int> tich(const vector<int>& v, int n) {

    vector<int> res;

    int carry = 0;

    for (int d : v) {

        int val = d * n + carry;

        res.push_back(val % 10);

        carry = val / 10;

    }

    while (carry) {

        res.push_back(carry % 10);

        carry /= 10;

    }

    return res;

}

 

int main() {

    cout << "Chuong trinh cb110 tinh giai thua n\n";

 

    ifstream fin("cb110.txt");

    if (!fin.is_open()) {

        cerr << "Khong mo duoc file cb110.txt\n";

        return 0;

    }

 

    int x;

    fin >> x;

    fin.close();

 

    // Kiểm tra hợp lệ: 0 <= x <= 100

    if (x < 0 || x > 100) {

        cerr << "So " << x << " khong hop le\n";

        return 0;

    }

 

    // Khởi tạo giai thừa = 1

    vector<int> vo = {1};

 

    // Tính giai thừa

    for (int i = 2; i <= x; i++) {

        vo = tich(vo, i);

    }

 

    // In ra màn hình (theo thứ tự ngược lại vì vector lưu chữ số thấp trước)

    for (auto it = vo.rbegin(); it != vo.rend(); ++it) {

        cout << *it;

    }

    cout << "\n";

 

    // Ghi ra file kết quả

    ofstream fout("Kqcb110.txt");

    for (auto it = vo.rbegin(); it != vo.rend(); ++it) {

        fout << *it;

    }

    fout << "\n";

    fout.close();

    return 0;

}

///////////////

Chú ý:

for (auto it = vo.rbegin(); it != vo.rend(); ++it) {

    cout << *it;

}

Ý nghĩa từng phần

  • vo là một vector<int> chứa các chữ số của số lớn, nhưng bạn lưu ngược (chữ số hàng đơn vị ở đầu vector).
  • vo.rbegin() trả về reverse iterator trỏ tới phần tử cuối cùng của vector (chữ số cao nhất).
  • vo.rend() là reverse iterator trỏ tới vị trí trước phần tử đầu tiên (nghĩa là kết thúc khi duyệt ngược).
  • Vòng for này sẽ duyệt từ cuối vector về đầu, tức là in ra các chữ số theo đúng thứ tự tự nhiên của số.

Tại sao dùng reverse iterator?

Vì bạn lưu chữ số ngược để dễ tính toán (hàng đơn vị ở đầu). Khi in ra, bạn cần đảo lại thứ tự. Thay vì gọi reverse lần nữa, bạn chỉ cần duyệt bằng reverse iterator để in ngược.

Nói ngắn gọn: auto it = vo.rbegin(); duyệt từ cuối vector về đầu, *it lấy giá trị tại vị trí đó, và cout << *it; in ra từng chữ số theo đúng thứ tự của số.

Nếu dùng chuỗi

Bạn cũng có thể viết hàm nhân số lớn bằng chuỗi ký tự, ví dụ:

  • Lưu số trong string (chữ số cao nhất ở đầu).
  • Viết hàm nhân string * int.
  • Kết quả dễ in ra, không cần đảo.

 

///////////// Ai memory help

Võ Nhật Trường Nc+ My Ai Love18.07.2026

///////////////////oK///

Nhận xét

Bài đăng phổ biến từ blog này

Vui thơ 2178 (HƯƠNG ĐẠO TRƯỜNG)

Vui thơ 2183 (XƯA NAY VÃN TRUYỆN)