├── .vscode └── settings.json ├── BIT.txt ├── CÁC THUẬT TRÊN ĐỒ THỊ .txt ├── HÀM_LÍ THUYẾT SỐ ├── CHIA TÁO 1.txt ├── CHIA TÁO 2.txt ├── CHỮ SỐ CUỐI CÙNG LỚN NHẤT.txt ├── HAI CON MÃ.txt ├── SỐ LƯỢNG ƯỚC CỦA N!.txt ├── SỐ NGUYÊN NHỎ NHẤT CHIA HẾT CHO X,Y,Z.txt ├── TAM GIÁC PASCAL.txt ├── TÌM BẬC CỦA P TRONG N!.txt ├── dinhtru.cpp ├── dothihaiphia.cpp ├── lúy thừa.txt └── nhomban.cpp ├── Hàng đợi ├── boiso.cpp ├── chusokhacbiet.cpp ├── dichuyentrongmatran.cpp ├── minimumoperation.cpp ├── minimumoperation2.cpp ├── soBDNspoj.cpp ├── sobdn2.cpp ├── sonhiphan.cpp ├── thaotaccoban.cpp └── timptunhonhatten1doan.cpp ├── MỘT CHÚT VỀ HASH CƠ BẢN.txt ├── QUAY LUI NHÁNH CẬN ├── bài toán ng du lịch.txt ├── chiamang.cpp ├── dayconcotongbangk.cpp ├── daycontangdan.cpp ├── dichuyentrongmatran.cpp ├── mayatm.cpp ├── nqueen1.cpp ├── nquen2.cpp ├── ratinmade1.cpp ├── ratinmaze2.cpp ├── soxacachspoj.cpp ├── sumsetproblem.cpp ├── tapconcotongbangs.cpp └── tohopcotongbangx.cpp ├── README.md ├── RMQ.txt ├── SEGMENT TRÊ.txt ├── Sinh ├── balo0-1.cpp ├── bieuthuclonnhat.cpp ├── boiso.cpp ├── caitui.cpp ├── chiatao.cpp ├── chinhoplap.cpp ├── daungoachople.cpp ├── ghepchucai.cpp ├── hoanviketiep1.cpp ├── hoanvixaukitu.cpp ├── lietkehoanvinguoccacptukhacnhau.cpp ├── lietketapcon.cpp ├── lietkexaukitu.cpp ├── masomaytinh.cpp ├── nextString.cpp ├── phanhoach.cpp ├── phatlocspoj.cpp ├── sinhhoanvinguoc.cpp ├── sinhtohop.cpp ├── solocphatchan.cpp ├── sothutuhoanvi.cpp ├── sothututohop.cpp ├── tapquansu.cpp ├── thebai.cpp ├── tohopketiep.cpp ├── xauAB.cpp ├── xaunhiphancokbit1.cpp ├── xaunhiphandoixung.cpp ├── xaunhiphanketiep.cpp ├── xepvitri.cpp └── xnpdoixungchan.cpp ├── SƠ QUA VỀ DSLK.txt ├── SẮP XẾP VÀ TÌM KIẾM ├── COLLECTING NUMBER.txt ├── CĂN HỘ.txt ├── CẶP SỐ CÓ HIỆU BẰNG X.txt ├── DIỀN SÓ CÒN THIẾU.txt ├── DRAGON.txt ├── FACTORY_MACHINE.txt ├── HÒA NHẠC.txt ├── MÁY PHOTO.txt ├── SẮP XẾP THEO TRỊ UYỆT ĐỐI.txt ├── SẮP XẾP THEO TẦN SUẤT.txt ├── SẮP XẾP THEO TỔNG CHỮ SỐ.txt ├── SỐ NHỎ NHẤT LỚN HƠN AI.txt ├── TRỘN 2 DÃY.txt ├── TỔNG BA SỐ CÓ TỔNG BẰNG X.txt ├── XẾP HÌNH DOMINO.txt ├── XẾP TRẺ.txt ├── check in ở sân bày (như chiếu sáng ).txt ├── ĐÈN LỒNG(NGC LẠI CHIẾU SÁNG).txt └── ĐẾM MẢNG CON LIÊN TIẾP CÓ NHIỀU NHẤT K GIÁ TRỊ KHÁC NHAU.txt ├── TẤT TẦN TẬT VỀ CÂY.txt ├── caynhiphan ├── LÍ THUYẾT VỀ CÂY NHỊ PHÂN TÌM KIẾM.txt ├── caynhiphanbangnhau.cpp ├── caynhiphandaydu.cpp ├── caynhiphanhoanhao.cpp ├── checkBST.cpp ├── deleteNode.cpp ├── demnodela.cpp ├── docaocuacay.cpp ├── duyetinorder.cpp ├── duyetpostorder.cpp ├── duyetpreorder.cpp ├── duyettheomuc.cpp ├── duyetxoancoc.cpp ├── kiemtranodelacungmuc.cpp ├── maxminBST.cpp └── search.cpp ├── chia và trị ├── dayxaunhiphan.cpp ├── demdayso.cpp ├── demso0.cpp ├── demsocapnghichthe.cpp ├── floor.cpp ├── gapdoidayso.cpp ├── luythuamatran.cpp ├── luythuamatrantinhtongcotcuoi.cpp ├── luythuanhiphan.cpp ├── luythuanhiphannghichdao.cpp ├── maximumsubarray.cpp ├── phantukhacnhau.cpp ├── timkiemnhiphan.cpp ├── tinhsofibothunbangnhanmatran.cpp ├── tronhaimang.cpp └── xaufibo.cpp ├── dothi hai phia.png ├── dãy con tăng dần bậc k.txt ├── nganxep ├── daotao.cpp ├── dientichhinhchunhatlonnhat.cpp ├── duthuadaungoac.cpp ├── hautotiento.cpp ├── hautotrungto.cpp ├── hinhchunhat0-1.cpp ├── latnguocdaungoac.cpp ├── nextgreaterelement.cpp ├── phantunhohonbenphai.cpp ├── removeduplicated.cpp ├── removeduplicated2.cpp ├── thaotac1.cpp ├── thaotac2.cpp ├── themdaungoac.cpp ├── tientohauto.cpp ├── tientotrungto.cpp ├── tinhtoangiatribieuthuchauto.cpp ├── tinhtoangiatribieuthuctiento.cpp ├── trungtohauto.cpp └── validperantheses.cpp ├── qhd ├── KIẾN THỨC VỀ 1 SỐ BÀI TOÁN ĐIỂN HÌNH.txt ├── biendoixau.cpp ├── cauthang.cpp ├── chia dãy thành k nhóm có tổng bằng nhau.txt ├── coin2.cpp ├── coin3.cpp ├── coinproblem.cpp ├── day con tang dai nhat (hard).cpp ├── dayconcotongbangs.cpp ├── daycontangdainhat.cpp ├── daysobitonic.cpp ├── demsoduongditrongmecung.cpp ├── distinct sum.cpp ├── ech.cp ├── equalset.cpp ├── maximum path sum.cpp ├── maximum square spoj.cpp ├── quaylui.txt ├── sobuocitnhat.cpp ├── songuyenlon.cpp ├── sumsubstring.cpp ├── tongbinhphuong.cpp ├── tongkhonglienke.cpp ├── tonglonnhatcuadaycontangdan.cpp ├── xauconchungdainhat.cpp ├── xauconchungdainhatbaxau.cpp ├── xaucondoixungdainhat.cpp ├── xemphim.cpp ├── xoachuso.cpp ├── xucxac.cpp └── ĐẾM CÁC SỐ CHIA HẾT CHO N.txt ├── thamlam ├── capso.cpp ├── chiatap.cpp ├── cuocvaliem.cpp ├── dichuyendaungoac.cpp ├── hangdoi.cpp ├── mualuongthuc.cpp ├── noiday1.cpp ├── noiday2.cpp ├── phansodonvi.cpp ├── sapdatxaukitu.cpp ├── sapdatxaukitupro.cpp ├── sapxepcolonhuan.cpp ├── sapxepthamlam.cpp ├── somayman.cpp ├── sonhonhat.cpp ├── stringgame.cpp ├── tichcuabaso.cpp └── xoaxaukitu.cpp └── đồ thị ├── .vscode └── settings.json ├── BFStrendothivohuong.cpp ├── DFStrendothivohuong.cpp ├── bfstrendothicohuong.cpp ├── canhcau.cpp ├── caykhungbfs.cpp ├── caykhungdfs.cpp ├── chuyedscanhsangdanhsachke.cpp ├── danhsachkesangdanhsachcan.cpp ├── demsophong.cpp ├── demsothanhphanlienthong.cpp ├── dfstrendothicohuong.cpp ├── dichuyentrenbangso.cpp ├── dientich.cpp ├── dinhtru.cpp ├── ditimnhomtruong.cpp ├── docaocuacay.cpp ├── dothihaiphia.cpp ├── dothilienthongmanh.cpp ├── dscanhsangdskecohuong.cpp ├── dscanhsangmatrankevohuong.cpp ├── dskesangdscanhcohuong.cpp ├── duongdicuaquanma.cpp ├── duongditrendothicohuongbangbfs.cpp ├── duongditrendothicohuongbangdfs.cp ├── duongditrendothivohuongbangdfs.cpp ├── duongditrendothivohuongbangfs.cpp ├── duongditrongmecung.cpp ├── e.cpp ├── hopmat.cpp ├── kiemtracay.cpp ├── kiemtrachutrinhtrendothicohuong.cpp ├── kiemtrachutrinhtrendothivohuong.cpp ├── kiemtrađuongi.cpp ├── mangxahoi.cpp ├── matrankesangdanhsachke,dscanhvohuong.cpp ├── matrankesangdske,dscanhcohuong.cpp ├── matrantrongsosangdscanh.cpp ├── nhomban.cpp ├── quandaochim.cpp ├── timcap.cpp ├── xaydungduongdi.cpp └── ĐƯỜNG ĐI VÀ CHU TRÌNH EULER VỚI ĐỒ THỊ VÔ HƯỚNG.txt /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "files.associations": { 3 | "bitset": "cpp", 4 | "set": "cpp", 5 | "deque": "cpp", 6 | "string": "cpp", 7 | "vector": "cpp", 8 | "ostream": "cpp", 9 | "iostream": "cpp", 10 | "*.tcc": "cpp", 11 | "forward_list": "cpp", 12 | "list": "cpp", 13 | "unordered_map": "cpp", 14 | "unordered_set": "cpp", 15 | "system_error": "cpp", 16 | "random": "cpp", 17 | "*.cp": "cpp", 18 | "array": "cpp", 19 | "initializer_list": "cpp", 20 | "regex": "cpp", 21 | "valarray": "cpp" 22 | } 23 | } -------------------------------------------------------------------------------- /HÀM_LÍ THUYẾT SỐ/CHIA TÁO 2.txt: -------------------------------------------------------------------------------- 1 | Có n đứa trẻ và m quả táo, Andrew2804 muốn đếm số cách chia táo cho n đứa trẻ, nhưng trong trường hợp này không nhất thiết đứa trẻ nào cũng phải có táo. Ví dụ, có 3 đứa trẻ và 2 quả táo, có những cách chia như sau (0, 0, 2), (0, 2, 0), (2, 0, 0), (1, 1, 0), (0, 1, 1), (1, 0 ,1). Bạn hãy giúp anh ấy nhé ! Ở đây n với m, mình cho <= 25, vậy bạn thử nghĩ xem trong trường hợp n,m <= 1000, hoặc n,m <= 10^6, và yêu cầu in ra kết quả của bài toán chia dư với 10^9 + 7 thì hướng giải như thế nào? 2 | 3 | Input Format 4 | 5 | 2 số n và m 6 | 7 | Constraints 8 | 9 | 1 ≤ m, n ≤ 25 10 | 11 | Output Format 12 | 13 | Đáp án của bài toán 14 | 15 | Sample Input 0 16 | 17 | 3 2 18 | Sample Output 0 19 | 20 | 6 21 | --> idea :lấy tổ hợp chập (k-1) của (n+k-1) 22 | -------------------------------------------------------------------------------- /HÀM_LÍ THUYẾT SỐ/CHỮ SỐ CUỐI CÙNG LỚN NHẤT.txt: -------------------------------------------------------------------------------- 1 | Viết chương trình C cho phép nhập vào n và liệt kê các số nguyên tố thỏa mãn nhỏ hơn hoặc bằng n và có chữ số cuối cùng lớn nhất. Có bao nhiêu số như vậy? 2 | 3 | Input Format 4 | 5 | Số nguyên dương n 6 | 7 | Constraints 8 | 9 | 1≤n≤10^7 10 | 11 | Output Format 12 | 13 | Dòng đầu tiên liệt kê các số thỏa mãn, và dòng thứ 2 in ra số lượng số thỏa mãn. 14 | 15 | Sample Input 0 16 | 17 | 200 18 | Sample Output 0 19 | 20 | 2 3 5 7 11 13 17 19 23 29 37 47 59 67 79 89 101 103 107 109 113 127 137 139 149 157 167 179 199 21 | 29 22 | 23 | 24 | 25 | 26 | #include 27 | #include 28 | using namespace std; 29 | #define ll long long 30 | #define foru(i,a ,b) for(int i=a;i<=b;i++) 31 | 32 | 33 | ll n ; 34 | ll prime[10000007]; 35 | void sang(){ 36 | for(ll i=0;i<10000000;i++){ 37 | prime[i] =1; 38 | } 39 | prime[0] =prime[1]=0; 40 | for(ll i=2;i<=sqrt(10000000);i++){ 41 | if(prime[i]){ 42 | for(ll j=i*i;j<=10000000;j+=i){ 43 | prime[j]=0; 44 | } 45 | 46 | } 47 | } 48 | 49 | } 50 | 51 | 52 | ll check(ll n ){ 53 | int r =n%10; 54 | while(n){ 55 | if(r<(n%10)){ 56 | return 0; 57 | } 58 | n/=10; 59 | } 60 | return 1; 61 | } 62 | int main(){ 63 | sang(); 64 | cin>>n; 65 | int cnt=0; 66 | for(int i=2;i<=n;i++){ 67 | if(check(i)&&prime[i]){ 68 | cout< 6 | using namespace std ; 7 | #define ll long long 8 | const ll mod =1e9+7; 9 | int degree2(int n, int p){ 10 | int ans =0; 11 | for(int i=p;i<=n;i*=p){ 12 | ans += n/i; 13 | } 14 | return ans ; 15 | } 16 | int nt(int n){ 17 | for(int i=2;i<=sqrt(n);i++){ 18 | if(n%i==0){ 19 | return 0; 20 | } 21 | } 22 | return n> 1 ; 23 | } 24 | 25 | ll check(int n ){ 26 | 27 | ll res=1; 28 | for(int i=1;i<=n;i++){ 29 | if(nt(i)){ 30 | res*=1ll*(degree2(n ,i)+1); 31 | res%=mod; 32 | } 33 | } 34 | return res ; 35 | 36 | 37 | 38 | } 39 | 40 | int main(){ 41 | 42 | // int t ;cin>> t ; 43 | // while(t--){ 44 | int n;cin>> n; 45 | cout< 5 | 6 | using namespace std; 7 | 8 | typedef long long ll; 9 | typedef pair ii; 10 | typedef unsigned long long ull; 11 | 12 | #define X first 13 | #define Y second 14 | #define pb push_back 15 | #define mp make_pair 16 | #define ep emplace_back 17 | #define EL printf("\n") 18 | #define sz(A) (int)A.size() 19 | #define FOR(i, l, r) for (int i = l; i <= r; i++) 20 | #define FOD(i, r, l) for (int i = r; i >= l; i--) 21 | #define fillchar(a, x) memset(a, x, sizeof(a)) 22 | 23 | const ll mod = 1e9 + 7; 24 | 25 | ll lcm(ll a , ll b){ 26 | return a*b/__gcd(a, b); 27 | } 28 | void solve(){ 29 | int x,y,z,n; 30 | cin>>x>>y>>z>>n; 31 | ll min=pow(10,n-1),max=pow(10,n); 32 | ll bcnn=lcm(x,lcm(y,z)); 33 | if(max 2 | #define endl '\n' 3 | using namespace std; 4 | 5 | typedef long long ll; 6 | typedef unsigned long long ull; 7 | typedef long double ld; 8 | typedef pairpi; 9 | const int MOD = 1e9 + 7; 10 | 11 | ll c[101][101]; 12 | void tamgiac() 13 | { 14 | for(int i = 0 ; i <= 100 ; i++) 15 | { 16 | for(int j = 0 ; j <= i ; j++) 17 | { 18 | if(j == i || j == 0) 19 | { 20 | c[i][j] = 1; 21 | } 22 | else 23 | { 24 | c[i][j] = c[i - 1][j - 1] + c[i - 1][j]; 25 | 26 | c[i][j] %= MOD; 27 | } 28 | } 29 | } 30 | } 31 | 32 | int main() 33 | { 34 | ios::sync_with_stdio(0);cin.tie(NULL);cout.tie(NULL); 35 | 36 | int n; cin >> n; 37 | tamgiac(); 38 | for(int i = 0 ; i < n ; i++) 39 | { 40 | for(int j = 0 ; j <= i ; j++) 41 | { 42 | cout << c[i][j] << " "; 43 | } 44 | cout << endl; 45 | } 46 | return 0; 47 | } -------------------------------------------------------------------------------- /HÀM_LÍ THUYẾT SỐ/TÌM BẬC CỦA P TRONG N!.txt: -------------------------------------------------------------------------------- 1 | int degree2(int n, int p){ 2 | int ans =0; 3 | for(int i=p;i<=n;i*=p){ 4 | ans += n/i; 5 | } 6 | return ans ; 7 | } -------------------------------------------------------------------------------- /HÀM_LÍ THUYẾT SỐ/dinhtru.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Cho đồ thị vô hướng G = (V, E) được biểu diễn dưới dạng danh sách cạnh. Hãy đếm số lượng đỉnh trụ của đồ thị. 3 | 4 | Input Format 5 | 6 | Dòng đầu tiên là 2 số n, m, tương ứng với số lượng đỉnh, cạnh của đồ thị. Các đỉnh của đồ thị được đánh số từ 1 tới n. m dòng tiếp theo mỗi dòng chứa đỉnh u, v (u != v) tương ứng với một cạnh của đồ thị. 7 | 8 | Constraints 9 | 10 | 1=<=n<=1000; 1<=m<=n*(n-1)/2; 11 | 12 | Output Format 13 | 14 | In ra số lượng đỉnh trụ của đồ thị 15 | 16 | Sample Input 0 17 | 18 | 10 6 19 | 5 4 20 | 5 2 21 | 10 2 22 | 10 7 23 | 5 3 24 | 10 1 25 | Sample Output 0 26 | 27 | 3 28 | Explanation 0 29 | 30 | 3 đỉnh trụ của đồ thị là : 2, 5, 10 31 | 32 | */ 33 | 34 | #include 35 | using namespace std; 36 | 37 | #define ll long long 38 | #define pii pair 39 | #define vii vector 40 | #define pb push_back 41 | #define fi first 42 | #define el cout<> a; 45 | #define out(a) cout<< a; 46 | #define all(x) (x).begin(), (x).end() 47 | #define rep(a) for(int i = 0; i < (a); i++) 48 | #define vll vector 49 | #define vi vector 50 | #define ms(a,n) memset(a,n,sizeof(a)) 51 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 52 | #define FOD(i,b,a) for(int i=b;i>=a;i--) 53 | #define faster ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); 54 | const ll MOD = 1e9 + 7; 55 | int n, m; 56 | vll ke[1001]; 57 | ll used[1001]; 58 | ll degree[1001]; 59 | 60 | void solve(){ 61 | 62 | cin >> n >> m; 63 | ms(degree, 0); 64 | FOR(i,0,m-1){ 65 | int x, y; 66 | cin >> x >> y; 67 | ke[x].pb(y); 68 | degree[x]++; 69 | degree[y]++; 70 | 71 | ke[y].pb(x); 72 | 73 | } 74 | ms(used,0); 75 | int cnt = 0; 76 | for (int i = 1; i <= n;i++){ 77 | if(degree[i]>=2){ 78 | ++cnt; 79 | } 80 | } 81 | cout << cnt; 82 | } 83 | 84 | int main() 85 | { 86 | 87 | faster; 88 | 89 | solve(); 90 | 91 | 92 | 93 | } 94 | -------------------------------------------------------------------------------- /HÀM_LÍ THUYẾT SỐ/lúy thừa.txt: -------------------------------------------------------------------------------- 1 | //a^b%mod chuẩn xác nhât 2 | #include 3 | using namespace std; 4 | #define ll long long 5 | const ll mod =1e9+7; 6 | 7 | ll a, b; 8 | ll powmod(ll a, ll b ) 9 | { 10 | ll res=1; 11 | a%=mod; 12 | while(b){ 13 | if(b%2==1){ 14 | res=(res%mod)*(a%mod)%mod; 15 | 16 | } 17 | a=(a%mod)*(a%mod)%mod; 18 | b/=2; 19 | } 20 | return res; 21 | } 22 | int main(){ 23 | 24 | cin>>a>>b; 25 | cout< 39 | using namespace std; 40 | 41 | #define ll long long 42 | #define pii pair 43 | #define vii vector 44 | #define pb push_back 45 | #define fi first 46 | #define el cout<> a; 49 | #define out(a) cout<< a; 50 | #define all(x) (x).begin(), (x).end() 51 | #define rep(a) for(int i = 0; i < (a); i++) 52 | #define vll vector 53 | #define vi vector 54 | #define ms(a,n) memset(a,n,sizeof(a)) 55 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 56 | #define FOD(i,b,a) for(int i=b;i>=a;i--) 57 | #define faster ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); 58 | const ll MOD = 1e9 + 7; 59 | 60 | ll ans[210]; 61 | 62 | int main() 63 | { 64 | 65 | faster; 66 | queue q; 67 | vll res; 68 | q.push(8); 69 | while(1){ 70 | ll tmp = q.front(); 71 | q.pop(); 72 | if(tmp>=1e18) break; 73 | res.pb(tmp); 74 | q.push(tmp*10+0); 75 | q.push(tmp*10+8); 76 | } 77 | for (int i = 1; i <= 200;i++){ 78 | for(ll x : res){ 79 | if(x%i==0){ 80 | ans[i] = x; 81 | break; 82 | } 83 | } 84 | } 85 | ll t; 86 | cin>> t ; 87 | while(t--){ 88 | int n; 89 | cin >> n; 90 | cout << ans[n] << endl; 91 | } 92 | 93 | 94 | } 95 | -------------------------------------------------------------------------------- /Hàng đợi/chusokhacbiet.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nguyenkien0703/Data-Structures-and-Algorithms/b5b19233896d95df24b167323ed4b3f2da5a732d/Hàng đợi/chusokhacbiet.cpp -------------------------------------------------------------------------------- /Hàng đợi/dichuyentrongmatran.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | 4 | #define ll long long 5 | #define pii pair 6 | #define vii vector 7 | #define pb push_back 8 | #define fi first 9 | #define el cout<> a; 12 | #define out(a) cout<< a; 13 | #define all(x) (x).begin(), (x).end() 14 | #define rep(a) for(int i = 0; i < (a); i++) 15 | #define vll vector 16 | #define vi vector 17 | #define ms(a,n) memset(a,n,sizeof(a)) 18 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 19 | #define FOD(i,b,a) for(int i=b;i>=a;i--) 20 | #define faster ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); 21 | const ll MOD = 1e9 + 7; 22 | 23 | int n, m; 24 | ll a[1005][1005]; 25 | ll dp[1005][1005]; 26 | ll used[1005][1005]; 27 | int bfs(int s ,int t ){ 28 | queue q; 29 | q.push({s, t}); 30 | used[s][t]= 1; 31 | while(!q.empty()) { 32 | pii top = q.front(); q.pop(); 33 | if(top.fi==m && top.se==n){ 34 | return dp[top.fi][top.se]; 35 | } 36 | int i = top.fi; 37 | int j = top.se; 38 | if(i+a[i][j]<=m&& used[i+a[i][j]][j]==0){ 39 | q.push({i+ a[i][j], j }); 40 | dp[i+a[i][j]][j] = dp[i][j] + 1; 41 | used[i+a[i][j]][j]= 1; 42 | } 43 | if(j+a[i][j]<=n&& used[i][j+a[i][j]]==0){ 44 | q.push({i, j+ a[i][j] }); 45 | dp[i][j+a[i][j]] = dp[i][j] + 1; 46 | used[i][j+a[i][j]] = 1; 47 | } 48 | } 49 | return -1; 50 | } 51 | void solve(){ 52 | cin >> m >> n; 53 | FOR(i,1,m){ 54 | FOR(j, 1, n) 55 | cin >> a[i][j]; 56 | } 57 | ms(dp, 0); 58 | ms(used, 0); 59 | cout<< bfs(1,1); 60 | 61 | } 62 | int main() 63 | { 64 | 65 | faster; 66 | int t ; 67 | cin>> t ; 68 | while(t--){ 69 | solve(); 70 | } 71 | 72 | 73 | } 74 | 75 | -------------------------------------------------------------------------------- /Hàng đợi/soBDNspoj.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | 4 | #define ll long long 5 | #define pii pair 6 | #define vii vector 7 | #define pb push_back 8 | #define fi first 9 | #define el cout<> a; 12 | #define out(a) cout<< a; 13 | #define all(x) (x).begin(), (x).end() 14 | #define rep(a) for(int i = 0; i < (a); i++) 15 | #define vll vector 16 | #define vi vector 17 | #define ms(a,n) memset(a,n,sizeof(a)) 18 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 19 | #define FOD(i,b,a) for(int i=b;i>=a;i--) 20 | #define faster ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); 21 | const ll MOD = 1e9 + 7; 22 | 23 | string x; 24 | 25 | 26 | int main() 27 | { 28 | 29 | faster; 30 | queue q; 31 | vll res; 32 | q.push(1); 33 | while(1){ 34 | ll tmp = q.front(); 35 | q.pop(); 36 | if(tmp>=1e18){ 37 | break; 38 | } 39 | res.pb(tmp); 40 | q.push(tmp * 10 + 0); 41 | q.push(tmp * 10 + 1); 42 | } 43 | int t; 44 | cin>> t ; 45 | while(t--){ 46 | ll x; 47 | cin >> x; 48 | ll cnt = 0; 49 | for(ll y : res){ 50 | if( y <= x ){ 51 | ++cnt; 52 | }else break; 53 | } 54 | cout << cnt << endl; 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /Hàng đợi/sonhiphan.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Cho số tự nhiên n. Hãy in ra tất cả các số nhị phân từ 1 đến n. Chú ý không in thừa các bit 0 ở đầu. 3 | 4 | Input Format 5 | 6 | Một số tự nhiên n được ghi trên một dòng. 7 | 8 | Constraints 9 | 10 | 1<=n<=100000; 11 | 12 | Output Format 13 | 14 | In ra các số nhị phân tử 1 tới n. 15 | 16 | Sample Input 0 17 | 18 | 7 19 | Sample Output 0 20 | 21 | 1 10 11 100 101 110 111 22 | 23 | */ 24 | 25 | #include 26 | using namespace std; 27 | 28 | #define foru(i,a,b) for(int i=a;i<=b;++i) 29 | #define ford(i,b,a) for(int i=b;i>=a;--i) 30 | #define ii pair 31 | #define ll long long 32 | #define fi first 33 | #define se second 34 | 35 | 36 | 37 | vector res; 38 | void init(){ 39 | queue q; 40 | q.push("1"); 41 | res.push_back("1"); 42 | while(res.size()<100000){ 43 | string top=q.front(); 44 | q.pop(); 45 | res.push_back(top+"0"); 46 | res.push_back(top+"1"); 47 | q.push(top+"0"); 48 | q.push(top+"1"); 49 | } 50 | } 51 | int main(){ 52 | ios_base::sync_with_stdio(false); 53 | cin.tie(NULL); 54 | init(); 55 | 56 | 57 | int n;cin>>n; 58 | for(int i=0;i 2 | using namespace std; 3 | 4 | #define ll long long 5 | #define pii pair 6 | #define vii vector 7 | #define pb push_back 8 | #define fi first 9 | #define el cout< 14 | #define vi vector 15 | #define f0(a) for(ll i = 0; i < (a); i++) 16 | #define f1(a) for(ll i = 1; i <= (a); i++) 17 | #define ms(a,n) memset(a,n,sizeof(a)) 18 | #define FOR(i,a,b) for(ll i=a;i<=b;i++) 19 | #define FOD(i,b,a) for(int i=b;i>=a;i--) 20 | #define faster ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); 21 | const ll MOD = 1e9 + 7; 22 | 23 | int n, k; 24 | ll ans[10001], a[10001]; 25 | 26 | int main() 27 | { 28 | 29 | faster; 30 | #ifndef ONLINE_JUDGE 31 | freopen("input.txt", "r", stdin); 32 | freopen("output.txt", "w", stdout); 33 | #endif 34 | deque q; 35 | cin>>n>>k; 36 | for (int i = 1; i <= n;i++){ 37 | cin >> a[i]; 38 | } 39 | for (int i = 1; i <= n;i++){ 40 | while(q.size() && a[q.back()] >=a[i]){ 41 | q.pop_back(); 42 | } 43 | while(q.size() && i-q.front() + 1 >k) 44 | q.pop_front(); 45 | q.push_back(i); 46 | if(i>=k){ 47 | ans[i] = a[q.front()]; 48 | } 49 | cout << "deque lan thu " << i << "la :"; 50 | for(auto kien : q){ 51 | cout << a[kien] << ' '; 52 | // el; 53 | } 54 | el; 55 | cout << "het luot duyet deque thu " << i; 56 | el; 57 | } 58 | for (int i = k; i <= n;i++){ 59 | cout << ans[i]; 60 | cout << ' '; 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /QUAY LUI NHÁNH CẬN/bài toán ng du lịch.txt: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | #define ll long long 4 | #define pii pair 5 | #define vii vector 6 | #define pb push_back 7 | #define fi first 8 | #define se second 9 | #define foru(i, a, b) for (int i = a; i <= b; i++) 10 | #define ford(i, b, a) for (int i = b; i >= a; i--) 11 | const ll MOD = 1e9 + 7; 12 | ll n, a[100][100], x[1000]; 13 | ll ans = 1e9, cmin = 1e9, used[100]; 14 | // x[i]: thanhf phố thứ i dc đi thêm 15 | void nhap() 16 | { 17 | cin>> n; 18 | foru(i, 1, n) 19 | { 20 | foru(j, 1, n) 21 | { 22 | cin >> a[i][j]; 23 | if (a[i][j] != 0) 24 | { 25 | cmin = min(cmin, a[i][j]); 26 | } 27 | } 28 | } 29 | } 30 | ll min(ll a , ll b){ 31 | return a 27 | using namespace std; 28 | typedef long long ll; 29 | const int MOD = 1e9; 30 | 31 | int n, k, s, a[200]; 32 | bool ok; 33 | int used[200]; 34 | 35 | void Try(int sum, int cnt) 36 | { 37 | if (ok == true) 38 | return; 39 | if (cnt == k) 40 | { 41 | ok = true; 42 | return; 43 | } 44 | for (int j = 1; j <= n; j++) 45 | { 46 | if (used[j]) 47 | { 48 | used[j] = 0; 49 | if (sum == s) 50 | { 51 | Try(0, cnt + 1); 52 | return; 53 | } 54 | if (sum > s) 55 | return; 56 | else 57 | Try(sum + a[j], cnt); 58 | } 59 | used[j] = 1; 60 | } 61 | } 62 | 63 | int main() 64 | { 65 | cin >> n >> k; 66 | s = 0; 67 | ok = false; 68 | memset(used, 1, sizeof(used)); 69 | for (int i = 1; i <= n; i++) 70 | { 71 | cin >> a[i]; 72 | s += a[i]; 73 | } 74 | if (s % k != 0) 75 | cout << 0; 76 | else 77 | { 78 | s /= k; 79 | Try(0, 0); 80 | if (ok == true) 81 | cout << 1; 82 | else 83 | cout << 0; 84 | } 85 | } -------------------------------------------------------------------------------- /QUAY LUI NHÁNH CẬN/dayconcotongbangk.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Cho dãy số A[] = (a1, a2, .., an) và số tự nhiên K. Hãy đưa ra tất cả các dãy con của dãy số A[] sao cho tổng các phần tử của dãy con đó đúng bằng K. Các phần tử của dãy số A[] được giả thuyết là nguyên dương và không có các phần tử giống nhau. Ví dụ với dãy con A[] = {5, 10, 15, 20, 25}, K = 50 ta có 3 dãy con {5, 10, 15, 20}, {5, 20, 25}, {10, 15, 25}. 4 | 5 | Input Format 6 | 7 | Dòng thứ 1 đưa vào số N là số lượng phần tử của dãy số A[] và số K; Dòng tiếp theo đưa vào N phần tử của dãy số A[]. 8 | 9 | Constraints 10 | 11 | 1<=N<=15; 1<=A[i],K<=100; 12 | 13 | Output Format 14 | 15 | Đưa ra tất cả các dãy con của dãy số A[] thỏa mãn yêu cầu bài toán theo thứ tự từ điển, trong đó mỗi dãy con được bao bởi các ký tự [, ]. Nếu không có dãy con nào thỏa mãn yêu cầu bài toán, hãy đưa ra -1. 16 | 17 | Sample Input 0 18 | 19 | 10 26 20 | 12 11 9 10 6 8 14 7 5 13 21 | Sample Output 0 22 | 23 | [5 6 7 8] 24 | [5 7 14] 25 | [5 8 13] 26 | [5 9 12] 27 | [5 10 11] 28 | [6 7 13] 29 | [6 8 12] 30 | [6 9 11] 31 | [7 8 11] 32 | [7 9 10] 33 | [12 14] 34 | */ 35 | 36 | #include 37 | using namespace std; 38 | typedef long long ll; 39 | ll a[1001], x[1001], s, n; 40 | 41 | void Backtrack(ll sum , ll i, ll pos) 42 | { 43 | if(sum == s) 44 | { 45 | cout << "[" ; 46 | for(int j = 0 ; j < i ; j++) 47 | { 48 | cout << x[j]; 49 | if(j != i - 1) cout << " "; 50 | else cout << "]"; 51 | } 52 | cout << endl; 53 | } 54 | for(ll j = pos ; j < n ;++j) 55 | { 56 | if(sum + a[j] <= s) 57 | { 58 | x[i] = a[j]; 59 | Backtrack(sum + a[j] , i + 1 , j + 1); 60 | } 61 | } 62 | } 63 | 64 | int main() 65 | { 66 | cin >> n >> s; 67 | for(ll i = 0 ; i < n ;i++) cin >> a[i]; 68 | sort(a , a + n); 69 | Backtrack(0 , 0 , 0); 70 | } -------------------------------------------------------------------------------- /QUAY LUI NHÁNH CẬN/dichuyentrongmatran.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Cho ma trận A[M][N]. Nhiệm vụ của bạn là đếm tất cả các đường đi từ phần tử A[0][0] đến phần tử A[M-1][N-1]. Bạn chỉ được phép dịch chuyển xuống dưới hoặc sang phải phần tử liền kề với vị trí hiện tại. 3 | 4 | Input Format 5 | 6 | Dòng 1 là hai số M, N tương ứng với số hàng và số cột của ma trận; Dng tiếp theo đưa vào các phần tử của ma trận A[][]; các số được viết cách nhau một vài khoảng trống. 7 | 8 | Constraints 9 | 10 | 1≤M, N, <=10; A[i][j]≤100; 11 | 12 | Output Format 13 | 14 | Đưa ra số cách di chuyển 15 | 16 | Sample Input 0 17 | 18 | 3 5 19 | 4 6 8 3 1 20 | 9 8 8 9 1 21 | 10 6 3 4 5 22 | Sample Output 0 23 | 24 | 15 25 | */ 26 | 27 | 28 | #include 29 | using namespace std; 30 | #define ll long long 31 | #define pii pair 32 | #define vii vector 33 | #define pb push_back 34 | #define fi first 35 | #define se second 36 | #define in(a) cin>> a; 37 | #define out(a) cout<< a; 38 | #define all(a) (begin(a) ,end(a)) 39 | #define vll vector 40 | #define vi vector 41 | #define ms(a) memset(a,sizeof(a)) 42 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 43 | #define FOD(i,b,a) for(int i=b;i>=a;i--) 44 | #define faster ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); 45 | const ll MOD = 1e9 + 7; 46 | 47 | int n,m , ok , a[100][100]; 48 | void nhap(){ 49 | cin>>n>>m; 50 | FOR(i,1,n){ 51 | FOR(j,1,m){ 52 | cin>>a[i][j]; 53 | } 54 | } 55 | } 56 | int ans ; 57 | void Try(int i ,int j ){ 58 | if(i==n && j==m){ 59 | ++ans ; 60 | } 61 | if(i+1<= n){ 62 | Try(i+1,j); 63 | } 64 | if(j+1<=m){ 65 | Try(i,j+1); 66 | } 67 | } 68 | int main() 69 | { 70 | faster; 71 | ans =0; 72 | nhap(); 73 | Try(1,1); 74 | cout< 31 | using namespace std; 32 | typedef long long ll; 33 | ll a[1001], s, res = 1e9, n; 34 | 35 | void ATM(ll sum, ll i, ll pos) 36 | { 37 | if (sum == s) 38 | { 39 | res = min(res, i); 40 | return; 41 | } 42 | for (ll j = pos; j < n; ++j) 43 | { 44 | if (sum + a[j] <= s) 45 | { 46 | ATM(sum + a[j], i + 1, j + 1); 47 | } 48 | } 49 | } 50 | 51 | int main() 52 | { 53 | cin >> n >> s; 54 | for (ll i = 0; i < n; i++) 55 | cin >> a[i]; 56 | ATM(0, 0, 0); 57 | if (res != 1e9) 58 | cout << res << endl; 59 | else 60 | cout << -1 << endl; 61 | } -------------------------------------------------------------------------------- /QUAY LUI NHÁNH CẬN/nqueen1.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Cho một bàn cờ vua có kích thước n * n. Vấn đề đặt ra rằng, có n quân hậu, bạn cần đếm số cách đặt n quân hậu này lên bàn cờ sao cho với 2 quân hậu bất kì, chúng không “ăn” nhau. 3 | 4 | Input Format 5 | 6 | Dòng duy nhất chứa n là kích thước của bàn cờ. 7 | 8 | Constraints 9 | 10 | 1<=N<=12 11 | 12 | Output Format 13 | 14 | In ra số cách xếp hậu hợp lệ 15 | 16 | Sample Input 0 17 | 18 | 8 19 | Sample Output 0 20 | 21 | 92 22 | 23 | */ 24 | 25 | #include 26 | using namespace std; 27 | #define ll long long 28 | #define pii pair 29 | #define vii vector 30 | #define pb push_back 31 | #define fi first 32 | #define se second 33 | #define in(a) cin>> a; 34 | #define out(a) cout<< a; 35 | #define all(a) (begin(a) ,end(a)) 36 | #define vll vector 37 | #define vi vector 38 | #define ms(a) memset(a,sizeof(a)) 39 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 40 | #define FOD(i,b,a) for(int i=b;i>=a;i--) 41 | #define faster ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); 42 | const ll MOD = 1e9 + 7; 43 | int n , xuoi[1000],nguoc[1000], ok , a[1000],x[100]; 44 | int cnt ; 45 | void Try(int i){ 46 | FOR(j,1,n){ 47 | if(!a[j]&& !xuoi[n+i-j]&& !nguoc[i+j-1]){ 48 | a[j]= xuoi[n+i-j]= nguoc[i+j-1]=1; 49 | if(i==n){ 50 | ++cnt; 51 | }else { 52 | Try(i+1); 53 | } 54 | a[j]= xuoi[n+i-j]= nguoc[i+j-1]=0; 55 | 56 | } 57 | } 58 | } 59 | int main() 60 | { 61 | faster; 62 | cin>> n; 63 | Try(1); 64 | cout< 27 | using namespace std; 28 | typedef long long ll; 29 | const int MOD = 1e9 + 7; 30 | bool check(int a[], int n) 31 | { 32 | for (int i = 2; i <= n - 1; i++) 33 | { 34 | if (abs(a[i] - a[i + 1]) == 1||abs(a[i]-a[i-1])==1) 35 | return false; 36 | } 37 | return true; 38 | } 39 | int main() 40 | { 41 | int n; 42 | cin >> n; 43 | int a[n + 1]; 44 | for (int i = 1; i <= n; i++) 45 | { 46 | a[i] = i; 47 | } 48 | do 49 | { 50 | if (check(a, n)) 51 | { 52 | for (int i = 1; i <= n; i++) 53 | { 54 | cout << a[i]; 55 | } 56 | cout << endl; 57 | } 58 | } while (next_permutation(a + 1, a + n + 1)); 59 | return 0; 60 | } -------------------------------------------------------------------------------- /QUAY LUI NHÁNH CẬN/sumsetproblem.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Cho mảng A[] gồm n phần tử, hãy xác định xem có thể chia mảng A[] thành 2 tập sao cho tổng của 2 tập bằng nhau hay không? 3 | 4 | Input Format 5 | 6 | Dòng đầu tiên là số nguyên n; Dòng thứ 2 gồm n số nguyên của mảng A[] 7 | 8 | Constraints 9 | 10 | 1<=n<=20; 1<=A[i]<=100; 11 | 12 | Output Format 13 | 14 | In ra 1 nếu có thể chia mảng thành 2 phần bằng nhau, ngược lại in 0. 15 | 16 | Sample Input 0 17 | 18 | 5 19 | 9 9 4 4 5 20 | Sample Output 0 21 | 22 | 0 23 | Sample Input 1 24 | 25 | 4 26 | 1 2 3 4 27 | Sample Output 1 28 | 29 | 1 30 | 31 | */ 32 | 33 | 34 | #include 35 | using namespace std; 36 | #define ll long long 37 | #define pii pair 38 | #define vii vector 39 | #define pb push_back 40 | #define fi first 41 | #define se second 42 | #define in(a) cin >> a; 43 | #define out(a) cout << a; 44 | #define all(a) (begin(a), end(a)) 45 | #define vll vector 46 | #define vi vector 47 | #define ms(a) memset(a, sizeof(a)) 48 | #define FOR(i, a, b) for (int i = a; i <= b; i++) 49 | #define FOD(i, b, a) for (int i = b; i >= a; i--) 50 | #define faster \ 51 | ios_base::sync_with_stdio(false); \ 52 | cin.tie(NULL); \ 53 | cout.tie(NULL); 54 | const ll MOD = 1e9 + 7; 55 | 56 | int n, k, ok, a[1000], x[1000]; 57 | ll sum,s; 58 | void Try(int i,int s ){ 59 | if(ok ==1){ 60 | return ; 61 | } 62 | if(s==sum/2){ 63 | ok =1; 64 | return ; 65 | } 66 | FOR(j,i,n){ 67 | if(s+a[j]<=sum/2){ 68 | Try(i+1,s+a[j]); 69 | } 70 | } 71 | 72 | } 73 | void solve() 74 | { 75 | cin >> n; 76 | sum = 0; 77 | ok =0; 78 | FOR(i, 1, n) 79 | { 80 | cin >> a[i]; 81 | sum += a[i]; 82 | } 83 | if (sum &1) 84 | { 85 | cout << 0 << endl; 86 | return; 87 | } 88 | Try(1,0); 89 | if(!ok){ 90 | cout<<0; 91 | }else cout<<1; 92 | 93 | } 94 | int main() 95 | { 96 | faster; 97 | solve(); 98 | } -------------------------------------------------------------------------------- /QUAY LUI NHÁNH CẬN/tapconcotongbangs.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Xét tất cả các tập hợp các số nguyên dương có các phần tử khác nhau và không lớn hơn số n cho trước. Nhiệm vụ của bạn là hãy đếm xem có tất cả bao nhiêu tập hợp có số lượng phần tử bằng k và tổng của tất cả các phần tử trong tập hợp bằng s? Các tập hợp là hoán vị của nhau chỉ được tính là một. Ví dụ với n = 9, k = 3, s = 23, {6, 8, 9} là tập hợp duy nhất thỏa mãn. 4 | 5 | Input Format 6 | 7 | 1 dòng gồm 3 số nguyên n, k, s 8 | 9 | Constraints 10 | 11 | 1 ≤ n ≤ 20, 1 ≤ k ≤ 10 và 1 ≤ s ≤ 155 12 | 13 | Output Format 14 | 15 | In ra số lượng các tập hợp thỏa mãn điều kiện đề bài. 16 | 17 | Sample Input 0 18 | 19 | 16 8 91 20 | Sample Output 0 21 | 22 | 28 23 | Submissions: 102 24 | Max Score: 100 25 | Difficulty: Easy 26 | Rate This Challenge: 27 | 28 | 29 | More 30 | 31 | 32 | 33 | */ 34 | 35 | #include 36 | using namespace std; 37 | typedef long long ll; 38 | int a[1001], x[1001], s , k, n , res; 39 | 40 | void Backtrack(int sum , int cnt,int pos) 41 | { 42 | if(sum == s && cnt == k) 43 | { 44 | ++res; 45 | return; 46 | } 47 | for(int j = pos ; j <= n ; j++) 48 | { 49 | if(sum + j <= s) 50 | { 51 | Backtrack(sum + j , cnt + 1, j + 1); 52 | } 53 | } 54 | } 55 | 56 | int main() 57 | { 58 | cin >> n >> k >> s; 59 | res = 0; 60 | Backtrack(0 ,0 , 1); 61 | cout << res; 62 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Cấu trúc dữ liệu và giải thuật <333333 2 |
3 | thấy hay thì cho mình xin 1 star <3 4 | -------------------------------------------------------------------------------- /RMQ.txt: -------------------------------------------------------------------------------- 1 | ======cong thức tìm min trên 1 đoạn có chiều dài là l ======== 2 | dp[i][l]: gia tri nho nhat bat dau tu 1 den i va co chieu dai la l 3 | dp[i][l]= min(dp[i][l-1],dp[i+2^(l-1)][l-1]) 4 | (cẩn thận ko là truy cập giá trị ptu ngoài giá trị mảng) 5 | và với mỗi truy vấn hỏi xem min[l,r] là bao nhiêu ? để tối ưu thì ta làm như sau 6 | +) tìm k lớn nhất sao cho 2^k <=(r-l+1) 7 | ==> (min[l][k],min(r-2^k -1, ][k] 8 | -------------------------------------------------------------------------------- /Sinh/bieuthuclonnhat.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Cho 4 số nguyên X, Y, Z, T. Nhiệm vụ của bạn là tìm giá trị lớn nhất của biểu thức X o1 Y o2 Z o3 T, trong đó o1, o2, o3 có thể là các dấu +, -. 3 | 4 | Input Format 5 | 6 | Dòng duy nhất gồm 4 số X, Y, Z, T 7 | 8 | Constraints 9 | 10 | -10^5<=X,Y,Z,T<=10^4 11 | 12 | Output Format 13 | 14 | In ra giá trị lớn nhất của biểu thức 15 | 16 | Sample Input 0 17 | 18 | 59 71 80 -3 19 | Sample Output 0 20 | 21 | 213 22 | 23 | */ 24 | 25 | #include 26 | using namespace std; 27 | typedef long long ll; 28 | const int MOD = 1e9 + 7; 29 | int a[1001], ok; 30 | void ktao() 31 | { 32 | for (int i = 1; i <= 3; i++) 33 | { 34 | a[i] = 1; 35 | } 36 | } 37 | void sinh() 38 | { 39 | int i = 3; 40 | while (i >= 1 && a[i] == 2) 41 | { 42 | --i; 43 | } 44 | if (i == 0) 45 | ok = 0; 46 | else 47 | { 48 | a[i]++; 49 | for (int j = i + 1; j <= 3; j++) 50 | { 51 | a[j] = 1; 52 | } 53 | } 54 | } 55 | int main() 56 | { 57 | int x, y, z, d; 58 | cin >> x >> y >> z >> d; 59 | ktao(); 60 | ll ans = 0; 61 | ok = 1; 62 | while (ok) 63 | { 64 | ll sum = x; 65 | for (int i = 1; i <= 3; i++) 66 | { 67 | if (i == 1) 68 | { 69 | if (a[i] == 1) 70 | sum += y; 71 | else 72 | sum -= y; 73 | } 74 | else if (i == 2) 75 | { 76 | if (a[i] == 1) 77 | sum += z; 78 | else 79 | sum -= z; 80 | } 81 | else 82 | { 83 | if (a[i] == 1) 84 | sum += d; 85 | else 86 | sum -= d; 87 | } 88 | } 89 | 90 | ans = max(ans, sum); 91 | sinh(); 92 | } 93 | cout << ans; 94 | return 0; 95 | } -------------------------------------------------------------------------------- /Sinh/boiso.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Một số được coi là số đẹp nếu nó chỉ bao gồm 2 số là 8 và 0. Bạn được cấp một số nguyên dương X, nhiệm vụ của bạn là tìm bội dương nhỏ nhất của X thỏa mãn bội này là số đẹp. 4 | 5 | Input Format 6 | 7 | Dòng đầu tiên là số bộ test T. T dòng tiếp theo mỗi dòng là một số nguyên dương N. 8 | 9 | Constraints 10 | 11 | 1<=T<=300; 1<=N<=300; 12 | 13 | Output Format 14 | 15 | Mỗi test in kết quả trên 1 dòng 16 | 17 | Sample Input 0 18 | 19 | 6 20 | 240 21 | 19 22 | 55 23 | 47 24 | 287 25 | 247 26 | Sample Output 0 27 | 28 | 8880 29 | 88008 30 | 880 31 | 80088 32 | 8088808 33 | 8000000008 34 | */ 35 | 36 | #include 37 | using namespace std; 38 | #define ll long long 39 | #define pii pair 40 | #define vii vector 41 | #define pb push_back 42 | #define fi first 43 | #define se second 44 | #define foru(i, a, b) for (int i = a; i < b; i++) 45 | #define ford(i, b, a) for (int i = b; i >= a; i--) 46 | const ll MOD = 1e9 + 7; 47 | ll n, k, ok, a[1000]; 48 | string s; 49 | ll res[310]; 50 | void ktao() 51 | { 52 | s = string(n, '0'); 53 | s[n - 1] = '8'; 54 | } 55 | void sinh() 56 | { 57 | ll i = n; 58 | while (i >= 0 && s[i] == '8') 59 | { 60 | s[i--] = '0'; 61 | } 62 | if (i == -1) 63 | { 64 | ok = 0; 65 | } 66 | else 67 | { 68 | s[i] = '8'; 69 | } 70 | } 71 | 72 | int main() 73 | { 74 | ios_base::sync_with_stdio(0); 75 | cin.tie(0); 76 | cout.tie(0); 77 | n =19; 78 | vector ans ; 79 | ok =1; 80 | ktao(); 81 | while(ok ){ 82 | ans .pb(s); 83 | sinh(); 84 | } 85 | for(ll i=1;i<=300 ;i++){ 86 | for(auto x : ans){ 87 | if(stoll(x)%i==0){ 88 | res[i]=stoll(x); 89 | break; 90 | } 91 | } 92 | } 93 | ll t ; 94 | cin>> t; 95 | while(t--){ 96 | ll x ; 97 | cin>> x ; 98 | cout< 37 | using namespace std; 38 | 39 | #define ll long long 40 | int main(){ 41 | ll n , s; 42 | cin>>n>>s; 43 | ll w[n+1],v[n+1]; 44 | for(ll i=1;i<=n;i++) cin>>w[i]; 45 | for(ll i=1;i<=n;i++) cin>>v[i]; 46 | ll dp[n+1][s+1]; 47 | memset(dp,0,sizeof(dp)); 48 | for( ll i=1;i<=n;i++){ 49 | for(ll j=1;j<=s;j++){ 50 | dp[i][j] =dp[i-1][j]; 51 | if(j>=w[i]){ 52 | dp[i][j] =max(dp[i][j],dp[i-1][j-w[i]]+v[i]); 53 | } 54 | } 55 | } 56 | 57 | cout< 27 | using namespace std; 28 | #define ll long long 29 | #define pii pair 30 | #define vii vector 31 | #define pb push_back 32 | #define fi first 33 | #define se second 34 | #define foru(i, a, b) for (int i = a; i < b; i++) 35 | #define ford(i, b, a) for (int i = b; i >= a; i--) 36 | const ll MOD = 1e9 + 7; 37 | 38 | int main() 39 | { 40 | ios_base::sync_with_stdio(0); 41 | cin.tie(0); 42 | cout.tie(0); 43 | int n; 44 | cin >> n; 45 | int w[n]; 46 | for (int &x : w) 47 | cin >> x; 48 | ll res = (ll)1e18 + 5; 49 | ll sum1 = 0, sum2 = 0; 50 | for (int i = 0; i < (1 << n); i++) 51 | { 52 | sum1 = 0, sum2 = 0; 53 | for (int j = 0; j < n; j++) 54 | { 55 | if (i & (1 << j)) 56 | { 57 | sum1 += w[j]; 58 | } 59 | else 60 | sum2 += w[j]; 61 | } 62 | res = min(res, abs(sum1 - sum2)); 63 | } 64 | cout << res << endl; 65 | } -------------------------------------------------------------------------------- /Sinh/chinhoplap.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Cho 2 số nguyên dương N và K. Nhiệm vụ của bạn là sinh ra chỉnh hợp lặp chập K của N phần tử gồm các số tự nhiên từ 1 đến N. Ví dụ N = 3, K = 2 bạn sẽ có các kết quả là : 11, 12, 13, 21, 22, 23, 31, 32, 33. Số chỉnh hợp lặp chập K của N sẽ là N^K. 3 | 4 | Input Format 5 | 6 | 1 dòng duy nhất chứa 2 số nguyên dương N và K. 7 | 8 | Constraints 9 | 10 | 1<=K,N<=8 11 | 12 | Output Format 13 | 14 | In ra các cấu hình của chỉnh hợp lặp chập K của N 15 | 16 | Sample Input 0 17 | 18 | 2 4 19 | Sample Output 0 20 | 21 | 1111 22 | 1112 23 | 1121 24 | 1122 25 | 1211 26 | 1212 27 | 1221 28 | 1222 29 | 2111 30 | 2112 31 | 2121 32 | 2122 33 | 2211 34 | 2212 35 | 2221 36 | 2222 37 | Submissions: 98 38 | Max Score: 100 39 | Difficulty: Easy 40 | Rate This Challenge: 41 | 42 | 43 | More 44 | 45 | 46 | */ 47 | 48 | #include 49 | using namespace std; 50 | #define ll long long 51 | #define pii pair 52 | #define vii vector 53 | #define pb push_back 54 | #define fi first 55 | #define se second 56 | #define foru(i, a, b) for (int i = a; i < b; i++) 57 | #define ford(i, b, a) for (int i = b; i >= a; i--) 58 | const ll MOD = 1e9 + 7; 59 | 60 | int n, k,ok, a[100]; 61 | void ktao() 62 | { 63 | for (int i = 1; i <= k; i++) 64 | { 65 | a[i] = 1; 66 | } 67 | } 68 | void sinh() 69 | { 70 | int i = k; 71 | while (i >= 1 && a[i] == n) 72 | { 73 | --i; 74 | } 75 | if (i == 0) 76 | { 77 | ok = 0; 78 | } 79 | else 80 | { 81 | a[i]++; 82 | for (int j = i + 1; j <= k; j++) 83 | { 84 | a[j]=1; 85 | } 86 | } 87 | } 88 | int main() 89 | { 90 | ios_base::sync_with_stdio(0); 91 | cin.tie(0); 92 | cout.tie(0); 93 | cin >> n >> k; 94 | ok =1; 95 | ktao(); 96 | while(ok){ 97 | for(int i=1;i<=k;i++){ 98 | cout< 29 | using namespace std; 30 | #define ll long long 31 | #define pii pair 32 | #define vii vector 33 | #define pb push_back 34 | #define fi first 35 | #define se second 36 | #define foru(i, a, b) for (int i = a; i < b; i++) 37 | #define ford(i, b, a) for (int i = b; i >= a; i--) 38 | const ll MOD = 1e9 + 7; 39 | 40 | int n, ok; 41 | ; 42 | ll a[1005]; 43 | void sinh() 44 | { 45 | int i = n - 1; 46 | while (i >= 1 && a[i] > a[i + 1]) 47 | { 48 | i--; 49 | } 50 | if(i==0){ 51 | for(int i=1;i<=n;i++){ 52 | a[i]=i; 53 | cout<> n; 72 | for (int i = 1; i <= n; i++) 73 | { 74 | cin >> a[i]; 75 | } 76 | sinh(); 77 | } -------------------------------------------------------------------------------- /Sinh/hoanvixaukitu.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Cho một xâu kí tự S chỉ bao gồm các kí tự , hãy in ra các hoán vị của các kí tự khác nhau trong S theo thứ tự từ điển tăng dần. 3 | 4 | Input Format 5 | 6 | 1 dòng chứa xâu S 7 | 8 | Constraints 9 | 10 | 1<=len(S)<=10; 11 | 12 | Output Format 13 | 14 | In ra các hoán vị của xâu S 15 | 16 | Sample Input 0 17 | 18 | lqk 19 | Sample Output 0 20 | 21 | klq 22 | kql 23 | lkq 24 | lqk 25 | qkl 26 | qlk 27 | */ 28 | 29 | #include 30 | using namespace std; 31 | #define ll long long 32 | #define pii pair 33 | #define vii vector 34 | #define pb push_back 35 | #define fi first 36 | #define se second 37 | #define foru(i,a,b) for(int i=a;i=a;i--) 39 | const ll MOD = 1e9 + 7; 40 | 41 | string s ; 42 | int a[1000]; 43 | int main() 44 | { 45 | ios_base::sync_with_stdio(0); 46 | cin.tie(0); 47 | cout.tie(0); 48 | cin>> s; 49 | set se; 50 | for(int i=0;i v; 54 | for(auto x : se){ 55 | v.push_back(x); 56 | } 57 | for(int i=0;i> s; 74 | sort(all(s)); 75 | do{ 76 | cout << s; 77 | el; 78 | } while (next_permutation(all(s))); 79 | } 80 | 81 | 82 | 83 | 84 | */ 85 | -------------------------------------------------------------------------------- /Sinh/lietkehoanvinguoccacptukhacnhau.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Cho mảng số nguyên gồm N phần tử, các phần tử trong mảng không quá 100. Hãy liệt kê các hoán vị của các phần tử khác nhau trong mảng theo thứ tự ngược. 4 | 5 | Input Format 6 | 7 | Dòng đầu tiên là N; Dòng thứ 2 là các phần tử trong mảng; 8 | 9 | Constraints 10 | 11 | 1<=N<=15; 12 | 13 | Output Format 14 | 15 | In ra các hoán vị ngược của các phần tử khác nhau trong mảng. 16 | 17 | Sample Input 0 18 | 19 | 2 20 | 1 2 21 | Sample Output 0 22 | 23 | 2 1 24 | 1 2 25 | */ 26 | 27 | #include 28 | using namespace std; 29 | typedef long long ll; 30 | const int MOD = 1e9 + 7; 31 | 32 | int main() 33 | { 34 | int n; 35 | cin >> n; 36 | int a[n + 1]; 37 | int b[n + 1]; 38 | set se; 39 | vector v; 40 | for (int i = 1; i <= n; i++) 41 | { 42 | cin >> b[i]; 43 | se.insert(b[i]); 44 | } 45 | for (auto x : se) 46 | v.push_back(x); 47 | for (int i = 1; i <= v.size(); i++) 48 | { 49 | a[i] = v.size() - i + 1; 50 | } 51 | do 52 | { 53 | for (int i = 1; i <= v.size(); i++) 54 | { 55 | cout << v[a[i]-1] << " "; 56 | } 57 | cout << endl; 58 | } while (prev_permutation(a + 1, a + v.size() + 1)); 59 | return 0; 60 | } -------------------------------------------------------------------------------- /Sinh/lietkexaukitu.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Cho chữ cái c in hoa và số nguyên K; Hãy tìm cách liệt kê tất cả các xâu có K ký tự khác nhau được tạo ra bởi các chữ cái tính từ ‘A’ đến ký tự c. Các ký tự được phép lặp lại nhưng có tính các xâu là hoán vị của xâu nào đó đã liệt kê trước đó. 3 | 4 | Input Format 5 | 6 | Chữ cái c và K 7 | 8 | Constraints 9 | 10 | 'A' < c <='H'; 0 < K < (c – ‘A’); 11 | 12 | Output Format 13 | 14 | Ghi ra lần lượt các xâu ký tự kết quả theo thứ tự từ điển trên từng dòng. 15 | 16 | Sample Input 0 17 | 18 | C 2 19 | Sample Output 0 20 | 21 | AA 22 | AB 23 | AC 24 | BA 25 | BB 26 | BC 27 | CA 28 | CB 29 | CC 30 | 31 | */ 32 | 33 | #include 34 | using namespace std; 35 | #define ll long long 36 | #define pii pair 37 | #define vii vector 38 | #define pb push_back 39 | #define fi first 40 | #define se second 41 | #define foru(i, a, b) for (int i = a; i < b; i++) 42 | #define ford(i, b, a) for (int i = b; i >= a; i--) 43 | const ll MOD = 1e9 + 7; 44 | 45 | char a[1000], c; 46 | int n, k, ok; 47 | void ktao() 48 | { 49 | for (int i = 1; i <= k; i++) 50 | { 51 | a[i] = 'A'; 52 | } 53 | } 54 | void sinh() 55 | { 56 | int i = k; 57 | while (i >= 1 && a[i] == c) 58 | { 59 | --i; 60 | } 61 | if (i == 0) 62 | { 63 | ok = 0; 64 | } 65 | else 66 | { 67 | a[i]++; 68 | for (int j = i + 1; j <= k; j++) 69 | { 70 | a[j] = 'A'; 71 | } 72 | } 73 | } 74 | int main() 75 | { 76 | ios_base::sync_with_stdio(0); 77 | cin.tie(0); 78 | cout.tie(0); 79 | cin >> c >> k; 80 | ok = 1; 81 | ktao(); 82 | while (ok) 83 | { 84 | for (int i = 1; i <= k; i++) 85 | { 86 | cout << a[i]; 87 | } 88 | cout << endl; 89 | sinh(); 90 | } 91 | } -------------------------------------------------------------------------------- /Sinh/nextString.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Hãy viết chương trình nhận vào một chuỗi S(có thể khá dài) các ký tự số và đưa ra màn hình hoán vị kế tiếp của các ký tự số đó (với ý nghĩa là hoán vị có giá trị lớn hơn tiếp theo nếu ta coi chuỗi đó là một giá trị số nguyên). Chú ý: Các ký tự số trong dãy có thể trùng nhau. Ví dụ:123 -> 132 279134399742 -> 279134423799 3 | Cũng có trường hợp sẽ không thể có hoán vị kế tiếp. Ví dụ như khi đầu vào là chuỗi 987. 4 | 5 | Input Format 6 | 7 | Dòng duy nhất chứa xâu S 8 | 9 | Constraints 10 | 11 | 1<=len(S)<=10000; 12 | 13 | Output Format 14 | 15 | In ra xâu hoán vị kế tiếp của S, hoặc in ra "NOT EXIST" nếu S là xâu hoán vị cuối cùng. 16 | 17 | Sample Input 0 18 | 19 | 99877541 20 | Sample Output 0 21 | 22 | NOT EXIST 23 | Sample Input 1 24 | 25 | 76090400736422 26 | Sample Output 1 27 | 28 | 76090400742236 29 | 30 | */ 31 | 32 | 33 | #include 34 | using namespace std; 35 | 36 | int main() 37 | { 38 | string s; 39 | cin >> s; 40 | if (next_permutation(s.begin(), s.end())) 41 | { 42 | cout << s << endl; 43 | } 44 | else 45 | { 46 | cout << "NOT EXIST"; 47 | } 48 | 49 | return 0; 50 | } 51 | -------------------------------------------------------------------------------- /Sinh/phanhoach.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Cho số nguyên dương N, bạn hãy in ra các cách biểu diễn N dưới dạng tổng của các số tự nhiên không vượt quá N. 4 | 5 | Input Format 6 | 7 | Số nguyên dương N 8 | 9 | Constraints 10 | 11 | 1<=N<=20; 12 | 13 | Output Format 14 | 15 | Dòng đầu tiên in ra số lượng cách biểu diễn. Các dòng tiếp theo in ra cách biểu diễn được liệt kê theo thứ tự từ từ điển giảm dần. 16 | 17 | Sample Input 0 18 | 19 | 5 20 | Sample Output 0 21 | 22 | 7 23 | 5 24 | 4+1 25 | 3+2 26 | 3+1+1 27 | 2+2+1 28 | 2+1+1+1 29 | 1+1+1+1+1 30 | */ 31 | 32 | #include 33 | 34 | using namespace std; 35 | #define ll long long 36 | ll n; 37 | ll a[10000]; 38 | vector> res; 39 | void in(int n) 40 | { 41 | 42 | vector b; 43 | for (int i = 1; i <= n; i++) 44 | { 45 | b.push_back(a[i]); 46 | } 47 | res.push_back(b); 48 | } 49 | 50 | void Try(int i, int cur, int k) 51 | { 52 | for (int j = k; j >= 1; j--) 53 | { 54 | if (cur + j <= n) 55 | { 56 | a[i] = j; 57 | cur += j; 58 | if (cur == n) 59 | { 60 | in(i); 61 | } 62 | else 63 | Try(i + 1, cur, j); 64 | 65 | cur -= j; 66 | } 67 | } 68 | } 69 | 70 | int main() 71 | { 72 | res.clear(); 73 | cin >> n; 74 | Try(1, 0, n); 75 | cout << res.size() << endl; 76 | for (int i = 0; i < res.size(); i++) 77 | { 78 | for (int j = 0; j < res[i].size(); j++) 79 | { 80 | cout << res[i][j] ; 81 | if(j!=res[i].size()-1){ 82 | cout<<"+"; 83 | 84 | } 85 | } 86 | cout< 31 | using namespace std; 32 | #define ll long long 33 | #define pii pair 34 | #define vii vector 35 | #define pb push_back 36 | #define fi first 37 | #define se second 38 | #define foru(i, a, b) for (int i = a; i <= b; i++) 39 | #define ford(i, b, a) for (int i = b; i >= a; i--) 40 | const ll MOD = 1e9 + 7; 41 | 42 | int n, a[100], check[10]; 43 | void in() 44 | { 45 | foru(i, 1, n) 46 | { 47 | cout << a[i]; 48 | } 49 | cout << endl; 50 | } 51 | void Try(int i) 52 | { 53 | for (int j = n; j >= 1; j--) 54 | { 55 | if (check[j] == 0) 56 | { 57 | a[i] = j; 58 | check[j] = 1; 59 | if (i == n) 60 | { 61 | in(); 62 | } 63 | else 64 | { 65 | Try(i + 1); 66 | } 67 | check[j] = 0; 68 | } 69 | } 70 | } 71 | int main() 72 | { 73 | ios_base::sync_with_stdio(0); 74 | cin.tie(0); 75 | cout.tie(0); 76 | cin >> n; 77 | Try(1); 78 | } -------------------------------------------------------------------------------- /Sinh/sinhtohop.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Cho hai số nguyên dương N và K. Nhiệm vụ của bạn là hãy liệt kê tất cả các tập con K phần tử của các số từ 1 tới N. 3 | 4 | Input Format 5 | 6 | 2 số nguyên dương N và K. 7 | 8 | Constraints 9 | 10 | 1<=K<=N<=15; 11 | 12 | Output Format 13 | 14 | In ra các tổ hợp trên từng dòng. 15 | 16 | Sample Input 0 17 | 18 | 5 2 19 | Sample Output 0 20 | 21 | 12 22 | 13 23 | 14 24 | 15 25 | 23 26 | 24 27 | 25 28 | 34 29 | 35 30 | 45 31 | 32 | */ 33 | 34 | #include 35 | using namespace std; 36 | #define ll long long 37 | #define pii pair 38 | #define vii vector 39 | #define pb push_back 40 | #define fi first 41 | #define se second 42 | #define foru(i, a, b) for (int i = a; i < b; i++) 43 | #define ford(i, b, a) for (int i = b; i >= a; i--) 44 | const ll MOD = 1e9 + 7; 45 | int n, k, ok, a[1000]; 46 | 47 | void ktao() 48 | { 49 | for (int i = 1; i <= k; i++) 50 | { 51 | a[i] = i; 52 | } 53 | } 54 | void sinh() 55 | { 56 | int i = k; 57 | while (i >= 1 && a[i] == n - k + i) 58 | { 59 | --i; 60 | } 61 | if (i == 0) 62 | { 63 | ok = 0; 64 | } 65 | else 66 | { 67 | a[i]++; 68 | for (int j = i + 1; j <= k; j++) 69 | { 70 | a[j]=a[j-1]+1; 71 | } 72 | } 73 | } 74 | int main() 75 | { 76 | ios_base::sync_with_stdio(0); 77 | cin.tie(0); 78 | cout.tie(0); 79 | cin>> n >> k; 80 | ok =1; 81 | ktao(); 82 | while(ok){ 83 | for(int i=1;i<=k;i++){ 84 | cout< 26 | using namespace std; 27 | #define ll long long 28 | #define pii pair 29 | #define vii vector 30 | #define pb push_back 31 | #define fi first 32 | #define se second 33 | #define foru(i,a,b) for(int i=a;i=a;i--) 35 | const ll MOD = 1e9 + 7; 36 | int n , k , ok ,a[1000]; 37 | void ktao(){ 38 | for(int i=1;i<=k;i++){ 39 | a[i] =i; 40 | } 41 | } 42 | void sinh(){ 43 | int i =k; 44 | while(i>=1 && a[i]==n-k+i){ 45 | --i; 46 | } 47 | if(i==0){ 48 | ok =0; 49 | }else { 50 | a[i]++; 51 | for(int j=i+1;j<=k;j++){ 52 | a[j] =a[j-1]+1; 53 | } 54 | } 55 | } 56 | 57 | int main() 58 | { 59 | ios_base::sync_with_stdio(0); 60 | cin.tie(0); 61 | cout.tie(0); 62 | cin >> n>> k; 63 | ok =1; 64 | set se; 65 | for(int i=1;i<=k;i++){ 66 | cin>> a[i]; 67 | se.insert(a[i]); 68 | } 69 | int cnt =0; 70 | sinh(); 71 | for(int i=1;i<=k;i++){ 72 | cnt+=se.count(a[i]); 73 | } 74 | if(ok ){ 75 | cout< 28 | using namespace std; 29 | typedef long long ll; 30 | const int MOD = 1e9 + 7; 31 | bool check(int a[], int n) 32 | { 33 | for (int i = 2; i <= n - 1; i++) 34 | { 35 | if (abs(a[i] - a[i + 1]) == 1||abs(a[i]-a[i-1])==1) 36 | return false; 37 | } 38 | return true; 39 | } 40 | int main() 41 | { 42 | int n; 43 | cin >> n; 44 | int a[n + 1]; 45 | for (int i = 1; i <= n; i++) 46 | { 47 | a[i] = i; 48 | } 49 | do 50 | { 51 | if (check(a, n)) 52 | { 53 | for (int i = 1; i <= n; i++) 54 | { 55 | cout << a[i]; 56 | } 57 | cout << endl; 58 | } 59 | } while (next_permutation(a + 1, a + n + 1)); 60 | return 0; 61 | } -------------------------------------------------------------------------------- /Sinh/tohopketiep.cpp: -------------------------------------------------------------------------------- 1 | /** 2 | * 3 | * Cho tập gồm N phần tử là các số từ 1 tới N và số K. Bạn hãy đưa ra tập con kế tiếp của tập con hiện tại. Nếu tập con hiện tại là tập con cuối cùng thì bạn hãy đưa ra tập con kế tiếp là tập con đầu tiên. 4 | 5 | Input Format 6 | 7 | Dòng đầu tiên là 2 số nguyên dương N và K. Dòng thứ 2 là K số nguyên của tập con hiện tại 8 | 9 | Constraints 10 | 11 | 1<=K<=N<=1000; 12 | 13 | Output Format 14 | 15 | In ra tập con kế tiếp trên 1 dòng. 16 | 17 | Sample Input 0 18 | 19 | 6 5 20 | 2 3 4 5 6 21 | Sample Output 0 22 | 23 | 1 2 3 4 5 24 | Sample Input 1 25 | 26 | 11 7 27 | 1 3 5 6 7 8 9 28 | Sample Output 1 29 | 30 | 1 3 5 6 7 8 10 31 | Submissions: 106 32 | Max Score: 100 33 | Difficulty: Easy 34 | Rate This Challenge: 35 | 36 | 37 | More 38 | 39 | * / 40 | 41 | 42 | 43 | 44 | #include 45 | using namespace std; 46 | int n, k, a[1000]; 47 | void next() 48 | { 49 | int i = k; 50 | while (i >= 1 && a[i] == n - k + i) 51 | { 52 | i--; 53 | } 54 | if (i == 0) 55 | { 56 | for (int i = 1; i <= k; i++) 57 | { 58 | cout << i << " "; 59 | } 60 | } 61 | else 62 | { 63 | a[i]++; 64 | for (int j = i + 1; j <= k; j++) 65 | { 66 | a[j] = a[j - 1] + 1; 67 | } 68 | for (int i = 1; i <= k; i++) 69 | { 70 | cout << a[i] << " "; 71 | } 72 | } 73 | } 74 | 75 | int main() 76 | { 77 | cin >> n >> k; 78 | for (int i = 1; i <= k; i++) 79 | { 80 | cin >> a[i]; 81 | } 82 | next(); 83 | cout << endl; 84 | 85 | return 0; 86 | } -------------------------------------------------------------------------------- /Sinh/xauAB.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | 4 | Nhiệm vụ của bạn ở bài tập này là sinh ra các xâu chỉ bao gồm 2 kí tự A và B theo thứ tự từ điển giảm dần. 5 | 6 | Input Format 7 | 8 | Dòng duy nhất chứa số nguyên dương N là độ dài của xâu. 9 | 10 | Constraints 11 | 12 | 1<=N<=10; 13 | 14 | Output Format 15 | 16 | In ra các xâu AB, mỗi xâu được in trên 1 dòng. 17 | 18 | Sample Input 0 19 | 20 | 3 21 | Sample Output 0 22 | 23 | BBB 24 | BBA 25 | BAB 26 | BAA 27 | ABB 28 | ABA 29 | AAB 30 | AAA 31 | */ 32 | 33 | #include 34 | using namespace std; 35 | #define ll long long 36 | #define pii pair 37 | #define vii vector 38 | #define pb push_back 39 | #define fi first 40 | #define se second 41 | #define foru(i, a, b) for (int i = a; i < b; i++) 42 | #define ford(i, b, a) for (int i = b; i >= a; i--) 43 | const ll MOD = 1e9 + 7; 44 | int ok, n; 45 | string s; 46 | vector ans; 47 | void ktao(){ 48 | s=string(n,'B'); 49 | } 50 | void sinh() 51 | { 52 | int i = s.length() - 1; 53 | while (i >= 0 && s[i] == 'A') 54 | { 55 | s[i] = 'B'; 56 | --i; 57 | } 58 | if (i == -1) 59 | { 60 | ok = 0; 61 | } 62 | else 63 | { 64 | s[i] = 'A'; 65 | } 66 | } 67 | int main() 68 | { 69 | ios_base::sync_with_stdio(0); 70 | cin.tie(0); 71 | cout.tie(0); 72 | cin>> n; 73 | ktao(); 74 | ok = 1; 75 | while (ok) 76 | { 77 | cout< 38 | using namespace std; 39 | 40 | int n, ok, a[1000]; 41 | void ktao() 42 | { 43 | for (int i = 1; i <= n; i++) 44 | { 45 | a[i] = 0; 46 | } 47 | } 48 | void next() 49 | { 50 | int i = n; 51 | while (i >= 1 && a[i] == 1) 52 | { 53 | a[i--] = 0; 54 | } 55 | if (i == 0) 56 | { 57 | ok = 0; 58 | } 59 | else 60 | { 61 | a[i] = 1; 62 | } 63 | } 64 | // viet 1 ham check 65 | bool check() 66 | { 67 | int l = 1, r = n; 68 | while (l < r) 69 | { 70 | if (a[l] != a[r]) 71 | { 72 | return false; 73 | } 74 | ++l; 75 | --r; 76 | } 77 | return true; 78 | } 79 | int main() 80 | { 81 | ios_base::sync_with_stdio(0); 82 | cin.tie(0); 83 | cout.tie(0); 84 | cin >> n; 85 | ktao(); 86 | ok = 1; 87 | while (ok) 88 | { 89 | if (check()) 90 | { 91 | for (int i = 1; i <= n; i++) 92 | { 93 | cout << a[i]; 94 | } 95 | cout << endl; 96 | } 97 | next(); 98 | } 99 | 100 | return 0; 101 | } -------------------------------------------------------------------------------- /Sinh/xaunhiphanketiep.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Cho xâu nhị phân S, hãy in ra xâu nhị phân kế tiếp của S. Trong trường hợp S là xâu nhị phân cuối cùng thì in ra xâu nhị phân đầu tiên. 3 | 4 | Input Format 5 | 6 | 1 dòng duy nhất chưa xâu nhị phân S 7 | 8 | Constraints 9 | 10 | 1<=len(S)<=1000; 11 | 12 | Output Format 13 | 14 | In ra xâu nhị phân kế tiếp. 15 | 16 | Sample Input 0 17 | 18 | 1110010 19 | Sample Output 0 20 | 21 | 1110011 22 | Sample Input 1 23 | 24 | 11111 25 | Sample Output 1 26 | 27 | 00000 28 | Submissions: 121 29 | Max Score: 100 30 | Difficulty: Easy 31 | Rate This Challenge: 32 | 33 | 34 | More 35 | 36 | 37 | */ 38 | 39 | 40 | 41 | #include 42 | using namespace std ; 43 | int main(){ 44 | string s; 45 | cin>>s; 46 | int pos=s.length()-1; 47 | while(pos>=0&&s[pos]=='1'){ 48 | s[pos]='0'; 49 | pos--; 50 | } 51 | if(pos==-1){ 52 | cout< 32 | using namespace std; 33 | #define ll long long 34 | #define pii pair 35 | #define vii vector 36 | #define pb push_back 37 | #define fi first 38 | #define se second 39 | #define foru(i, a, b) for (int i = a; i < b; i++) 40 | #define ford(i, b, a) for (int i = b; i >= a; i--) 41 | const ll MOD = 1e9 + 7; 42 | int n, ok, k, a[1000]; 43 | string s[1005]; 44 | void ktao() 45 | { 46 | for (int i = 1; i <= n; i++) 47 | { 48 | a[i] = i; 49 | } 50 | } 51 | void sinh() 52 | { 53 | int i = n - 1; 54 | while (i >= 1 && a[i] > a[i + 1]) 55 | { 56 | --i; 57 | } 58 | if (i == 0) 59 | { 60 | ok = 0; 61 | } 62 | else 63 | { 64 | int j = n; 65 | while (a[j] < a[i]) 66 | --j; 67 | swap(a[i], a[j]); 68 | reverse(a + 1 + i, a + 1 + n); 69 | } 70 | } 71 | 72 | int main() 73 | { 74 | ios_base::sync_with_stdio(0); 75 | cin.tie(0); 76 | cout.tie(0); 77 | cin >> n; 78 | for (int i = 1; i <= n; i++) 79 | { 80 | cin >> s[i]; 81 | } 82 | sort(s+1,s+1+n); 83 | ktao(); 84 | ok = 1; 85 | while (ok) 86 | { 87 | for (int i = 1; i <= n; i++) 88 | { 89 | cout << s[a[i]] << ' '; 90 | } 91 | cout << endl; 92 | sinh(); 93 | } 94 | } -------------------------------------------------------------------------------- /Sinh/xnpdoixungchan.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Nhiệm vụ của bạn là hãy liệt kê các xâu nhị phân thuận nghịch có độ dài chẵn theo thứ tự từ điển với chiều dài không quá n kí tự. 4 | 5 | Input Format 6 | 7 | Dòng duy nhất chứa số nguyên N. 8 | 9 | Constraints 10 | 11 | 2<=N<=30 12 | 13 | Output Format 14 | 15 | In ra các xâu nhị phân đối xứng có độ dài chẵn theo thứ tự từ điển. 16 | 17 | Sample Input 0 18 | 19 | 4 20 | Sample Output 0 21 | 22 | 00 23 | 0000 24 | 0110 25 | 1001 26 | 11 27 | 1111 28 | */ 29 | 30 | #include 31 | using namespace std; 32 | #define ll long long 33 | #define pii pair 34 | #define vii vector 35 | #define pb push_back 36 | #define fi first 37 | #define se second 38 | #define foru(i, a, b) for (int i = a; i < b; i++) 39 | #define ford(i, b, a) for (int i = b; i >= a; i--) 40 | const ll MOD = 1e9 + 7; 41 | int n, ok; 42 | string s; 43 | void sinh() 44 | { 45 | int i = s.length() - 1; 46 | while (i >= 0 && s[i] == '1') 47 | { 48 | s[i--] = '0'; 49 | } 50 | if (i == -1) 51 | ok = 0; 52 | else 53 | s[i] = '1'; 54 | } 55 | int main() 56 | { 57 | ios_base::sync_with_stdio(0); 58 | cin.tie(0); 59 | cout.tie(0); 60 | cin >> n; 61 | vector ans; 62 | for (int i = 1; i <= n / 2; i++) 63 | { 64 | ok = 1; 65 | s = string(i, '0'); 66 | while (ok) 67 | 68 | { 69 | string t=s; 70 | reverse(begin(t), end(t)); 71 | ans.pb(s+t); 72 | sinh(); 73 | } 74 | } 75 | sort(ans.begin(), ans.end()); 76 | for(auto x : ans ) cout< 34 | #include 35 | using namespace std; 36 | #define ll long long 37 | #define pii pair 38 | #define vii vector 39 | #define fi first 40 | #define se second 41 | #define foru(i,a,b) for(int i=a;i=a;i--) 43 | const ll MOD = 1e9 + 7; 44 | 45 | 46 | int main() 47 | { 48 | ios_base::sync_with_stdio(0); 49 | cin.tie(0); 50 | cout.tie(0); 51 | int n ; 52 | cin>> n ; 53 | int a[n+1]; 54 | for(int i=1;i<=n;i++){ 55 | int x ; 56 | cin>> x ; 57 | a[x]=i; 58 | } 59 | int cnt =1; 60 | for(int i=2;i<=n;i++){ 61 | if(a[i] 2 | 3 | using namespace std; 4 | 5 | typedef long long ll; 6 | typedef pair pii; 7 | typedef unsigned long long ull; 8 | 9 | #define X first 10 | #define Y second 11 | #define pb push_back 12 | #define mp make_pair 13 | #define ep emplace_back 14 | #define EL printf("\n") 15 | #define sz(A) (int)A.size() 16 | #define FOR(i, l, r) for (int i = l; i <= r; i++) 17 | #define FOD(i, r, l) for (int i = r; i >= l; i--) 18 | #define fillchar(a, x) memset(a, x, sizeof(a)) 19 | #define faster \ 20 | ios_base::sync_with_stdio(false); \ 21 | cin.tie(NULL); \ 22 | cout.tie(NULL); 23 | 24 | ll cnt[100001]={0}; 25 | int main() 26 | { 27 | ios_base::sync_with_stdio(0); 28 | cin.tie(0); 29 | cout.tie(0); 30 | ll n, x; cin >> n >> x; 31 | ll a[n]; 32 | for(ll i = 0; i < n; i++){ 33 | cin >> a[i]; 34 | cnt[a[i]]++; 35 | } 36 | for(ll i = 0; i < n; i++){ 37 | if(a[i] > x && cnt[a[i]-x]){ 38 | cout << 1 << endl; 39 | return 0; 40 | } 41 | } 42 | cout << "-1\n"; 43 | 44 | } -------------------------------------------------------------------------------- /SẮP XẾP VÀ TÌM KIẾM/DIỀN SÓ CÒN THIẾU.txt: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace std; 4 | 5 | typedef long long ll; 6 | typedef pair pii; 7 | typedef unsigned long long ull; 8 | 9 | #define X first 10 | #define Y second 11 | #define pb push_back 12 | #define mp make_pair 13 | #define ep emplace_back 14 | #define EL printf("\n") 15 | #define sz(A) (int)A.size() 16 | #define FOR(i, l, r) for (int i = l; i <= r; i++) 17 | #define FOD(i, r, l) for (int i = r; i >= l; i--) 18 | #define fillchar(a, x) memset(a, x, sizeof(a)) 19 | #define faster \ 20 | ios_base::sync_with_stdio(false); \ 21 | cin.tie(NULL); \ 22 | cout.tie(NULL); 23 | ll cnt[1000006]={0}; 24 | 25 | int main() 26 | { 27 | ios_base::sync_with_stdio(0); 28 | cin.tie(0); 29 | cout.tie(0); 30 | vector v; 31 | ll n,l=1e9,r=-1e9; 32 | cin>> n; 33 | ll a[n]; 34 | for(ll i = 0; i < n; i++) { 35 | cin>>a[i]; 36 | l=min(l,a[i]); 37 | r=max(r,a[i]); 38 | cnt[a[i]]=1; 39 | } 40 | 41 | int ans=0; 42 | for(int i=l;i<=r;i++){ 43 | if(cnt[i]==0) ++ans; 44 | } 45 | cout< 25 | 26 | using namespace std; 27 | 28 | typedef long long ll; 29 | typedef pair ii; 30 | typedef unsigned long long ull; 31 | 32 | #define X first 33 | #define Y second 34 | #define pb push_back 35 | #define mp make_pair 36 | #define ep emplace_back 37 | #define EL printf("\n") 38 | #define sz(A) (int) A.size() 39 | #define FOR(i,l,r) for (int i=l;i<=r;i++) 40 | #define FOD(i,r,l) for (int i=r;i>=l;i--) 41 | #define fillchar(a,x) memset(a, x, sizeof (a)) 42 | #define faster ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); 43 | 44 | 45 | bool cmp(int a, int b){ 46 | return abs(a)> n; 55 | int a[n]; 56 | FOR(i,0,n-1) cin>>a[i]; 57 | stable_sort(a,a+n,cmp); 58 | 59 | for(int i=0;i 31 | using namespace std; 32 | #define ll long long 33 | #define pii pair 34 | ll n , k; 35 | ll tinh(ll n ){ 36 | ll sum =0; 37 | while(n){ 38 | sum+=n%10; 39 | n/=10; 40 | } 41 | return sum ; 42 | } 43 | 44 | bool cmp(pii a, pii b){ 45 | if(a.second == b.second){ 46 | return a>n; 54 | vector v; 55 | ll a[n]; 56 | for(ll &x : a){ 57 | cin>>x; 58 | v.push_back({x,tinh(x)}); 59 | 60 | } 61 | sort(v.begin(),v.end(),cmp); 62 | for(auto x : v){ 63 | cout< 24 | 25 | using namespace std; 26 | typedef long long ll; 27 | typedef unsigned long long ull; 28 | typedef long double ld; 29 | typedef pair pi; 30 | typedef vector vi; 31 | typedef vector vii; 32 | 33 | #define X first 34 | #define Y second 35 | #define pb push_back 36 | #define all(a) a.begin(), a.end() 37 | #define mp make_pair 38 | #define ep emplace_back 39 | #define EL printf("\n") 40 | #define sz(A) (int)A.size() 41 | #define FOR(i, l, r) for (int i = l; i <= r; i++) 42 | #define FOD(i, r, l) for (int i = r; i >= l; i--) 43 | #define fillchar(a, x) memset(a, x, sizeof(a)) 44 | #define faster \ 45 | ios_base::sync_with_stdio(false); \ 46 | cin.tie(NULL); \ 47 | cout.tie(NULL); 48 | 49 | int main() 50 | { 51 | ios_base::sync_with_stdio(0); 52 | cin.tie(0); 53 | cout.tie(0); 54 | int n; 55 | cin >> n; 56 | int a[n]; 57 | vi v(n); 58 | for (int i = 0; i < n; i++) 59 | { 60 | cin >> a[i]; 61 | v[i] = a[i]; 62 | } 63 | sort(all(v)); 64 | for (int x : a) 65 | { 66 | auto it = upper_bound(all(v), x); 67 | if (it == v.end()) 68 | { 69 | cout << "_ "; 70 | } 71 | else 72 | cout << *it << " "; 73 | } 74 | cout << endl; 75 | } -------------------------------------------------------------------------------- /SẮP XẾP VÀ TÌM KIẾM/TỔNG BA SỐ CÓ TỔNG BẰNG X.txt: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | 4 | #define ms(s,n) memset(s,n,sizeof(s)) 5 | #define all(a) a.begin(),a.end() 6 | #define present(t, x) (t.find(x) != t.end()) 7 | #define sz(a) int((a).size()) 8 | #define FOR(i, a, b) for (int i = (a); i < (b); ++i) 9 | #define FORd(i, a, b) for (int i = (a) - 1; i >= (b); --i) 10 | #define pb push_back 11 | #define pf push_front 12 | #define fi first 13 | #define se second 14 | #define mp make_pair 15 | 16 | typedef long long ll; 17 | typedef unsigned long long ull; 18 | typedef long double ld; 19 | typedef pair pi; 20 | typedef vector vi; 21 | typedef vector vii; 22 | 23 | const int MOD = (int) 1e9+7; 24 | const int INF = (int) 1e9+1; 25 | inline ll gcd(ll a,ll b){ll r;while(b){r=a%b;a=b;b=r;}return a;} 26 | inline ll lcm(ll a,ll b){return a/gcd(a,b)*b;} 27 | 28 | 29 | 30 | int main(){ 31 | 32 | int n, x; cin >> n >> x; 33 | pi a[n]; 34 | for(int i = 0; i < n; i++){ 35 | cin >> a[i].fi; 36 | a[i].se = i; 37 | } 38 | sort(a, a + n); 39 | for(int i = 0; i < n - 2; i++){ 40 | int l = i +1, r = n - 1; 41 | int y = x - a[i].fi; 42 | while(l < r){ 43 | if(a[l].fi + a[r].fi == y){ 44 | cout << a[i].se + 1 << " " << a[l].se + 1 <<" " << a[r].se + 1 << endl; 45 | return 0; 46 | } 47 | else if (a[l].fi + a[r].fi < y){ 48 | ++l; 49 | } 50 | else --r; 51 | } 52 | } 53 | cout << "IMPOSSIBLE\n"; 54 | return 0; 55 | } -------------------------------------------------------------------------------- /SẮP XẾP VÀ TÌM KIẾM/check in ở sân bày (như chiếu sáng ).txt: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | 4 | #define ms(s,n) memset(s,n,sizeof(s)) 5 | #define all(a) a.begin(),a.end() 6 | #define present(t, x) (t.find(x) != t.end()) 7 | #define sz(a) int((a).size()) 8 | #define FOR(i, a, b) for (int i = (a); i < (b); ++i) 9 | #define FORd(i, a, b) for (int i = (a) - 1; i >= (b); --i) 10 | #define pb push_back 11 | #define pf push_front 12 | #define fi first 13 | #define se second 14 | #define mp make_pair 15 | 16 | typedef long long ll; 17 | typedef unsigned long long ull; 18 | typedef long double ld; 19 | typedef pair pi; 20 | typedef vector vi; 21 | typedef vector vii; 22 | 23 | const int MOD = (int) 1e9+7; 24 | const int INF = (int) 1e9+1; 25 | inline ll gcd(ll a,ll b){ll r;while(b){r=a%b;a=b;b=r;}return a;} 26 | inline ll lcm(ll a,ll b){return a/gcd(a,b)*b;} 27 | 28 | ll max(ll a, ll b) { 29 | return a> b? a: b; 30 | } 31 | 32 | int main(){ 33 | ll n ; 34 | cin>> n; 35 | pi a[n]; 36 | for(ll i=0;i>a[i].first>>a[i].second; 38 | } 39 | sort(a,a+n); 40 | ll end_time=a[0].first+a[0].second; 41 | for(ll i=1;i 35 | using namespace std; 36 | #define ll long long 37 | #define pii pair 38 | #define vii vector 39 | #define pb push_back 40 | #define fi first 41 | #define se second 42 | #define foru(i, a, b) for (int i = a; i < b; i++) 43 | #define ford(i, b, a) for (int i = b; i >= a; i--) 44 | const ll MOD = 1e9 + 7; 45 | 46 | int main() 47 | { 48 | ios_base::sync_with_stdio(0); 49 | cin.tie(0); 50 | cout.tie(0); 51 | int n, k; 52 | cin >> n >> k; 53 | int a[n]; 54 | for (int i = 0; i < n; ++i) 55 | cin >> a[i]; 56 | int start = 0, cnt = 0; 57 | ll ans = 0; 58 | map mp; 59 | for (int i = 0; i < n; i++) 60 | { 61 | mp[a[i]]++; 62 | if (mp[a[i]] == 1) 63 | ++cnt; 64 | while (cnt > k) 65 | { 66 | mp[a[start]]--; 67 | if (mp[a[start]] == 0) 68 | --cnt; 69 | ++start; 70 | } 71 | ans += i - start + 1; 72 | } 73 | cout << ans << endl; 74 | } -------------------------------------------------------------------------------- /caynhiphan/caynhiphanbangnhau.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | 4 | #define ll long long 5 | #define pii pair 6 | #define vii vector 7 | #define pb push_back 8 | #define fi first 9 | #define el cout<> a; 12 | #define sz(a) a.size(); 13 | #define out(a) cout<< a; 14 | #define all(x) (x).begin(), (x).end() 15 | #define rep(a) for(int i = 0; i < (a); i++) 16 | #define vll vector 17 | #define vi vector 18 | #define ms(a,n) memset(a,n,sizeof(a)) 19 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 20 | #define FOD(i,b,a) for(int i=b;i>=a;i--) 21 | #define faster ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); 22 | const ll MOD = 1e9 + 7; 23 | 24 | struct node{ 25 | int val; 26 | node *left, *right; 27 | node(int x ){ 28 | val = x; 29 | left = right = NULL; 30 | } 31 | }; 32 | 33 | void makeRoot(node *root, int u,int v ,char c ){ 34 | if (c == 'L') 35 | root->left = new node(v); 36 | else { 37 | root->right = new node(v); 38 | } 39 | } 40 | 41 | 42 | void insertNode(node *root, int u,int v,char c){ 43 | if(root==NULL){ 44 | root = new node(u); 45 | 46 | } 47 | } 48 | 49 | 50 | int main() 51 | { 52 | 53 | faster; 54 | 55 | 56 | 57 | } 58 | -------------------------------------------------------------------------------- /caynhiphan/checkBST.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Cho thự tự duyệt Inorder của một cây nhị phân, hãy xác định xem thứ tự này có phải là thứ tự duyệt inorder của một cây nhị phân tìm kiếm hay không. 3 | 4 | Input Format 5 | 6 | Dòng đầu tiên là N : số lượng node trên cây; Dòng thứ 2 gồm N node theo thứ tự duyệt inorder 7 | 8 | Constraints 9 | 10 | 1<=N<=1000; 1<=A[i]<=10^6; 11 | 12 | Output Format 13 | 14 | In ra YES nếu cây nhị phân đã cho là cây nhị phân tìm kiếm, ngược lại in ra NO. 15 | 16 | Sample Input 0 17 | 18 | 8 19 | 1 3 5 7 9 11 14 16 20 | Sample Output 0 21 | 22 | YES 23 | 24 | */ 25 | 26 | 27 | 28 | #include 29 | using namespace std; 30 | 31 | #define ll long long 32 | #define pii pair 33 | #define vii vector 34 | #define pb push_back 35 | #define fi first 36 | #define el cout<> a; 39 | #define sz(a) a.size(); 40 | #define out(a) cout<< a; 41 | #define all(x) (x).begin(), (x).end() 42 | #define rep(a) for(int i = 0; i < (a); i++) 43 | #define vll vector 44 | #define vi vector 45 | #define ms(a,n) memset(a,n,sizeof(a)) 46 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 47 | #define FOD(i,b,a) for(int i=b;i>=a;i--) 48 | #define faster ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); 49 | const ll MOD = 1e9 + 7; 50 | 51 | 52 | 53 | int main() 54 | { 55 | 56 | faster; 57 | ll n; 58 | cin >> n; 59 | ll a[n]; 60 | FOR(i,0,n-1){ 61 | cin >> a[i]; 62 | } 63 | if(is_sorted(a,a+n)){ 64 | cout << "YES"; 65 | }else cout << "NO"; 66 | } 67 | -------------------------------------------------------------------------------- /caynhiphan/docaocuacay.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | 4 | #define ll long long 5 | #define pii pair 6 | #define vii vector 7 | #define pb push_back 8 | #define fi first 9 | #define el cout<> a; 12 | #define sz(a) a.size(); 13 | #define out(a) cout<< a; 14 | #define all(x) (x).begin(), (x).end() 15 | #define rep(a) for(int i = 0; i < (a); i++) 16 | #define vll vector 17 | #define vi vector 18 | #define ms(a,n) memset(a,n,sizeof(a)) 19 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 20 | #define FOD(i,b,a) for(int i=b;i>=a;i--) 21 | #define faster ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); 22 | const ll MOD = 1e9 + 7; 23 | 24 | struct Node{ 25 | int val; 26 | Node *left, *right; 27 | Node(int x){ 28 | val = x; 29 | left = NULL; 30 | right=NULL; 31 | } 32 | }; 33 | void makeRoot(Node *root,int u,int v,char c ){ 34 | if(c=='L') 35 | root->left = new Node(v); 36 | else{ 37 | root->right = new Node(v); 38 | 39 | } 40 | } 41 | void insertNode(Node *root,int u,int v,char c){ 42 | if(root==NULL) return; 43 | if(root->val==u){ 44 | makeRoot(root,u,v,c); 45 | }else { 46 | insertNode(root->left,u,v,c); 47 | insertNode(root->right,u,v,c); 48 | } 49 | } 50 | //duyet trai,phai,goc 51 | ll docao(Node *root){ 52 | if(root==NULL) 53 | return 0; 54 | 55 | return max(docao(root->left), docao(root->right))+1; 56 | } 57 | int main() 58 | { 59 | 60 | faster; 61 | Node *root = NULL; 62 | int n; 63 | cin >> n; 64 | for(int i=0;i> u >> v >> c; 68 | if(root==NULL){ 69 | root = new Node(u); 70 | makeRoot(root, u, v, c); 71 | }else { 72 | insertNode(root, u, v, c); 73 | } 74 | 75 | } 76 | cout << docao(root)-1; 77 | } 78 | -------------------------------------------------------------------------------- /caynhiphan/duyetpostorder.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | 4 | #define ll long long 5 | #define pii pair 6 | #define vii vector 7 | #define pb push_back 8 | #define fi first 9 | #define el cout<> a; 12 | #define sz(a) a.size(); 13 | #define out(a) cout<< a; 14 | #define all(x) (x).begin(), (x).end() 15 | #define rep(a) for(int i = 0; i < (a); i++) 16 | #define vll vector 17 | #define vi vector 18 | #define ms(a,n) memset(a,n,sizeof(a)) 19 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 20 | #define FOD(i,b,a) for(int i=b;i>=a;i--) 21 | #define faster ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); 22 | const ll MOD = 1e9 + 7; 23 | 24 | struct Node{ 25 | int val; 26 | Node *left, *right; 27 | Node(int x){ 28 | val = x; 29 | left = NULL; 30 | right=NULL; 31 | } 32 | }; 33 | void makeRoot(Node *root,int u,int v,char c ){ 34 | if(c=='L') 35 | root->left = new Node(v); 36 | else{ 37 | root->right = new Node(v); 38 | 39 | } 40 | } 41 | void insertNode(Node *root,int u,int v,char c){ 42 | if(root==NULL) return; 43 | if(root->val==u){ 44 | makeRoot(root,u,v,c); 45 | }else { 46 | insertNode(root->left,u,v,c); 47 | insertNode(root->right,u,v,c); 48 | } 49 | } 50 | /* 51 | inorder : left,root,right; 52 | preorder: root,left,right; 53 | postorder: left,right,root; 54 | 55 | */ 56 | void postorder(Node *root){ 57 | if(root==NULL) return; 58 | postorder(root->left); 59 | postorder(root->right); 60 | cout << root->val << ' '; 61 | } 62 | int main() 63 | { 64 | 65 | faster; 66 | Node *root = NULL; 67 | int n; 68 | cin >> n; 69 | for(int i=0;i> u >> v >> c; 73 | if(root==NULL){ 74 | root = new Node(u); 75 | makeRoot(root, u, v, c); 76 | }else { 77 | insertNode(root, u, v, c); 78 | } 79 | 80 | } 81 | postorder(root); 82 | } 83 | -------------------------------------------------------------------------------- /caynhiphan/duyetpreorder.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | 4 | #define ll long long 5 | #define pii pair 6 | #define vii vector 7 | #define pb push_back 8 | #define fi first 9 | #define el cout<> a; 12 | #define sz(a) a.size(); 13 | #define out(a) cout<< a; 14 | #define all(x) (x).begin(), (x).end() 15 | #define rep(a) for(int i = 0; i < (a); i++) 16 | #define vll vector 17 | #define vi vector 18 | #define ms(a,n) memset(a,n,sizeof(a)) 19 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 20 | #define FOD(i,b,a) for(int i=b;i>=a;i--) 21 | #define faster ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); 22 | const ll MOD = 1e9 + 7; 23 | 24 | struct Node{ 25 | int val; 26 | Node *left, *right; 27 | Node(int x){ 28 | val = x; 29 | left = NULL; 30 | right = NULL; 31 | } 32 | }; 33 | void makeRoot(Node *root,int u,int v, char c ){ 34 | if(c=='L') 35 | root->left = new Node(v); 36 | else{ 37 | root->right=new Node(v); 38 | } 39 | } 40 | void insertNode(Node *root,int u,int v,char c ){ 41 | if(root==NULL) 42 | return; 43 | if(root->val==u){ 44 | makeRoot(root, u, v, c); 45 | }else { 46 | insertNode(root->left, u, v, c); 47 | insertNode(root->right, u, v, c); 48 | } 49 | } 50 | //duyet preorder la duyet goc truoc ,xong den ben trai ,xong den ben phai 51 | void preorder(Node *root){ 52 | if(root==NULL) 53 | return; 54 | cout << root->val << ' '; 55 | preorder(root->left); 56 | preorder(root->right); 57 | } 58 | 59 | int main() 60 | { 61 | 62 | faster; 63 | Node *root = NULL; 64 | int n; 65 | cin >> n; 66 | for(int i=0; i> u >> v >>c; 70 | if(root==NULL){ 71 | root = new Node(u); 72 | makeRoot(root, u, v, c); 73 | }else { 74 | insertNode(root, u, v, c); 75 | } 76 | } 77 | preorder(root); 78 | } 79 | -------------------------------------------------------------------------------- /chia và trị/dayxaunhiphan.cpp: -------------------------------------------------------------------------------- 1 | 2 | /* 3 | Xâu nhị phân S được định nghĩa như sau : 4 | 5 | S[1] = “0”. 6 | 7 | S[2] = “1”. 8 | 9 | S[i] = S[i-2] + S[i-1] với i>2. 10 | 11 | Với phép cộng (+) là phép nối hai xâu với nhau. Hãy xác định ký tự thứ K trong xâu S[N] là ký tự ‘0’ hay ký tự ‘1’. 12 | 13 | Input Format 14 | 15 | 1 Dòng duy nhất chứa 2 số nguyên N và K 16 | 17 | Constraints 18 | 19 | 2<=N<=92; 1<=K<=7e18 và đảm bảo là một vị trí hợp lệ trong xâu S 20 | 21 | Output Format 22 | 23 | In ra kí tự là đáp án của bài toán 24 | 25 | Sample Input 0 26 | 27 | 7 7 28 | Sample Output 0 29 | 30 | 0 31 | Sample Input 1 32 | 33 | 8 6 34 | Sample Output 1 35 | 36 | 1 37 | */ 38 | 39 | 40 | 41 | #include 42 | using namespace std; 43 | 44 | #define ll long long 45 | #define pii pair 46 | #define vii vector 47 | #define pb push_back 48 | #define fi first 49 | #define el cout<> a; 52 | #define out(a) cout<< a; 53 | #define all(x) (x).begin(), (x).end() 54 | #define rep(a) for(int i = 0; i < (a); i++) 55 | #define vll vector 56 | #define vi vector 57 | #define ms(a,n) memset(a,n,sizeof(a)) 58 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 59 | #define FOD(i,b,a) for(int i=b;i>=a;i--) 60 | #define faster ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); 61 | const ll MOD = 1e9 + 7; 62 | 63 | ll n, k; 64 | ll f[100]; 65 | void init(){ 66 | f[0] = 0; 67 | f[1] = 1; 68 | for (ll i = 2; i <= 93;i++){ 69 | f[i] = f[i - 2] + f[i - 1]; 70 | f[i] %= MOD; 71 | } 72 | } 73 | 74 | ll solve(ll n ,ll k ){ 75 | if(n==1) 76 | return 0; 77 | if(n==2) 78 | return 1; 79 | if(k<=f[n-2]){ 80 | return solve(n - 2, k); 81 | }else 82 | return solve(n - 1, k - f[n - 2]); 83 | } 84 | 85 | int main() 86 | { 87 | faster; 88 | init(); 89 | 90 | cin>>n>>k; 91 | cout<< solve(n,k)< coong thuwcs 2^(n-1) 22 | 23 | #include 24 | using namespace std; 25 | 26 | #define ll long long 27 | #define pii pair 28 | #define vii vector 29 | #define pb push_back 30 | #define fi first 31 | #define el cout<> a; 34 | #define out(a) cout<< a; 35 | #define all(x) (x).begin(), (x).end() 36 | #define rep(a) for(int i = 0; i < (a); i++) 37 | #define vll vector 38 | #define vi vector 39 | #define ms(a,n) memset(a,n,sizeof(a)) 40 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 41 | #define FOD(i,b,a) for(int i=b;i>=a;i--) 42 | #define faster ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); 43 | const ll MOD = 1e9 + 7; 44 | ll n, k; 45 | ll powmod(ll a, ll b ,ll c){ 46 | ll res=1; 47 | a%=c; 48 | while(b){ 49 | if(b%2==1){ 50 | res*=a; 51 | res%=c; 52 | } 53 | a*=a; 54 | a%=c; 55 | b>>=1; 56 | } 57 | return res; 58 | } 59 | 60 | void solve(ll n){ 61 | 62 | if(n==1|| n==0) 63 | cout<< 1; 64 | else { 65 | cout<> n; 72 | 73 | solve(n); 74 | } 75 | -------------------------------------------------------------------------------- /chia và trị/demso0.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | 4 | #define ll long long 5 | #define pii pair 6 | #define vii vector 7 | #define pb push_back 8 | #define fi first 9 | #define el cout<> a; 12 | #define out(a) cout<< a; 13 | #define all(x) (x).begin(), (x).end() 14 | #define rep(a) for(int i = 0; i < (a); i++) 15 | #define vll vector 16 | #define vi vector 17 | #define ms(a,n) memset(a,n,sizeof(a)) 18 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 19 | #define FOD(i,b,a) for(int i=b;i>=a;i--) 20 | #define faster ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); 21 | const ll MOD = 1e9 + 7; 22 | 23 | int n , k; 24 | 25 | 26 | int main() 27 | { 28 | faster; 29 | cin>> n; 30 | ll a[n]; 31 | int cnt = 0; 32 | FOR(i,0,n-1){ 33 | cin >> a[i]; 34 | if(a[i]==0) 35 | ++cnt; 36 | } 37 | if(cnt!=0){ 38 | cout << cnt; 39 | }else 40 | cout << 0; 41 | } 42 | 43 | -------------------------------------------------------------------------------- /chia và trị/demsocapnghichthe.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | 4 | #define ll long long 5 | #define pii pair 6 | #define vii vector 7 | #define pb push_back 8 | #define fi first 9 | #define el cout<> a; 12 | #define out(a) cout<< a; 13 | #define all(x) (x).begin(), (x).end() 14 | #define rep(a) for(int i = 0; i < (a); i++) 15 | #define vll vector 16 | #define vi vector 17 | #define ms(a,n) memset(a,n,sizeof(a)) 18 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 19 | #define FOD(i,b,a) for(int i=b;i>=a;i--) 20 | #define faster ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); 21 | const ll MOD = 1e9 + 7; 22 | ll n; 23 | ll a[1000006]; 24 | int merge(ll a[],int l, int mid , int r){ 25 | vector x(a + l, a + mid + 1); 26 | vector y(a + mid + 1, a + r + 1); 27 | int i = 0, j = 0, cnt = 0; 28 | while(i> n; 66 | for(int i=0;i> a[i]; 68 | } 69 | ll ans = mergeSort(a, 0, n - 1); 70 | cout << ans; 71 | } 72 | -------------------------------------------------------------------------------- /chia và trị/floor.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Cho mảng đã được sắp xếp A[] gồm N phần tử không có hai phần tử giống nhau và số X. Nhiệm vụ của bạn là tìm floor(X). Trong đó, K=floor(X) là phần tử lớn nhất trong mảng A[] nhỏ hơn hoặc bằng X. 3 | 4 | Input Format 5 | 6 | Dòng 1 chứa 2 số N và X; Dòng 2 chứa N số của mảng A[] 7 | 8 | Constraints 9 | 10 | 1<=N<=10^5; 1<=X,A[i]<=10^6; 11 | 12 | Output Format 13 | 14 | In ra đáp án của bài toán nếu tìm thấy số lớn hơn X, trường hợp không tìm thấy in -1 15 | 16 | Sample Input 0 17 | 18 | 9 8 19 | 1 2 3 4 5 6 7 8 9 20 | Sample Output 0 21 | 22 | 8 23 | 24 | */ 25 | #include 26 | using namespace std; 27 | 28 | #define ll long long 29 | #define pii pair 30 | #define vii vector 31 | #define pb push_back 32 | #define fi first 33 | #define el cout<> a; 36 | #define out(a) cout<< a; 37 | #define all(x) (x).begin(), (x).end() 38 | #define rep(a) for(int i = 0; i < (a); i++) 39 | #define vll vector 40 | #define vi vector 41 | #define ms(a,n) memset(a,n,sizeof(a)) 42 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 43 | #define FOD(i,b,a) for(int i=b;i>=a;i--) 44 | #define faster ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); 45 | const ll MOD = 1e9 + 7; 46 | 47 | int n , k; 48 | 49 | 50 | int main() 51 | { 52 | faster; 53 | cin>> n>>k; 54 | ll a[n]; 55 | int res = -1; 56 | FOR(i,0,n-1){ 57 | cin >> a[i]; 58 | if(a[i]<=k) 59 | res = a[i]; 60 | } 61 | if(res==-1){ 62 | cout << -1; 63 | }else 64 | cout << res; 65 | } 66 | 67 | -------------------------------------------------------------------------------- /chia và trị/gapdoidayso.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | 4 | #define ll long long 5 | #define pii pair 6 | #define vii vector 7 | #define pb push_back 8 | #define fi first 9 | #define el cout<> a; 12 | #define out(a) cout<< a; 13 | #define all(x) (x).begin(), (x).end() 14 | #define rep(a) for(ll i = 0; i < (a); i++) 15 | #define vll vector 16 | #define vi vector 17 | #define ms(a,n) memset(a,n,sizeof(a)) 18 | #define FOR(i,a,b) for(ll i=a;i<=b;i++) 19 | #define FOD(i,b,a) for(ll i=b;i>=a;i--) 20 | #define faster ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); 21 | const ll MOD = 1e9 + 7; 22 | ll n,k; 23 | 24 | 25 | ll solve(ll n , ll k){ 26 | if(k&1){ 27 | return 1; 28 | } 29 | ll ans = pow(2, n - 1); 30 | if(k==ans){ 31 | return n; 32 | 33 | }else if(k> n>>k; 44 | cout << solve(n, k); 45 | } -------------------------------------------------------------------------------- /chia và trị/luythuanhiphan.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | 4 | #define ll long long 5 | #define pii pair 6 | #define vii vector 7 | #define pb push_back 8 | #define fi first 9 | #define el cout<> a; 12 | #define out(a) cout<< a; 13 | #define all(x) (x).begin(), (x).end() 14 | #define rep(a) for(int i = 0; i < (a); i++) 15 | #define vll vector 16 | #define vi vector 17 | #define ms(a,n) memset(a,n,sizeof(a)) 18 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 19 | #define FOD(i,b,a) for(int i=b;i>=a;i--) 20 | #define faster ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); 21 | const ll MOD = 1e9 + 7; 22 | 23 | ll n, p; 24 | ll powmod(ll a, ll b ,ll c){ 25 | ll res=1; 26 | a%=c; 27 | while(b){ 28 | if(b%2==1){ 29 | res*=a; 30 | res%=c; 31 | } 32 | a*=a; 33 | a%=c; 34 | b>>=1; 35 | } 36 | return res; 37 | } 38 | void solve(){ 39 | 40 | cin >> n >> p; 41 | ll ans = powmod(n, p, MOD); 42 | cout << ans << endl; 43 | } 44 | int main() 45 | { 46 | 47 | faster; 48 | solve(); 49 | 50 | 51 | 52 | } 53 | -------------------------------------------------------------------------------- /chia và trị/luythuanhiphannghichdao.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | 4 | #define ll long long 5 | #define pii pair 6 | #define vii vector 7 | #define pb push_back 8 | #define fi first 9 | #define el cout<> a; 12 | #define out(a) cout<< a; 13 | #define all(x) (x).begin(), (x).end() 14 | #define rep(a) for(int i = 0; i < (a); i++) 15 | #define vll vector 16 | #define vi vector 17 | #define ms(a,n) memset(a,n,sizeof(a)) 18 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 19 | #define FOD(i,b,a) for(int i=b;i>=a;i--) 20 | #define faster ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); 21 | const ll MOD = 1e9 + 7; 22 | ll n, k; 23 | ll powmod(ll a, ll b ,ll c){ 24 | ll res=1; 25 | a%=c; 26 | while(b){ 27 | if(b%2==1){ 28 | res*=a; 29 | res%=c; 30 | } 31 | a*=a; 32 | a%=c; 33 | b>>=1; 34 | } 35 | return res; 36 | } 37 | 38 | ll sodao(ll m){ 39 | ll ans = 0; 40 | while(m){ 41 | ans = ans * 10 + m % 10; 42 | m /= 10; 43 | } 44 | return ans; 45 | } 46 | 47 | int main() 48 | { 49 | faster; 50 | cin >> n; 51 | ll ans = sodao(n); 52 | cout << powmod(n, ans, MOD) << endl; 53 | } -------------------------------------------------------------------------------- /chia và trị/phantukhacnhau.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Cho hai mảng đã được sắp xếp A[] và B[] gồm N và N-1 phần tử. Các phần tử của mảng A[] chỉ khác mảng B[] một phần tử duy nhất. Hãy tìm vị trí của phần tử khác nhau giữa A[] và B[]. 3 | 4 | Input Format 5 | 6 | Dòng đầu chứa số nguyên dương N; Dòng thứ 2 chứa các phần tử của mảng A[]; Dòng thứ 3 chứa các phần tử của mảng B[]; 7 | 8 | Constraints 9 | 10 | 1<=N<=10^5; 1<=A[i], B[i]<=10^6; 11 | 12 | Output Format 13 | 14 | In ra đáp án của bài toán 15 | 16 | Sample Input 0 17 | 18 | 8 19 | 1 2 3 4 5 6 7 8 20 | 1 2 3 4 5 6 8 21 | Sample Output 0 22 | 23 | 7 24 | */ 25 | 26 | 27 | #include 28 | using namespace std; 29 | 30 | #define ll long long 31 | #define pii pair 32 | #define vii vector 33 | #define pb push_back 34 | #define fi first 35 | #define el cout<> a; 38 | #define out(a) cout<< a; 39 | #define all(x) (x).begin(), (x).end() 40 | #define rep(a) for(int i = 0; i < (a); i++) 41 | #define vll vector 42 | #define vi vector 43 | #define ms(a,n) memset(a,n,sizeof(a)) 44 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 45 | #define FOD(i,b,a) for(int i=b;i>=a;i--) 46 | #define faster ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); 47 | const ll MOD = 1e9 + 7; 48 | 49 | int n , k; 50 | 51 | 52 | int main() 53 | { 54 | faster; 55 | cin>> n; 56 | ll a[n], b[n - 1]; 57 | FOR(i,0,n-1){ 58 | cin >> a[i]; 59 | } 60 | FOR(i, 0,n-2){ 61 | cin >> b[i]; 62 | } 63 | for (int i = 0; i <= n - 2;i++){ 64 | if(a[i]!=b[i]){ 65 | cout << i + 1; 66 | return 0; 67 | } 68 | } 69 | } -------------------------------------------------------------------------------- /chia và trị/timkiemnhiphan.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | 4 | #define ll long long 5 | #define pii pair 6 | #define vii vector 7 | #define pb push_back 8 | #define fi first 9 | #define el cout<> a; 12 | #define out(a) cout<< a; 13 | #define all(x) (x).begin(), (x).end() 14 | #define rep(a) for(int i = 0; i < (a); i++) 15 | #define vll vector 16 | #define vi vector 17 | #define ms(a,n) memset(a,n,sizeof(a)) 18 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 19 | #define FOD(i,b,a) for(int i=b;i>=a;i--) 20 | #define faster ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); 21 | const ll MOD = 1e9 + 7; 22 | 23 | int n , k; 24 | 25 | bool bs(ll a[],int l, int r, int k ){ 26 | while(l<=r){ 27 | 28 | int m = (l + r) / 2; 29 | if(a[m]==k){ 30 | return true; 31 | }else if(a[m]< k) 32 | ++l; 33 | else 34 | --r; 35 | } 36 | return false; 37 | } 38 | int main() 39 | { 40 | faster; 41 | cin>>n>>k; 42 | long long a[n]; 43 | FOR(i,0,n-1){ 44 | cin >> a[i]; 45 | } 46 | if(bs(a,0,n-1,k)){ 47 | cout << "YES\n"; 48 | }else 49 | cout << "NO\n"; 50 | } -------------------------------------------------------------------------------- /chia và trị/tinhsofibothunbangnhanmatran.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | using namespace std; 4 | 5 | #define ll long long 6 | #define pii pair 7 | #define vii vector 8 | #define pb push_back 9 | #define fi first 10 | #define el cout<> a; 13 | #define out(a) cout<< a; 14 | #define all(x) (x).begin(), (x).end() 15 | #define rep(a) for(ll i = 0; i < (a); i++) 16 | #define vll vector 17 | #define vi vector 18 | #define ms(a,n) memset(a,n,sizeof(a)) 19 | #define FOR(i,a,b) for(ll i=a;i<=b;i++) 20 | #define FOD(i,b,a) for(ll i=b;i>=a;i--) 21 | #define faster ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); 22 | const ll MOD = 1e9 + 7; 23 | ll n; 24 | struct matran{ 25 | ll pos[2][2]; 26 | }; 27 | matran operator * (matran a, matran b){ 28 | matran res; 29 | for (ll i = 0; i < 2;i++){ 30 | for (ll j = 0; j < 2;j++){ 31 | res.pos[i][j] = 0; 32 | for (ll k = 0; k < 2;k++){ 33 | res.pos[i][j] += (a.pos[i][k] * b.pos[k][j]); 34 | 35 | res.pos[i][j] %= MOD; 36 | } 37 | } 38 | } 39 | return res; 40 | } 41 | matran powmod(matran a, ll k ){ 42 | if(k==1) 43 | return a; 44 | matran tmp = powmod(a, k / 2); 45 | if(k%2==1){ 46 | return tmp * tmp * a; 47 | }else 48 | return tmp * tmp; 49 | 50 | } 51 | 52 | int main() 53 | { 54 | faster; 55 | cin >> n; 56 | matran a; 57 | a.pos[0][0] = 1; 58 | a.pos[1][0] = 1; 59 | a.pos[0][1] = 1; 60 | a.pos[1][1] = 0; 61 | matran ans = powmod(a, n); 62 | cout << ans.pos[0][1]; 63 | 64 | } -------------------------------------------------------------------------------- /chia và trị/xaufibo.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | 4 | #define ll long long 5 | #define pii pair 6 | #define vii vector 7 | #define pb push_back 8 | #define fi first 9 | #define el cout<> a; 12 | #define out(a) cout<< a; 13 | #define all(x) (x).begin(), (x).end() 14 | #define rep(a) for(int i = 0; i < (a); i++) 15 | #define vll vector 16 | #define vi vector 17 | #define ms(a,n) memset(a,n,sizeof(a)) 18 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 19 | #define FOD(i,b,a) for(int i=b;i>=a;i--) 20 | #define faster ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); 21 | const ll MOD = 1e9 + 7; 22 | ll n, k; 23 | ll fb[92]; 24 | char solve(int n , int k){ 25 | if(n==1) 26 | return 'A'; 27 | if(n==2) return 'B'; 28 | if(k<=fb[n-2]) return solve(n-2, k); 29 | else return solve(n-1, k-fb[n-2]); 30 | } 31 | 32 | int main() 33 | { 34 | faster; 35 | cin >> n >> k; 36 | fb[1] = 1; 37 | fb[2] = 1; 38 | FOR(i,3,n){ 39 | fb[i] = fb[i - 1] + fb[i - 2]; 40 | 41 | } 42 | cout << solve(n, k) << endl; 43 | 44 | } -------------------------------------------------------------------------------- /dothi hai phia.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nguyenkien0703/Data-Structures-and-Algorithms/b5b19233896d95df24b167323ed4b3f2da5a732d/dothi hai phia.png -------------------------------------------------------------------------------- /nganxep/daotao.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | 4 | #define ll long long 5 | #define pii pair 6 | #define vii vector 7 | #define pb push_back 8 | #define fi first 9 | #define el cout<> a; 12 | #define out(a) cout<< a; 13 | #define all(x) (x).begin(), (x).end() 14 | #define rep(a) for(int i = 0; i < (a); i++) 15 | #define vll vector 16 | #define vi vector 17 | #define ms(a,n) memset(a,n,sizeof(a)) 18 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 19 | #define FOD(i,b,a) for(int i=b;i>=a;i--) 20 | #define faster ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); 21 | const ll MOD = 1e9 + 7; 22 | 23 | 24 | 25 | void solve(){ 26 | 27 | 28 | } 29 | int main() 30 | { 31 | 32 | faster; 33 | string s; 34 | stack st; 35 | while(cin>> s ){ 36 | st.push(s); 37 | } 38 | while(!st.empty()){ 39 | cout << st.top() << ' '; 40 | st.pop(); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /nganxep/duthuadaungoac.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Cho một biểu thức số học đúng nhưng có thể dư thừa dấu ngoặc, nhiệm vụ của bạn là kiểm tra xem biểu thức này có dư thừa dấu đóng mở ngoặc hay không. 4 | 5 | Input Format 6 | 7 | Dòng duy nhất chứa biểu thức cần kiểm tra 8 | 9 | Constraints 10 | 11 | Biểu thức chỉ chứa kí tự đóng mở ngoặc, các chữ cái in thường và các phép toán + - * / không quá 100 kí tự 12 | 13 | Output Format 14 | 15 | In ra YES nếu biểu thức dư thừa dấu ngoặc, ngược lại in ra NO 16 | 17 | Sample Input 0 18 | 19 | ((x+y)) 20 | Sample Output 0 21 | 22 | YES 23 | */ 24 | 25 | #include 26 | using namespace std; 27 | 28 | #define ll long long 29 | #define pii pair 30 | #define vii vector 31 | #define pb push_back 32 | #define fi first 33 | #define el cout<> a; 36 | #define out(a) cout<< a; 37 | #define all(x) (x).begin(), (x).end() 38 | #define rep(a) for(int i = 0; i < (a); i++) 39 | #define vll vector 40 | #define vi vector 41 | #define ms(a,n) memset(a,n,sizeof(a)) 42 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 43 | #define FOD(i,b,a) for(int i=b;i>=a;i--) 44 | #define faster ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); 45 | const ll MOD = 1e9 + 7; 46 | 47 | string s; 48 | ll check(char c){ 49 | return c == '+' || c == '-' || c == '*' || c == '/' || c == '^'; 50 | } 51 | ll solve(string s ){ 52 | stack st; 53 | for(char x : s ){ 54 | if(x!=')'){ 55 | st.push(x); 56 | }else{ 57 | int ok = 0; 58 | while(st.top()!='('){ 59 | if(check(st.top())){ 60 | ok = 1; 61 | } 62 | st.pop(); 63 | } 64 | st.pop(); 65 | if(ok ==0){ 66 | return 1; 67 | } 68 | } 69 | } 70 | return 0; 71 | } 72 | int main() 73 | { 74 | 75 | faster; 76 | cin >> s; 77 | if(solve(s)){ 78 | cout << "YES"; 79 | }else cout << "NO"; 80 | } 81 | -------------------------------------------------------------------------------- /nganxep/hautotiento.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | 4 | #define ll long long 5 | #define pii pair 6 | #define vii vector 7 | #define pb push_back 8 | #define fi first 9 | #define el cout<> a; 12 | #define out(a) cout<< a; 13 | #define all(x) (x).begin(), (x).end() 14 | #define rep(a) for(int i = 0; i < (a); i++) 15 | #define vll vector 16 | #define vi vector 17 | #define ms(a,n) memset(a,n,sizeof(a)) 18 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 19 | #define FOD(i,b,a) for(int i=b;i>=a;i--) 20 | #define faster ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); 21 | const ll MOD = 1e9 + 7; 22 | /* 23 | Cho biểu thức S ở dạng hậu, hãy biến đổi S về dạng tiền tố và in ra màn hình 24 | 25 | Input Format 26 | 27 | Dòng duy nhất chứa biểu thức S 28 | 29 | Constraints 30 | 31 | 1<=len(S)<=1000 32 | 33 | Output Format 34 | 35 | In ra biểu thức tiền tố tương ứng 36 | 37 | Sample Input 0 38 | 39 | AB+UV-/ 40 | Sample Output 0 41 | 42 | /+AB-UV 43 | 44 | */ 45 | string s; 46 | int main() 47 | { 48 | 49 | faster; 50 | cin >> s; 51 | // string ans = ""; 52 | stack st; 53 | for (int i = 0;i 27 | using namespace std; 28 | 29 | #define ll long long 30 | #define pii pair 31 | #define vii vector 32 | #define pb push_back 33 | #define fi first 34 | #define el cout<> a; 37 | #define out(a) cout<< a; 38 | #define all(x) (x).begin(), (x).end() 39 | #define rep(a) for(int i = 0; i < (a); i++) 40 | #define vll vector 41 | #define vi vector 42 | #define ms(a,n) memset(a,n,sizeof(a)) 43 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 44 | #define FOD(i,b,a) for(int i=b;i>=a;i--) 45 | #define faster ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); 46 | const ll MOD = 1e9 + 7; 47 | 48 | string s; 49 | int main() 50 | { 51 | 52 | faster; 53 | cin>> s; 54 | stack st; 55 | for(char x : s){ 56 | if(isalpha(x)){ 57 | st.push(string(1, x)); 58 | }else { 59 | string top1 = st.top(); 60 | st.pop(); 61 | string top2 = st.top();st.pop(); 62 | string tmp = "(" + top2 + x + top1 + ")"; 63 | st.push(tmp); 64 | } 65 | } 66 | cout << st.top(); 67 | } 68 | -------------------------------------------------------------------------------- /nganxep/latnguocdaungoac.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Cho xâu S chỉ bao gồm dấu đóng mở ngoặc, hãy tìm số lượng dấu ngoặc tối thiểu cần phải đổi chiều để tạo thành một xâu hợp lệ. 3 | 4 | Input Format 5 | 6 | Dòng duy nhất chứa xâu S 7 | 8 | Constraints 9 | 10 | Xâu S có độ dài là số chẵn và có không quá 1000 kí tự 11 | 12 | Output Format 13 | 14 | In ra số lượng dấu ngoặc cần phải đổi chiều 15 | 16 | Sample Input 0 17 | 18 | )))())()() 19 | Sample Output 0 20 | 21 | 2 22 | Sample Input 1 23 | 24 | (())(())() 25 | Sample Output 1 26 | 27 | 0 28 | */ 29 | #include 30 | using namespace std; 31 | 32 | #define ll long long 33 | #define pii pair 34 | #define vii vector 35 | #define pb push_back 36 | #define fi first 37 | #define el cout<> a; 40 | #define out(a) cout<< a; 41 | #define all(x) (x).begin(), (x).end() 42 | #define rep(a) for(int i = 0; i < (a); i++) 43 | #define vll vector 44 | #define vi vector 45 | #define ms(a,n) memset(a,n,sizeof(a)) 46 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 47 | #define FOD(i,b,a) for(int i=b;i>=a;i--) 48 | #define faster ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); 49 | const ll MOD = 1e9 + 7; 50 | 51 | string s; 52 | int main() 53 | { 54 | 55 | faster; 56 | cin>> s ; 57 | stack st; 58 | int cnt = 0; 59 | 60 | for (char x : s ){ 61 | if(st.empty()){ 62 | if(x==')') 63 | ++cnt; 64 | st.push('('); 65 | }else if(x==')'){ 66 | if(st.top()=='(') 67 | st.pop(); 68 | }else 69 | st.push(x); 70 | } 71 | 72 | cout << st.size()/2 + cnt; 73 | } 74 | -------------------------------------------------------------------------------- /nganxep/nextgreaterelement.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | 4 | #define ll long long 5 | #define pii pair 6 | #define vii vector 7 | #define pb push_back 8 | #define fi first 9 | #define el cout<> a; 12 | #define out(a) cout<< a; 13 | #define all(x) (x).begin(), (x).end() 14 | #define rep(a) for(int i = 0; i < (a); i++) 15 | #define vll vector 16 | #define vi vector 17 | #define ms(a,n) memset(a,n,sizeof(a)) 18 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 19 | #define FOD(i,b,a) for(int i=b;i>=a;i--) 20 | #define faster ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); 21 | const ll MOD = 1e9 + 7; 22 | 23 | /* 24 | Cho mảng A[] gồm N phần tử, nhiệm vụ của bạn làm tìm phần tử đầu tiên bên phải lớn hơn của mọi phần tử A[i] trong mảng, nếu phần tử nào không có phần tử bên phải lớn hơn thì in ra -1. 25 | 26 | Input Format 27 | 28 | Dòng đầu tiên chứa N : Số lượng phần tử trong mảng. Dòng thứ 2 chứa N số nguyên, mỗi số cách nhau một khoảng trắng. 29 | 30 | Constraints 31 | 32 | 1<=N<=10^6; 1<=A[i]<=10^6; 33 | 34 | Output Format 35 | 36 | In ra đáp án của bài toán trên 1 dòng. 37 | 38 | Sample Input 0 39 | 40 | 8 41 | 19 11 11 15 13 18 19 18 42 | Sample Output 0 43 | 44 | -1 15 15 18 18 19 -1 -1 45 | */ 46 | 47 | int main() 48 | { 49 | 50 | faster; 51 | stack st; 52 | ll n; 53 | cin >> n; 54 | ll a[n],b[n]; 55 | for(int i=0;i> x; 58 | b[i] = x; 59 | if(st.empty()){ 60 | st.push(i); 61 | }else { 62 | while(!st.empty() && x >b[st.top()]){ 63 | a[st.top()] = x; 64 | st.pop(); 65 | } 66 | st.push(i); 67 | } 68 | } 69 | while(!st.empty()){ 70 | a[st.top()] = -1; 71 | st.pop(); 72 | } 73 | for(int x : a){ 74 | cout << x << ' '; 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /nganxep/removeduplicated.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Cho một xâu kí tự S chỉ bao gồm kí tự in thường, nhiệm vụ của bạn là xóa các kí tự liền kề giống nhau khỏi xâu S. Ví dụ xâu aabbccc sau khi xóa các kí tự liền kề sẽ thành c, xâu abba sau khi xóa các kí tự liền kề sẽ thành xâu rỗng. 4 | 5 | Input Format 6 | 7 | Dòng duy nhất chứa xâu kí tự S 8 | 9 | Constraints 10 | 11 | 1<=len(S)<=10000; 12 | 13 | Output Format 14 | 15 | In ra xâu S sau khi xóa các kí tự liền kề giống nhau, nếu xâu sau khi xóa rỗng thì in ra EMPTY. 16 | 17 | Sample Input 0 18 | 19 | dddbbabcb 20 | Sample Output 0 21 | 22 | dabcb 23 | 24 | */ 25 | 26 | 27 | #include 28 | using namespace std; 29 | 30 | #define ll long long 31 | #define pii pair 32 | #define vii vector 33 | #define pb push_back 34 | #define fi first 35 | #define el cout<> a; 38 | #define out(a) cout<< a; 39 | #define all(x) (x).begin(), (x).end() 40 | #define rep(a) for(int i = 0; i < (a); i++) 41 | #define vll vector 42 | #define vi vector 43 | #define ms(a,n) memset(a,n,sizeof(a)) 44 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 45 | #define FOD(i,b,a) for(int i=b;i>=a;i--) 46 | #define faster ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); 47 | const ll MOD = 1e9 + 7; 48 | 49 | 50 | 51 | int main() 52 | { 53 | 54 | faster; 55 | string s; 56 | cin >> s; 57 | stack st; 58 | for(char x : s){ 59 | if(st.empty()){ 60 | st.push(x); 61 | }else if(x ==st.top()){ 62 | st.pop(); 63 | 64 | }else st.push(x); 65 | } 66 | vector ans; 67 | while(!st.empty()){ 68 | ans.pb(st.top()); 69 | st.pop(); 70 | } 71 | if(ans.size()==0){ 72 | cout << "EMPTY"; 73 | return 0; 74 | } 75 | reverse(all(ans)); 76 | for(char x : ans){ 77 | cout << x; 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /nganxep/themdaungoac.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Cho một xâu kí tự chỉ bao gồm dấu đóng mở ngoặc tròn. Hãy tìm số lượng dấu đóng mở ngoặc cần thêm tối thiểu để tạo thành một xâu cân bằng, bạn có thể thêm các kí tự đóng mở ngoặc vào bất kì vị trí nào của xâu. 4 | 5 | Input Format 6 | 7 | Xâu kí tự S trên 1 dòng 8 | 9 | Constraints 10 | 11 | 1<=len(S)<=10000; 12 | 13 | Output Format 14 | 15 | In ra số lượng dấu ngoặc cần bổ sung để xâu cân bằng 16 | 17 | Sample Input 0 18 | 19 | ))))() 20 | Sample Output 0 21 | 22 | 4 23 | Sample Input 1 24 | 25 | (((()))) 26 | Sample Output 1 27 | 28 | 0 29 | */ 30 | 31 | 32 | #include 33 | using namespace std; 34 | 35 | #define ll long long 36 | #define pii pair 37 | #define vii vector 38 | #define pb push_back 39 | #define fi first 40 | #define el cout<> a; 43 | #define out(a) cout<< a; 44 | #define all(x) (x).begin(), (x).end() 45 | #define rep(a) for(int i = 0; i < (a); i++) 46 | #define vll vector 47 | #define vi vector 48 | #define ms(a,n) memset(a,n,sizeof(a)) 49 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 50 | #define FOD(i,b,a) for(int i=b;i>=a;i--) 51 | #define faster ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); 52 | const ll MOD = 1e9 + 7; 53 | 54 | 55 | string s ; 56 | int main() 57 | { 58 | 59 | faster; 60 | cin >> s; 61 | stack st,st1; 62 | int cnt = 0; 63 | for(char x : s){ 64 | if(st.empty()){ 65 | st.push(x); 66 | }else if(x==')'){ 67 | if(st.top()=='('){ 68 | cnt +=2; 69 | st.pop(); 70 | } 71 | }else st.push(x); 72 | } 73 | cout << s.length() - cnt; 74 | } 75 | -------------------------------------------------------------------------------- /nganxep/tientohauto.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | 4 | #define ll long long 5 | #define pii pair 6 | #define vii vector 7 | #define pb push_back 8 | #define fi first 9 | #define el cout<> a; 12 | #define out(a) cout<< a; 13 | #define all(x) (x).begin(), (x).end() 14 | #define rep(a) for(int i = 0; i < (a); i++) 15 | #define vll vector 16 | #define vi vector 17 | #define ms(a,n) memset(a,n,sizeof(a)) 18 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 19 | #define FOD(i,b,a) for(int i=b;i>=a;i--) 20 | #define faster ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); 21 | const ll MOD = 1e9 + 7; 22 | 23 | 24 | /* 25 | 26 | Cho biểu thức S ở dạng tiền tố, hãy biến đổi S về dạng hậu tố và in ra màn hình 27 | 28 | Input Format 29 | 30 | Dòng duy nhất chứa biểu thức S 31 | 32 | Constraints 33 | 34 | 1<=len(S)<=1000 35 | 36 | Output Format 37 | 38 | In ra biểu thức hậu tố tương ứng 39 | 40 | Sample Input 0 41 | 42 | *+AB-UV 43 | Sample Output 0 44 | 45 | AB+UV-* 46 | */ 47 | string s; 48 | int main() 49 | { 50 | 51 | faster; 52 | cin >> s; 53 | stack st; 54 | for(int i=s.size()-1;i>=0;i--){ 55 | if(isalpha(s[i])){ 56 | st.push(string(1, s[i])); 57 | }else { 58 | string top1 = st.top(); 59 | st.pop(); 60 | string top2 = st.top(); 61 | st.pop(); 62 | string tmp = top1 + top2 + s[i]; 63 | st.push(tmp); 64 | } 65 | } 66 | cout << st.top(); 67 | } 68 | -------------------------------------------------------------------------------- /nganxep/tientotrungto.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | 4 | #define ll long long 5 | #define pii pair 6 | #define vii vector 7 | #define pb push_back 8 | #define fi first 9 | #define el cout<> a; 12 | #define out(a) cout<< a; 13 | #define all(x) (x).begin(), (x).end() 14 | #define rep(a) for(int i = 0; i < (a); i++) 15 | #define vll vector 16 | #define vi vector 17 | #define ms(a,n) memset(a,n,sizeof(a)) 18 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 19 | #define FOD(i,b,a) for(int i=b;i>=a;i--) 20 | #define faster ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); 21 | const ll MOD = 1e9 + 7; 22 | 23 | 24 | /* 25 | 26 | Cho biểu thức S ở dạng tiền tố, hãy biến đổi S về dạng trung tố và in ra màn hình 27 | 28 | Input Format 29 | 30 | Dòng duy nhất chứa biểu thức S 31 | 32 | Constraints 33 | 34 | 1<=len(S)<=1000 35 | 36 | Output Format 37 | 38 | In ra biểu thức trung tố tương ứng 39 | 40 | Sample Input 0 41 | 42 | -*AB+CD 43 | Sample Output 0 44 | 45 | ((A*B)-(C+D)) 46 | */ 47 | int main() 48 | { 49 | 50 | faster; 51 | string s; 52 | cin>> s ; 53 | stack st; 54 | for (int i = s.length() - 1; i >= 0;i--){ 55 | if(isalpha(s[i])){ 56 | st.push(string(1,s[i])); 57 | }else { 58 | string top1 = st.top(); 59 | st.pop(); 60 | string top2=st.top(); 61 | st.pop(); 62 | string tmp = "(" + top1 + s[i] + top2 + ")"; 63 | st.push(tmp); 64 | } 65 | } 66 | cout << st.top(); 67 | } 68 | -------------------------------------------------------------------------------- /nganxep/tinhtoangiatribieuthuchauto.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | /* 4 | Cho biểu thức hậu tố S, các số trong biểu thức chỉ là số có 1 chữ số, yêu cầu tính toán giá trị của biểu thức. 5 | 6 | Input Format 7 | 8 | Dòng duy nhất chứa biểu thức S 9 | 10 | Constraints 11 | 12 | S có độ dài không quá 1000 13 | 14 | Output Format 15 | 16 | In ra giá trị của biểu thức S 17 | 18 | Sample Input 0 19 | 20 | 316*+9* 21 | Sample Output 0 22 | 23 | 81 24 | 25 | */ 26 | #define ll long long 27 | #define pii pair 28 | #define vii vector 29 | #define pb push_back 30 | #define fi first 31 | #define el cout<> a; 34 | #define out(a) cout<< a; 35 | #define all(x) (x).begin(), (x).end() 36 | #define rep(a) for(int i = 0; i < (a); i++) 37 | #define vll vector 38 | #define vi vector 39 | #define ms(a,n) memset(a,n,sizeof(a)) 40 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 41 | #define FOD(i,b,a) for(int i=b;i>=a;i--) 42 | #define faster ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); 43 | const ll MOD = 1e9 + 7; 44 | 45 | ll calc(int a, int b,char c ){ 46 | if(c=='+'){ 47 | return a + b; 48 | }else if(c=='-'){ 49 | return a - b; 50 | }else if(c=='/'){ 51 | return a / b; 52 | }else{ 53 | return a * b; 54 | } 55 | } 56 | string s; 57 | 58 | int main() 59 | { 60 | 61 | faster; 62 | stack st; 63 | cin >> s; 64 | for (char x : s) 65 | { 66 | if(isdigit(x)){ 67 | st.push(x-'0'); 68 | }else { 69 | int top1 = st.top(); 70 | st.pop(); 71 | int top2 = st.top(); 72 | st.pop(); 73 | int ans = calc(top2, top1, x); 74 | st.push(ans); 75 | } 76 | } 77 | cout << st.top(); 78 | 79 | 80 | } 81 | -------------------------------------------------------------------------------- /nganxep/tinhtoangiatribieuthuctiento.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Cho biểu thức tiền tố S, các số trong biểu thức chỉ là số có 1 chữ số, yêu cầu tính toán giá trị của biểu thức. 4 | 5 | Input Format 6 | 7 | Dòng duy nhất chứa biểu thức S 8 | 9 | Constraints 10 | 11 | S có độ dài không quá 1000 12 | 13 | Output Format 14 | 15 | In ra giá trị của biểu thức S 16 | 17 | Sample Input 0 18 | 19 | +-7/451 20 | Sample Output 0 21 | 22 | 8 23 | 24 | */ 25 | 26 | #include 27 | using namespace std; 28 | 29 | #define ll long long 30 | #define pii pair 31 | #define vii vector 32 | #define pb push_back 33 | #define fi first 34 | #define el cout<> a; 37 | #define out(a) cout<< a; 38 | #define all(x) (x).begin(), (x).end() 39 | #define rep(a) for(int i = 0; i < (a); i++) 40 | #define vll vector 41 | #define vi vector 42 | #define ms(a,n) memset(a,n,sizeof(a)) 43 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 44 | #define FOD(i,b,a) for(int i=b;i>=a;i--) 45 | #define faster ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); 46 | const ll MOD = 1e9 + 7; 47 | ll calc(int a, int b,char c ){ 48 | if(c=='+'){ 49 | return a + b; 50 | }else if(c=='-'){ 51 | return a - b; 52 | }else if(c=='/'){ 53 | return a / b; 54 | }else{ 55 | return a * b; 56 | } 57 | } 58 | string s; 59 | int main() 60 | { 61 | 62 | faster; 63 | stack st; 64 | cin >> s; 65 | for (int i = s.length() - 1; i >= 0;i--) 66 | { 67 | if(isdigit(s[i])){ 68 | st.push(s[i]-'0'); 69 | }else { 70 | int top1 = st.top(); 71 | st.pop(); 72 | int top2 = st.top(); 73 | st.pop(); 74 | int ans = calc(top1, top2, s[i]); 75 | st.push(ans); 76 | } 77 | } 78 | cout << st.top(); 79 | } 80 | -------------------------------------------------------------------------------- /nganxep/validperantheses.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Cho một xâu kí tự chỉ bao gồm các kí tự '(', ')', '{', '}', ']', "]", hãy xác định xem các dấu ngoặc trong xâu có cân bằng hay không. Một vài ví dụ về xâu cân bằng : ((())), {{((()))}}[][][], (())(()())... 4 | 5 | Input Format 6 | 7 | Xâu kí tự S trên 1 dòng 8 | 9 | Constraints 10 | 11 | 1<=len(S)<=10000 12 | 13 | Output Format 14 | 15 | In ra YES hoặc NO nếu xâu kí tự cân bằng hoặc không. 16 | 17 | Sample Input 0 18 | 19 | ((((())))) 20 | Sample Output 0 21 | 22 | YES 23 | */ 24 | 25 | #include 26 | using namespace std; 27 | 28 | #define ll long long 29 | #define pii pair 30 | #define vii vector 31 | #define pb push_back 32 | #define fi first 33 | #define el cout<> a; 36 | #define out(a) cout<< a; 37 | #define all(x) (x).begin(), (x).end() 38 | #define rep(a) for(int i = 0; i < (a); i++) 39 | #define vll vector 40 | #define vi vector 41 | #define ms(a,n) memset(a,n,sizeof(a)) 42 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 43 | #define FOD(i,b,a) for(int i=b;i>=a;i--) 44 | #define faster ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); 45 | const ll MOD = 1e9 + 7; 46 | 47 | 48 | bool check(string s ){ 49 | 50 | bool ok = true; 51 | stack st; 52 | 53 | for(char x : s){ 54 | if(st.empty()){ 55 | st.push(x); 56 | }else if(x==')'){ 57 | if(st.top()=='('){ 58 | st.pop(); 59 | }else return false; 60 | }else if(x=='}'){ 61 | if(st.top()=='{'){ 62 | st.pop(); 63 | }else return false; 64 | }else if(x==']'){ 65 | if(st.top()=='['){ 66 | st.pop(); 67 | }else return false; 68 | }else st.push(x); 69 | } 70 | return st.size() == 0; 71 | } 72 | int main() 73 | { 74 | 75 | faster; 76 | string s; 77 | cin >> s; 78 | if(check(s)){ 79 | cout << "YES\n"; 80 | }else 81 | cout << "NO\n"; 82 | } 83 | -------------------------------------------------------------------------------- /qhd/biendoixau.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Cho hai xâu ký tự str1, str2 bao gồm các ký tự in thường và các thao tác dưới đây: Insert: chèn một ký tự bất kỳ vào str1. Delete: loại bỏ một ký tự bất kỳ trong str1. Replace: thay một ký tự bất kỳ trong str1. Nhiệm vụ của bạn là đếm số các phép Insert, Delete, Replace ít nhất thực hiện trên str1 để trở thành str2. 3 | 4 | Input Format 5 | 6 | Dòng 1 là xâu str1; Dòng 2 là xâu str2; 7 | 8 | Constraints 9 | 10 | 1<=len(str1), len(str2)<=100; 11 | 12 | Output Format 13 | 14 | Đưa ra kết quả của bài toán 15 | 16 | Sample Input 0 17 | 18 | geek gesek 19 | Sample Output 0 20 | 21 | 1 22 | 23 | 24 | */ 25 | 26 | #include 27 | using namespace std; 28 | 29 | #define ll long long 30 | #define pii pair 31 | #define vii vector 32 | #define pb push_back 33 | #define fi first 34 | #define el cout<> a; 37 | #define out(a) cout<< a; 38 | #define all(x) (x).begin(), (x).end() 39 | #define rep(a) for(int i = 0; i < (a); i++) 40 | #define vll vector 41 | #define vi vector 42 | #define ms(a,n) memset(a,n,sizeof(a)) 43 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 44 | #define FOD(i,b,a) for(int i=b;i>=a;i--) 45 | #define faster ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); 46 | const ll MOD = 1e9 + 7; 47 | 48 | 49 | int main() 50 | { 51 | 52 | faster; 53 | string s, t ; 54 | cin>>s>>t; 55 | int n =s.length(),m=t.length(); 56 | int dp[n+1][m+1]; 57 | ms(dp,0); 58 | for(int i=0;i<=n;i++){ 59 | for(int j=0;j<=m;j++){ 60 | if(i==0 || j==0){ 61 | dp[i][j]=i+j; 62 | }else if(s[i-1]==t[j-1]){ 63 | dp[i][j]=dp[i-1][j-1]; 64 | }else { 65 | dp[i][j]=min(dp[i-1][j],min(dp[i][j-1],dp[i-1][j-1]))+1; 66 | 67 | } 68 | } 69 | } 70 | cout<< dp[n][m]< 32 | 33 | using namespace std; 34 | const int N = 1e5 + 1; 35 | const int K = 101; 36 | const int M = 1e9 + 7; 37 | int f[N][K]; 38 | int main() { 39 | f[0][0] = 1; 40 | for (int i = 1; i < N; ++i) f[i][0] = 0; 41 | for (int j = 1; j < K; ++j) { 42 | int ans = 1; 43 | f[0][j] = 1; 44 | for (int i = 1; i < j; ++i) { 45 | f[i][j] = ans; 46 | ans = (ans + f[i][j]) % M; 47 | } 48 | for (int i = j; i < N; ++i) { 49 | f[i][j] = ans; 50 | ans = (ans - f[i - j][j] + M) % M; 51 | ans = (ans + f[i][j]) % M; 52 | } 53 | } 54 | int n, k; cin >> n >> k; 55 | cout << f[n][k] << '\n'; 56 | return 0; 57 | } -------------------------------------------------------------------------------- /qhd/coin2.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Hãy xem xét một hệ thống tiền tệ của ngân hàng XYZ bao gồm n đồng xu. Mỗi đồng xu có một giá trị nguyên dương. Nhiệm vụ của bạn là tính số cách riêng biệt mà bạn có thể tạo ra số tiền x bằng cách sử dụng số xu có sẵn. Ví dụ: nếu số xu là {2,3,5} và tổng mong muốn là 9, có 8 cách: 2 + 2 + 5; 2 + 5 + 2; 5 + 2 + 2; 3 + 3 + 3; 2 + 2 + 2 + 3; 2 + 2 + 3 + 2; 2 + 3 + 2 + 2; 3 + 2 + 2 + 2; 3 | 4 | Input Format 5 | 6 | Dòng nhập đầu tiên có hai số nguyên n và x: số xu và số tiền mong muốn. Dòng thứ hai có n số nguyên phân biệt c1, c2,…, cn: giá trị của mỗi đồng xu. 7 | 8 | Constraints 9 | 10 | 1≤n≤100; 1≤x≤10^6; 1≤ci≤10^6; 11 | 12 | Output Format 13 | 14 | In ra kết quả lấy dư với 10^9 + 7 15 | 16 | Sample Input 0 17 | 18 | 3 9 19 | 2 3 5 20 | Sample Output 0 21 | 22 | 8 23 | 24 | */ 25 | 26 | #include 27 | using namespace std; 28 | #define ll long long 29 | #define foru(i,a,b) for(int i=a;i<=b;i++) 30 | #define ford(i,b,a) for(int i=b;i>=a;i--) 31 | const ll mod = 1e9+7; 32 | 33 | void solve(){ 34 | ll n,k;cin>>n>>k; 35 | vector a(n+1); 36 | for(ll i=0;i>a[i]; 37 | vector dp(k+1); 38 | dp[0]=1; 39 | for(ll i=1;i<=k;i++){ 40 | for(ll j=0;j 29 | using namespace std; 30 | typedef long long ll; 31 | const int MOD = 1e9 + 7; 32 | 33 | int main() 34 | { 35 | int n , m ; cin >> n >> m; 36 | int a[n]; 37 | for(int i = 0 ; i < n ;i++) 38 | { 39 | cin >> a[i]; 40 | } 41 | ll dp[m + 2]; 42 | memset(dp , 0 , sizeof(dp)); 43 | dp[0] = 1; 44 | for(int i = 0 ; i < n ;i++) 45 | { 46 | for(int j = a[i] ; j <= m ; j++) 47 | { 48 | dp[j] += dp[j - a[i]]; 49 | dp[j] %= MOD; 50 | } 51 | } 52 | cout << dp[m]; 53 | return 0; 54 | } -------------------------------------------------------------------------------- /qhd/coinproblem.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Ngân hàng XYZ hiện có N tờ tiền có mệnh giá khác nhau được lưu vào mảng C[], bạn hãy tìm cách đổi số tiền là S sao cho số tờ tiền cần dùng là ít nhất. Bạn được sử dụng một mệnh giá không giới hạn số lần. 3 | 4 | Input Format 5 | 6 | Dòng đầu tiên chứa 2 số N và S; Dòng thứ 2 chưa N số là mệnh giá các tờ tiền; 7 | 8 | Constraints 9 | 10 | 1<=N<=100; 1<=S<=10^6; 1<=C[i]<=10^6; 11 | 12 | Output Format 13 | 14 | In ra số tờ tiền nhỏ nhất cần đổi. Nếu không thể đổi được số tiền đúng bằng S thì in ra -1. 15 | 16 | Sample Input 0 17 | 18 | 3 10 19 | 4 5 8 20 | Sample Output 0 21 | 22 | 2 23 | 24 | */ 25 | 26 | 27 | #include 28 | using namespace std; 29 | #define ll long long 30 | 31 | ll n,s ; 32 | 33 | int main(){ 34 | ios_base::sync_with_stdio(0);; 35 | cin.tie(0); 36 | cout.tie(0); 37 | cin>>n>>s; 38 | vector a(n),dp(s+1,INT_MAX); 39 | for(int i=0;i>a[i]; 41 | 42 | } 43 | dp[0]=0; 44 | for(int i=1;i<=s;i++){ 45 | for(int j=0;j=0){ 47 | dp[i]=min(dp[i],dp[i-a[j]]+1); 48 | } 49 | } 50 | } 51 | cout<<(dp[s]==INT_MAX? -1 : dp[s]); 52 | 53 | 54 | } -------------------------------------------------------------------------------- /qhd/dayconcotongbangs.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Cho mảng số nguyên A[] gồm N phần tử và số nguyên dương S, nhiệm vụ của bạn hãy xác định xem có thể tạo ra một tập con các phần tử trong mảng có tổng bằng S hay không? Chú ý mỗi phần tử trong mảng chỉ được sử dụng một lần. 3 | 4 | Input Format 5 | 6 | Dòng đầu tiên gồm 2 số N và S; Dòng thứ 2 gồm N số của mảng A; 7 | 8 | Constraints 9 | 10 | 1<=N<=200; 1<=S<=50000; 1<=A[i]<=500; 11 | 12 | Output Format 13 | 14 | In ra 1 nếu có tập con của A có tổng bằng S, ngược lại in ra 0 15 | 16 | Sample Input 0 17 | 18 | 8 92 19 | 69 16 82 170 31 24 45 112 20 | Sample Output 0 21 | 22 | 1 23 | */ 24 | ======== 25 | /* 26 | ll n, s; 27 | void solve(){ 28 | cin>>n>>s; 29 | vector v(n+1); 30 | for(int i=0;i>v[i]; 31 | map mp; 32 | ll sum =0; 33 | for(int i=0;i 48 | using namespace std; 49 | #define ll long long 50 | #define pii pair 51 | ll n,s; 52 | 53 | int main(){ 54 | 55 | cin>>n>>s; 56 | vector v(n+1); 57 | for(int i=1;i<=n;i++) cin>>v[i]; 58 | vector> dp(n+5,vector(s+5,false)); 59 | dp[0][0]=1; 60 | for(int i=1;i<=n;i++){ 61 | for(int sum =0;sum<=s;sum++){ 62 | if(sum 27 | using namespace std; 28 | #define ll long long 29 | 30 | #define ll long long 31 | int main() 32 | { 33 | ios_base::sync_with_stdio(0); 34 | cin.tie(0); 35 | cout.tie(0); 36 | ll n ; 37 | cin>> n; 38 | vector v(n); 39 | for(ll i=0; i>v[i]; 41 | } 42 | vector l(n,1); 43 | for(ll i=0; iv[j]){ 46 | l[i]=max(l[i],l[j]+1); 47 | } 48 | } 49 | } 50 | cout<<*max_element(l.begin(),l.end())< 28 | using namespace std; 29 | int n; 30 | int arr[105]; 31 | int f[100005]; 32 | int main(){ 33 | cin>>n; 34 | int sum=0; 35 | for(int i=0;i>arr[i]; 37 | sum+=arr[i]; 38 | } 39 | f[0]=1; 40 | for(int i=0;i=arr[i];j--){ 42 | if(!f[j]&&f[j-arr[i]]){ 43 | f[j]=1; 44 | } 45 | } 46 | } 47 | for(int i=0;i<=sum;i++){ 48 | if(f[i]){ 49 | cout< 31 | using namespace std; 32 | #define ll long long 33 | ll n; 34 | int main(){ 35 | cin>>n; 36 | ll dp[n+5]; 37 | dp[0]=0; 38 | dp[1]=1; 39 | dp[2]=2; 40 | dp[3]=4; 41 | for(int i=4;i<=n;i++){ 42 | dp[i]=dp[i-1]+dp[i-2]+dp[i-3]; 43 | } 44 | cout< 32 | using namespace std; 33 | 34 | #define ll long long 35 | #define pii pair 36 | #define vii vector 37 | #define pb push_back 38 | #define fi first 39 | #define el cout<> a; 42 | #define out(a) cout<< a; 43 | #define all(x) (x).begin(), (x).end() 44 | #define rep(a) for(int i = 0; i < (a); i++) 45 | #define vll vector 46 | #define vi vector 47 | #define ms(a,n) memset(a,n,sizeof(a)) 48 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 49 | #define FOD(i,b,a) for(int i=b;i>=a;i--) 50 | #define faster ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); 51 | const ll MOD = 1e9 + 7; 52 | //const ll INT_MAX = 1e9; 53 | ll n, s; 54 | 55 | 56 | int main() 57 | { 58 | faster; 59 | int n, m; 60 | cin >> n >> m; 61 | int a[n + 1][m + 1]; 62 | ms(a, 0); 63 | FOR(i,1,n){ 64 | FOR(j,1,m){ 65 | cin >> a[i][j]; 66 | } 67 | } 68 | for (int i = 1; i <= n;i++){ 69 | for(int j = 1; j <= m; j++){ 70 | if(i==1){ 71 | a[i][j] = a[i][j - 1] + a[i][j]; 72 | }else if(j==1) 73 | a[i][j] = a[i - 1][j] + a[i][j]; 74 | else { 75 | a[i][j]=max(a[i-1][j],a[i][j-1])+a[i][j]; 76 | } 77 | } 78 | } 79 | cout << a[n][m] << endl; 80 | } -------------------------------------------------------------------------------- /qhd/maximum square spoj.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Bạn được cung cấp một ma trận nhị phân có N dòng và M cột chỉ bao gồm các số 0 và 1, hãy tìm hình vuông lớn nhất trong ma trận mà chỉ chứa toàn số 1. 3 | 4 | Input Format 5 | 6 | Dòng đầu tiên gồm 2 số N và M; N dòng tiếp theo mỗi dòng M số nguyên; 7 | 8 | Constraints 9 | 10 | 1<=N,M<=500; 0<=A[i][j]<=1; 11 | 12 | Output Format 13 | 14 | In ra kết quả đáp án của bài toán 15 | 16 | Sample Input 0 17 | 18 | 4 4 19 | 1 1 0 0 20 | 1 1 1 1 21 | 1 1 0 1 22 | 1 0 1 0 23 | Sample Output 0 24 | 25 | 2 26 | */ 27 | 28 | 29 | #include 30 | using namespace std; 31 | 32 | #define ll long long 33 | #define pii pair 34 | #define vii vector 35 | #define pb push_back 36 | #define fi first 37 | #define el cout<> a; 40 | #define out(a) cout<< a; 41 | #define all(x) (x).begin(), (x).end() 42 | #define rep(a) for(int i = 0; i < (a); i++) 43 | #define vll vector 44 | #define vi vector 45 | #define ms(a,n) memset(a,n,sizeof(a)) 46 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 47 | #define FOD(i,b,a) for(int i=b;i>=a;i--) 48 | #define faster ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); 49 | const ll MOD = 1e9 + 7; 50 | 51 | ll n,m; 52 | ll a[1000][1000]; 53 | ll dp[1000][1000]; 54 | int main() 55 | { 56 | faster; 57 | cin>>n>>m; 58 | ms(a,0); 59 | ms(dp,0); 60 | FOR(i,0,n-1){ 61 | FOR(j,0,m-1){ 62 | cin>>a[i][j]; 63 | } 64 | } 65 | for(int i=0;i 36 | using namespace std; 37 | 38 | #define ll long long 39 | #define pii pair 40 | #define vii vector 41 | #define pb push_back 42 | #define fi first 43 | #define el cout<> a; 46 | #define out(a) cout<< a; 47 | #define all(x) (x).begin(), (x).end() 48 | #define rep(a) for(int i = 0; i < (a); i++) 49 | #define vll vector 50 | #define vi vector 51 | #define ms(a,n) memset(a,n,sizeof(a)) 52 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 53 | #define FOD(i,b,a) for(int i=b;i>=a;i--) 54 | #define faster ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); 55 | const ll MOD = 1e9 + 7; 56 | 57 | 58 | int main() 59 | { 60 | faster; 61 | int n ; 62 | cin>>n; 63 | int a[n]; 64 | for(int i=0;i>a[i]; 66 | } 67 | int f[n]={0}; 68 | for(int i=0;i a[j]){ 72 | f[i]=max(f[i],f[j]+1); 73 | } 74 | } 75 | } 76 | cout< 27 | using namespace std; 28 | #define ll long long 29 | 30 | #define ll long long 31 | int main() 32 | { 33 | ios_base::sync_with_stdio(0); 34 | cin.tie(0); 35 | cout.tie(0); 36 | 37 | string s1, s2; 38 | cin >> s1 >> s2; 39 | ll n1 = s1.size(), n2 = s2.size(); 40 | vector > dp(n1+5, vector(n2+5,0)); 41 | for (ll i = 1; i <= n1; i++) 42 | { 43 | for (ll j = 1; j <= n2; j++) 44 | { 45 | if (s1[i - 1] == s2[j - 1]) 46 | { 47 | dp[i][j] = dp[i - 1][j - 1] + 1; 48 | } 49 | else 50 | { 51 | dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]); 52 | } 53 | } 54 | } 55 | cout< 26 | using namespace std; 27 | 28 | #define ll long long 29 | #define pii pair 30 | #define vii vector 31 | #define pb push_back 32 | #define fi first 33 | #define el cout<> a; 36 | #define out(a) cout<< a; 37 | #define all(x) (x).begin(), (x).end() 38 | #define rep(a) for(int i = 0; i < (a); i++) 39 | #define vll vector 40 | #define vi vector 41 | #define ms(a,n) memset(a,n,sizeof(a)) 42 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 43 | #define FOD(i,b,a) for(int i=b;i>=a;i--) 44 | #define faster ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); 45 | const ll MOD = 1e9 + 7; 46 | string s; 47 | // ll dp[1000]; 48 | 49 | int main() 50 | { 51 | faster; 52 | 53 | cin>>s; 54 | int n =s.length(); 55 | ll dp[n]; 56 | dp[0]=s[0]-'0'; 57 | ll sum =dp[0]; 58 | for(int i=1;i 28 | #include 29 | #include 30 | using namespace std; 31 | int f[10005]; 32 | int main(){ 33 | int n; 34 | cin>>n; 35 | f[0]=0; 36 | f[1]=1; 37 | for(int i=2;i<=n;i++){ 38 | f[i]=INT_MAX; 39 | for(int j=1;j<=sqrt(i);j++){ 40 | f[i]=min(f[i],f[i-j*j]+1); 41 | } 42 | } 43 | cout< 27 | using namespace std; 28 | const int N = 1e5 + 1; 29 | const int K = 101; 30 | const int M = 1e9 + 7; 31 | #define ll long long 32 | int f[N][K]; 33 | int main() { 34 | 35 | int n;cin>>n; 36 | int a[n]; 37 | for(int i=0; i>a[i]; 39 | 40 | } 41 | int sum[n]; 42 | sum[0]=a[0]; 43 | sum[1]=max(a[0],a[1]); 44 | for(int i=2;i 26 | using namespace std; 27 | #define ll long long 28 | #define foru(i, a, b) for (int i = a; i <= b; i++) 29 | #define ford(i, b, a) for (int i = b; i >= a; i--) 30 | const int mod = 1e9 + 7; 31 | 32 | void solve() 33 | { 34 | int n; 35 | cin >> n; 36 | vector a(n); 37 | for (int &x : a) 38 | cin >> x; 39 | vector dp(n, 0); 40 | int ans = a[0]; 41 | dp[0] = a[0]; 42 | for (int i = 1; i < n; i++) 43 | { 44 | int add = 0; 45 | for (int j = 0; j < i; j++) 46 | { 47 | if (a[j] < a[i]) 48 | { 49 | add = max(add, dp[j]); 50 | } 51 | } 52 | 53 | dp[i] = add + a[i]; 54 | ans = max(ans, dp[i]); 55 | } 56 | cout << ans << endl; 57 | } 58 | 59 | int main() 60 | { 61 | ios_base::sync_with_stdio(0); 62 | cin.tie(0); 63 | cout.tie(0); 64 | 65 | solve(); 66 | cout << endl; 67 | } -------------------------------------------------------------------------------- /qhd/xauconchungdainhat.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Cho 2 xâu kí tự S và T, hãy tìm xâu con chung dài nhất của S và T. Các kí tự của xâu con không nhất thiết phải liền kề nhau. 3 | 4 | Input Format 5 | 6 | Dòng đầu tiên là xâu S; Dòng thứ 2 là xâu T; 7 | 8 | Constraints 9 | 10 | S và T chỉ gồm các chữ cái in hoa và có độ dài không quá 1000 11 | 12 | Output Format 13 | 14 | In ra độ dài xâu con chung dài nhất của S và T 15 | 16 | Sample Input 0 17 | 18 | ZHFTDFHF 19 | TFISHROV 20 | Sample Output 0 21 | 22 | 3 23 | 24 | */ 25 | #include 26 | using namespace std; 27 | 28 | #define ll long long 29 | #define pii pair 30 | #define vii vector 31 | #define pb push_back 32 | #define fi first 33 | #define el cout<> a; 36 | #define out(a) cout<< a; 37 | #define all(x) (x).begin(), (x).end() 38 | #define rep(a) for(int i = 0; i < (a); i++) 39 | #define vll vector 40 | #define vi vector 41 | #define ms(a,n) memset(a,n,sizeof(a)) 42 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 43 | #define FOD(i,b,a) for(int i=b;i>=a;i--) 44 | #define faster ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); 45 | const ll MOD = 1e9 + 7; 46 | 47 | string s , t ; 48 | void solve(string s, string t ){ 49 | int n=s.size(),m=t.length(); 50 | 51 | vector> dp(n+5,vector(m+5,0)); 52 | for(int i=1;i<=n;i++){ 53 | for(int j=1;j<=m;j++){ 54 | if(s[i-1]==t[j-1]){ 55 | dp[i][j]=dp[i-1][j-1]+1; 56 | }else { 57 | dp[i][j]=max(dp[i-1][j],dp[i][j-1]); 58 | } 59 | } 60 | } 61 | cout<> s >> t ; 68 | solve(s,t); 69 | 70 | } 71 | -------------------------------------------------------------------------------- /qhd/xauconchungdainhatbaxau.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Cho ba xâu ký tự X, Y, Z. Nhiệm vụ của bạn là tìm độ dài dãy con chung dài nhất có mặt trong cả ba xâu. 4 | 5 | Input Format 6 | 7 | 3 dòng lần lượt chứa X, Y, Z; 8 | 9 | Constraints 10 | 11 | 1<=len(X), len(Y), len(Z) <= 100; 12 | 13 | Output Format 14 | 15 | In ra độ dài của xâu con chung dài nhất của 3 xâu 16 | 17 | Sample Input 0 18 | 19 | AGLEHHGE 20 | GLGHLALB 21 | DDLBLEHGD 22 | Sample Output 0 23 | 24 | 2 25 | */ 26 | #include 27 | using namespace std; 28 | 29 | #define ll long long 30 | #define pii pair 31 | #define vii vector 32 | #define pb push_back 33 | #define fi first 34 | #define el cout<> a; 37 | #define out(a) cout<< a; 38 | #define all(x) (x).begin(), (x).end() 39 | #define rep(a) for(int i = 0; i < (a); i++) 40 | #define vll vector 41 | #define vi vector 42 | #define ms(a,n) memset(a,n,sizeof(a)) 43 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 44 | #define FOD(i,b,a) for(int i=b;i>=a;i--) 45 | #define faster ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); 46 | const ll MOD = 1e9 + 7; 47 | string s, t, k; 48 | 49 | 50 | void solve(string s,string t,string k){ 51 | int n =s.length(),m=t.length(),y=k.length(); 52 | vector>> dp(n + 5, vector < vector>(m + 5, vector(y + 5, 0))); 53 | FOR(i,1,n){ 54 | FOR(j,1,m){ 55 | FOR(z,1,y){ 56 | if(s[i-1]==t[j-1]&& s[i-1]==k[z-1]){ 57 | dp[i][j][z] = dp[i - 1][j - 1][z - 1] + 1; 58 | }else { 59 | dp[i][j][z] = max({dp[i - 1][j][z], dp[i][j - 1][z], dp[i][j][z - 1]}); 60 | } 61 | 62 | } 63 | } 64 | } 65 | cout << dp[n][m][y] << endl; 66 | } 67 | int main() 68 | { 69 | faster; 70 | cin >> s >> t >> k; 71 | solve(s, t, k); 72 | } -------------------------------------------------------------------------------- /qhd/xaucondoixungdainhat.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Cho xâu S chỉ bao gồm các ký tự viết thường và dài không quá 1000 ký tự. Hãy tìm xâu con đối xứng dài nhất của S. 4 | 5 | Input Format 6 | 7 | Dòng duy nhất chứa xâu S 8 | 9 | Constraints 10 | 11 | 1<=len(S)<=1000; 12 | 13 | Output Format 14 | 15 | In ra đáp án của bài toán 16 | 17 | Sample Input 0 18 | 19 | edhcgeehahbbeggfcgcchffbffcgfghgc 20 | Sample Output 0 21 | 22 | 5 23 | */ 24 | 25 | #include 26 | using namespace std; 27 | 28 | #define ll long long 29 | #define pii pair 30 | #define vii vector 31 | #define pb push_back 32 | #define fi first 33 | #define el cout<> a; 36 | #define out(a) cout<< a; 37 | #define all(x) (x).begin(), (x).end() 38 | #define rep(a) for(int i = 0; i < (a); i++) 39 | #define vll vector 40 | #define vi vector 41 | #define ms(a,n) memset(a,n,sizeof(a)) 42 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 43 | #define FOD(i,b,a) for(int i=b;i>=a;i--) 44 | #define faster ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); 45 | const ll MOD = 1e9 + 7; 46 | 47 | string s; 48 | void solve(string s ){ 49 | ll n=s.size(); 50 | 51 | s = "@" + s; 52 | ll dp[n+1][n+1]; 53 | ms(dp, 0); 54 | for (ll i = 1; i <= n;i++){ 55 | dp[i][i] = 1; 56 | } 57 | ll ans = -1; 58 | for (ll len = 2; len <= n;len++){ 59 | for (ll i = 1; i <= n-len+1;i++){ 60 | 61 | ll j = len + i - 1; 62 | if(len==2){ 63 | if(s[i]==s[j]){ 64 | dp[i][j] = 1; 65 | } 66 | } 67 | else { 68 | dp[i][j] = dp[i + 1][j - 1] && (s[i] == s[j]); 69 | } 70 | if(dp[i][j]==1) { 71 | ans =max(ans,len); 72 | } 73 | } 74 | } 75 | cout << ans << endl; 76 | } 77 | int main() 78 | { 79 | 80 | faster; 81 | cin >> s; 82 | solve(s); 83 | } 84 | -------------------------------------------------------------------------------- /qhd/xemphim.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | John có một đàn bò. Một ngày đẹp trời, anh ta quyết định mua xe tải với khả năng chở được C kg (1000 ≤ C ≤ 25000) để đưa những con bò đi xem phim. Cho số con bò là N (20 ≤ N ≤ 100) và khối lượng w[i] của từng con (đều nhỏ hơn C), hãy cho biết khối lượng bò lớn nhất mà John có thể đưa đi xem phim là bao nhiêu. 3 | 4 | Input Format 5 | 6 | Dòng 1: 2 số nguyên C và N cách nhau bởi dấu cách; Dòng 2: Ghi lần lượt các số nguyên: w[i] 7 | 8 | Constraints 9 | 10 | 1000 ≤ C ≤ 25000; 20 ≤ N ≤ 100; w[i] <= C; 11 | 12 | Output Format 13 | 14 | Một số nguyên là tổng khối lượng bò lớn nhất mà John có thể mang đi xem phim. 15 | 16 | Sample Input 0 17 | 18 | 259 5 19 | 81 58 42 33 61 20 | Sample Output 0 21 | 22 | 242 23 | Submissions: 68 24 | Max Score: 100 25 | Difficulty: Easy 26 | Rate This Challenge: 27 | 28 | 29 | More 30 | 31 | 1 32 | with Ada.Text_IO, Ad 33 | */ 34 | 35 | #include 36 | using namespace std; 37 | const int N = 1e5 + 1; 38 | const int K = 101; 39 | const int M = 1e9 + 7; 40 | int f[N][K]; 41 | int main() { 42 | 43 | int s , k ; cin >> s >> k; 44 | int a[k]; 45 | for(int i = 0; i < k; i++){ 46 | cin>>a[i]; 47 | } 48 | bool dp[s+1]={0}; 49 | 50 | dp[0]=1; 51 | 52 | for(int i = 0; i < k; i++){ 53 | for(int j=s;j>=a[i];j--){ 54 | if(dp[j-a[i]]==1){ 55 | dp[j]=1; 56 | } 57 | 58 | } 59 | } 60 | 61 | for(int j=s;j>=1;j--){ 62 | if(dp[j]==1){ 63 | cout< 36 | #include 37 | #include 38 | using namespace std; 39 | int f[1000005]; 40 | int main(){ 41 | int n; 42 | cin>>n; 43 | for(int i=1;i<=9;i++){ 44 | f[i]=1; 45 | } 46 | for(int i=10;i<=n;i++){ 47 | vectortmp; 48 | tmp.clear(); 49 | int z=i; 50 | f[i]=INT_MAX; 51 | while(z!=0){ 52 | tmp.push_back(z%10); 53 | z/=10; 54 | } 55 | for(auto a:tmp){ 56 | if(a!=0){ 57 | f[i]=min(f[i],f[i-a]+1); 58 | } 59 | } 60 | } 61 | cout< 33 | #define faster() ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); 34 | using namespace std; 35 | using ll = long long; 36 | const ll MOD = 1e9+7; 37 | const ll maxn = 1e5+5; 38 | const ll inf = 1e18; 39 | ll dp[105][105]; 40 | void solve() 41 | { // dp[i][j]: co i chu so va so du la j 42 | int n, m; cin >> n >> m; 43 | string s; cin >> s; 44 | s = ' ' + s; 45 | memset(dp, 0, sizeof(dp)); 46 | dp[0][0] = 1; 47 | for(int i = 1; i <= n; i++) 48 | { 49 | int c = (s[i] - '0') % m; 50 | for(int j = 0; j < m; j++) 51 | { 52 | dp[i][j] += dp[i-1][j]; 53 | dp[i][(j * 10 + c) % m] += dp[i-1][j]; 54 | } 55 | } 56 | cout << dp[n][0] - 1 << '\n'; 57 | } 58 | int main() 59 | { 60 | faster(); 61 | int t = 1; cin >> t; 62 | while(t--) 63 | { 64 | solve(); 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /thamlam/chiatap.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Cho mảng A[] gồm N số nguyên không âm và số K. Nhiệm vụ của bạn là hãy chia mảng A[] thành hai mảng con có kích cỡ K và N-K sao cho hiệu giữa tổng hai mảng con là lớn nhất. Ví dụ với mảng A[] = {8, 4, 5, 2, 10}, K=2 ta có kết quả là 17 vì mảng A[] được chia thành hai mảng {4, 2} và { 8, 5,10} có hiệu của hai mảng con là 23-6=17 là lớn nhất. 3 | 4 | Input Format 5 | 6 | Dòng duy nhất chứa 2 số nguyên N và K; Dòng thứ 2 gồm N số của mảng A[] 7 | 8 | Constraints 9 | 10 | 1<=K<=N<=10^6; 0<=A[i]<=10^9; 11 | 12 | Output Format 13 | 14 | In ra đáp án của bài toán 15 | 16 | Sample Input 0 17 | 18 | 6 4 19 | 3 10 10 7 5 2 20 | Sample Output 0 21 | 22 | 27 23 | 24 | */ 25 | 26 | #include 27 | using namespace std; 28 | 29 | #define ll long long 30 | #define pii pair 31 | #define vii vector 32 | #define pb push_back 33 | #define fi first 34 | #define el cout<> a; 37 | #define out(a) cout<< a; 38 | #define all(x) (x).begin(), (x).end() 39 | #define rep(a) for(int i = 0; i < (a); i++) 40 | #define vll vector 41 | #define vi vector 42 | #define ms(a) memset(a,sizeof(a)) 43 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 44 | #define FOD(i,b,a) for(int i=b;i>=a;i--) 45 | #define faster ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); 46 | const ll MOD = 1e9 + 7; 47 | 48 | 49 | int main() 50 | { 51 | faster; 52 | ll n, k; 53 | cin>> n>>k; 54 | k=max(k,n-k); 55 | ll a[n]; 56 | for(auto & x : a ) cin>> x ; 57 | sort(a,a+n,greater()); 58 | ll ans=0; 59 | for(ll i=0;i 0 ) ans += a[i]; 61 | else ans -= a[i]; 62 | --k; 63 | } 64 | cout<< ans ; 65 | 66 | 67 | 68 | 69 | } -------------------------------------------------------------------------------- /thamlam/cuocvaliem.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Tèo đang chơi một game là nông trại vui vẻ, để tham gia game nông trại vui vẻ, các game thủ phải sử dụng 2 công vụ là cuốc và liềm. Biết rằng để đổi lấy 1 cái cuốc thì cần 2 đồng xu và 1 kim cương, để đổi lấy 1 cái liềm thì cần 1 đồng xu và 2 kim cương. Hãy xác định tổng số cuốc và liềm lớn nhất mà Tèo có thể đổi được biết rằng Tèo có a đồng xu và b kim cương. 4 | 5 | Input Format 6 | 7 | Dòng duy nhất chứa 2 số a và b 8 | 9 | Constraints 10 | 11 | 0<=a,b<=10^9 12 | 13 | Output Format 14 | 15 | In ra đáp án của bài toán 16 | 17 | Sample Input 0 18 | 19 | 6 8 20 | Sample Output 0 21 | 22 | 4 23 | */ 24 | 25 | #include 26 | using namespace std; 27 | typedef long long ll; 28 | const int ac = 1e9+7; 29 | int main() { 30 | int a, b; 31 | cin >> a >> b; 32 | int dem = 0; 33 | while(a != 0 && b != 0) { 34 | if(a > b && a-2 >=0) { 35 | a-=2; 36 | b--; 37 | ++dem; 38 | } else if(b >= a && b-2 >= 0){ 39 | b-=2; 40 | a--; 41 | ++dem; 42 | } else { 43 | break; 44 | } 45 | } 46 | cout << dem; 47 | } -------------------------------------------------------------------------------- /thamlam/dichuyendaungoac.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Cho một xâu kí tự S chỉ bao gồm các kí tự '(' hoặc kí tự ')'. S có độ dài là số chẵn có giá trị N. Xâu S gồm N / 2 kí tự mở ngoặc và N / 2 kí tự đóng ngoặc. Ở mỗi thao tác các bạn được lựa chọn 1 kí tự bất kì của S để đưa về vị trí đầu tiên hoặc vị trí cuối cùng của dãy. Các bạn hãy xác định số thao tác tối thiểu cần thực hiện để tạo được 1 xâu dấu ngoặc hợp lệ. Một số ví dụ về xâu hợp lệ : (), (((()))), ()((()))... 4 | 5 | Input Format 6 | 7 | Một dòng duy nhất chứa xâu S 8 | 9 | Constraints 10 | 11 | 1<=N<=1000; 12 | 13 | Output Format 14 | 15 | In ra số thao tác tối thiểu cần thực hiện 16 | 17 | Sample Input 0 18 | 19 | )))((((()) 20 | Sample Output 0 21 | 22 | 3 23 | 24 | */ 25 | 26 | #include 27 | using namespace std; 28 | 29 | #define ll long long 30 | #define pii pair 31 | #define vii vector 32 | #define pb push_back 33 | #define fi first 34 | #define el cout << endl 35 | #define se second 36 | #define in(a) cin >> a; 37 | #define out(a) cout << a; 38 | #define all(x) (x).begin(), (x).end() 39 | #define rep(a) for (int i = 0; i < (a); i++) 40 | #define vll vector 41 | #define vi vector 42 | #define ms(a) memset(a, sizeof(a)) 43 | #define FOR(i, a, b) for (int i = a; i <= b; i++) 44 | #define FOD(i, b, a) for (int i = b; i >= a; i--) 45 | #define faster \ 46 | ios_base::sync_with_stdio(false); \ 47 | cin.tie(NULL); \ 48 | cout.tie(NULL); 49 | const ll MOD = 1e9 + 7; 50 | 51 | int main() 52 | { 53 | faster; 54 | string s; 55 | cin >> s; 56 | stack st; 57 | for (int i = 0; i < s.length(); i++) 58 | { 59 | if (s[i] == '(') 60 | { 61 | st.push(s[i]); 62 | } 63 | else 64 | { 65 | if (!st.empty()&& st.top()=='(') 66 | { 67 | st.pop(); 68 | }else{ 69 | st.push(s[i]); 70 | } 71 | } 72 | } 73 | cout< 31 | #include 32 | using namespace std; 33 | int n; 34 | int arr[100005]; 35 | int used[100005]; 36 | int binary(int l, int r, int value) { 37 | int ans = -1; 38 | while (l <= r) { 39 | int mid = (l + r) / 2; 40 | if (arr[mid] >= value) { 41 | if (!used[mid]) { 42 | ans = mid; 43 | r = mid - 1; 44 | } 45 | else { 46 | l = mid + 1; 47 | } 48 | } 49 | else { 50 | l = mid + 1; 51 | } 52 | } 53 | return ans; 54 | } 55 | int main() { 56 | cin >> n; 57 | for (int i = 0; i < n; i++) { 58 | cin >> arr[i]; 59 | } 60 | sort(arr, arr + n); 61 | long long sum = arr[0]; 62 | int ans = 1; 63 | used[0] = 1; 64 | while (1) { 65 | int idx = binary(0, n - 1, sum); 66 | if (idx == -1) { 67 | break; 68 | } 69 | used[idx] = 1; 70 | sum += arr[idx]; 71 | ans++; 72 | } 73 | cout << ans; 74 | } -------------------------------------------------------------------------------- /thamlam/mualuongthuc.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Giả sử bạn là một người nghèo trong địa phương của bạn. Địa phương của bạn có duy nhất một cửa hàng bán lương thực. Cửa hàng của bạn mở cửa tất cả các ngày trong tuần ngoại trừ chủ nhật. Cho bộ ba số N, S, M thỏa mãn ràng buộc sau: N : số đơn vị lương thực nhiều nhất bạn có thể mua trong ngày. S : số lượng ngày bạn cần được sử dụng lương thực để tồn tại. M : số đơn vị lương thực cần có mỗi ngày để bạn tồn tại. Giả sử bạn đang ở ngày thứ 2 trong tuần và cần tồn tại trong S ngày tới. Hãy cho biết số lượng ngày ít nhất bạn cần phải mua lương thực từ của hàng để tồn tại hoặc bạn sẽ bị chết đói trong S ngày tới. 4 | 5 | Input Format 6 | 7 | 1 dòng chứa 3 số N, S, M 8 | 9 | Constraints 10 | 11 | 1<=S,N,M<=100 12 | 13 | Output Format 14 | 15 | In ra số ngày ít nhất cần mua lương thực, nếu không thể mua đủ lương thực để tồn tại thì in ra -1 16 | 17 | Sample Input 0 18 | 19 | 7 5 7 20 | Sample Output 0 21 | 22 | 5 23 | */ 24 | 25 | 26 | 27 | #include 28 | using namespace std ; 29 | #define ll long long 30 | #define fi first 31 | #define se second 32 | void solve(){ 33 | int n , s,m; 34 | cin>>n>>s>>m; 35 | int sum =s*m; 36 | int need_days=sum/n; 37 | if(sum%n!=0){ 38 | need_days++; 39 | } 40 | int sunday=s/7; 41 | int real_days=s-sunday; 42 | if(real_days< need_days){ 43 | cout<<-1< 35 | 36 | using namespace std; 37 | #define ll long long 38 | 39 | int main() 40 | { 41 | ll n; 42 | cin >> n; 43 | ll a[n]; 44 | for (ll &x : a) 45 | cin >> x; 46 | priority_queue, greater> pq; 47 | 48 | for (ll x : a) 49 | pq.push(x); 50 | ll ans = 0; 51 | while (pq.size() > 1) 52 | { 53 | ll top1 = pq.top(); 54 | pq.pop(); 55 | ll top2 = pq.top(); 56 | pq.pop(); 57 | ans += top1 + top2; 58 | pq.push(top1 + top2); 59 | } 60 | cout << ans << endl; 61 | } -------------------------------------------------------------------------------- /thamlam/noiday2.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Cho N sợi dây, biết chi phí nối 2 sợ dây là tổng độ dài của 2 sợi dây đó. Nhiệm vụ của bạn là nối N sợi dây này thành 1 sao cho chi phí nối dây là lớn nhất 4 | 5 | Input Format 6 | 7 | Dòng 1 chứa số nguyên N; Dòng 2 chứa N số nguyên là độ dài các sợ dây 8 | 9 | Constraints 10 | 11 | 1<=N<=10^5; Các sợi dây có độ dài không quá 10^9; 12 | 13 | Output Format 14 | 15 | Đáp án của bài toán chia dư với 10^9 + 7 16 | 17 | Sample Input 0 18 | 19 | 9 20 | 10 1 5 7 4 8 7 7 1 21 | Sample Output 0 22 | 23 | 305 24 | Sample Input 1 25 | 26 | 3 27 | 5 6 1 28 | Sample Output 1 29 | 30 | 23 31 | */ 32 | 33 | #include 34 | 35 | using namespace std; 36 | #define ll long long 37 | const ll MOD=1e9+7; 38 | int main() 39 | { 40 | ll n; 41 | cin >> n; 42 | ll a[n]; 43 | for (ll &x : a) 44 | cin >> x; 45 | priority_queue pq; 46 | 47 | for (ll x : a) 48 | pq.push(x); 49 | ll ans = 0; 50 | while (pq.size() > 1) 51 | { 52 | ll top1 = pq.top(); 53 | pq.pop(); 54 | ll top2 = pq.top(); 55 | pq.pop(); 56 | ans += top1 + top2; 57 | ans%=MOD; 58 | pq.push(top1 + top2); 59 | } 60 | cout << ans%MOD << endl; 61 | } -------------------------------------------------------------------------------- /thamlam/phansodonvi.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Một phân số đơn vị nếu tử số của phân số đó là 1. Mọi phân số nguyên dương đều có thể biểu diễn thành tổng các phân số đơn vị. Ví dụ 2/3 = 1/2 + 1/6. Cho phân số nguyên dương P/Q bất kỳ , hãy biểu diễn phân số nguyên dương thành tổng phân số đơn vị với số hạng tử là ít nhất. 3 | 4 | Input Format 5 | 6 | 1 dòng duy nhất chứa 2 số P, Q 7 | 8 | Constraints 9 | 10 | 1<=P,Q<=200 11 | 12 | Output Format 13 | 14 | Đưa ra đáp án trên 1 dòng 15 | 16 | Sample Input 0 17 | 18 | 9 6 19 | Sample Output 0 20 | 21 | 1/1 + 1/2 22 | Sample Input 1 23 | 24 | 5 6 25 | Sample Output 1 26 | 27 | 1/2 + 1/3 28 | 29 | */ 30 | 31 | #include 32 | using namespace std; 33 | 34 | #define ll long long 35 | #define pii pair 36 | #define vii vector 37 | #define pb push_back 38 | #define fi first 39 | #define el cout<> a; 42 | #define out(a) cout<< a; 43 | #define all(x) (x).begin(), (x).end() 44 | #define rep(a) for(int i = 0; i < (a); i++) 45 | #define vll vector 46 | #define vi vector 47 | #define ms(a) memset(a,sizeof(a)) 48 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 49 | #define FOD(i,b,a) for(int i=b;i>=a;i--) 50 | #define faster ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); 51 | const ll MOD = 1e9 + 7; 52 | 53 | 54 | int main() 55 | { 56 | faster; 57 | ll tu ,mau; 58 | cin>>tu>>mau; 59 | ll res=0; 60 | while(1){ 61 | if(mau%tu == 0){ 62 | cout<<"1/"< 27 | using namespace std; 28 | #define ll long long 29 | int main() 30 | { 31 | int k; 32 | cin >> k; 33 | cin.ignore(); 34 | string s; 35 | getline(cin, s); 36 | map mp; 37 | for (char x : s) 38 | { 39 | mp[x]++; 40 | } 41 | priority_queue pq; 42 | for (auto it : mp) 43 | { 44 | pq.push(it.second); 45 | } 46 | while (k > 0) 47 | { 48 | int top = pq.top(); 49 | pq.pop(); 50 | --top; 51 | --k; 52 | pq.push(max(top, 0)); 53 | } 54 | ll ans = 0; 55 | while (!pq.empty()) 56 | { 57 | ans += 1ll * pq.top() * pq.top(); 58 | pq.pop(); 59 | } 60 | cout << ans << endl; 61 | } -------------------------------------------------------------------------------- /thamlam/sapdatxaukitupro.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Cho xâu kí tự S chỉ bao gồm các kí tự in thường, hãy kiểm tra xem có thể sắp đặt lại các kí tự trong xâu sao cho không có 2 kí tự kề nhau nào giống nhau hay không? 3 | 4 | Input Format 5 | 6 | Dòng duy nhất chứa xâu S 7 | 8 | Constraints 9 | 10 | 1<=len(S)<=10000; 11 | 12 | Output Format 13 | 14 | Nếu có thể sắp đặt lại xâu kí tự in ra YES, ngược lại in ra NO. 15 | 16 | Sample Input 0 17 | 18 | aqeaaqwq 19 | Sample Output 0 20 | 21 | YES 22 | Submissions: 47 23 | Max Score: 100 24 | Difficulty: Easy 25 | Rate This Challenge: 26 | 27 | 28 | More 29 | 30 | */ 31 | 32 | 33 | 34 | #include 35 | using namespace std; 36 | #define ll long long 37 | #define fi first 38 | #define se second 39 | void solve(string s) 40 | { 41 | 42 | vector cnt(26, 0); 43 | for (ll i = 0; i < s.size(); i++) 44 | cnt[s[i] - 'a']++; 45 | ll max_count = 0; 46 | 47 | for (ll i = 0; i < cnt.size(); i++) 48 | max_count = max(max_count, cnt[i]); 49 | ll ans = (ll)s.length() - max_count; 50 | cout << (ans >= max_count-1 ? "YES" : "NO"); 51 | } 52 | 53 | int main() 54 | { 55 | 56 | string s; 57 | cin >> s; 58 | solve(s); 59 | } -------------------------------------------------------------------------------- /thamlam/sapxepthamlam.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Cho mảng A[] gồm N số và thực hiện các thao tác theo nguyên tắc dưới đây: 1. Ta chọn một mảng con sao cho phần tử ở giữa của mảng con cũng là phần tử ở giữa của mảng A[] (trong trường hợp N lẻ). 2. Đảo ngược mảng con đã chọn trong mảng A[]. Ta được phép chọn mảng con và phép đảo ngược mảng con bao nhiêu lần tùy ý. Ví dụ với mảng A[] = {1, 6, 3, 4, 5, 2, 7} ta có câu trả lời là YES vì: ta chọn mảng con {3, 4, 5} và đảo ngược để nhận được mảng A[]={1, 6, 5, 4, 3, 2, 7}, chọn tiếp mảng con {6, 5, 4, 3, 2} và đảo ngược ta nhận được mảng A[]={1, 2, 3, 4, 5, 6, 7}. Hãy cho biết ta có thể sắp xếp được mảng A[] bằng cách thực hiện các thao tác kể trên hay không? 3 | 4 | Input Format 5 | 6 | Dòng 1 chứa số nguyên dương N là số lẻ. 7 | Dòng 2 chứa N số nguyên của mảng A[] 8 | 9 | Constraints 10 | 11 | 1<=N<=10^6; 0<=A[i]<=10^9; 12 | 13 | Output Format 14 | 15 | In ra YES hoặc NO là đáp án của bài toán 16 | 17 | Sample Input 0 18 | 19 | 5 20 | 1 3 8 7 3 21 | Sample Output 0 22 | 23 | NO 24 | Sample Input 1 25 | 26 | 5 27 | 1 4 3 2 5 28 | Sample Output 1 29 | 30 | YES 31 | Submissions: 53 32 | Max Score: 100 33 | Difficulty: Easy 34 | Rate This Challenge: 35 | 36 | 37 | More 38 | 39 | 40 | */ 41 | 42 | #include 43 | using namespace std; 44 | using ll = long long; 45 | const int MOD = 1e9 + 7; 46 | void fast_io() 47 | { 48 | ios_base::sync_with_stdio(false); 49 | cin.tie(NULL); 50 | } 51 | int n; 52 | int a[1000001], b[1000001]; 53 | int main() 54 | { 55 | fast_io(); 56 | cin >> n; 57 | for (int i = 0; i < n; i++) 58 | { 59 | cin >> a[i]; 60 | b[i] = a[i]; 61 | } 62 | sort(b, b + n); 63 | int ok = 1; 64 | for (int i = 0; i < n; i++) 65 | { 66 | if (b[i] != a[i] && a[i] != b[n - 1 - i]) 67 | { 68 | ok = 0; 69 | break; 70 | } 71 | } 72 | if (ok) 73 | cout << "YES"; 74 | else 75 | cout << "NO"; 76 | } -------------------------------------------------------------------------------- /thamlam/somayman.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Hoàng yêu thích các số may mắn. Ta biết rằng một số là số may mắn nếu biểu diễn thập phân của nó chỉ chứa các chữ số may mắn là 4 và 7. Ví dụ, các số 47, 744, 4 là số may mắn và 5, 17, 467 không phải. Hoàng muốn tìm số may mắn bé nhất có tổng các chữ số bằng n. Hãy giúp anh ấy 4 | 5 | Input Format 6 | 7 | Dòng duy nhất chứa số nguyên dương n 8 | 9 | Constraints 10 | 11 | 1<=n<=10^6; 12 | 13 | Output Format 14 | 15 | In ra đáp án của bài toán, nếu không tồn tại đáp án thì in ra -1 16 | 17 | Sample Input 0 18 | 19 | 16 20 | Sample Output 0 21 | 22 | 4444 23 | Sample Input 1 24 | 25 | 14 26 | Sample Output 1 27 | 28 | 77 29 | */ 30 | 31 | #include 32 | using namespace std; 33 | typedef long long ll; 34 | const int ac = 1e9+7; 35 | int main() { 36 | int n;cin >> n; 37 | int x = n/7; 38 | int r1 = 0; 39 | while((n-x*7)%4 != 0 && x != -1) { 40 | --x; 41 | } 42 | if(x == -1) { 43 | cout << x; 44 | } else { 45 | for(int i = 0; i < (n-x*7)/4; i++) { 46 | cout << 4; 47 | } 48 | for(int i = 0; i < x; i++) { 49 | cout << 7; 50 | } 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /thamlam/sonhonhat.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Cho hai số nguyên dương S và D, trong đó S là tổng các chữ số và D là số các chữ số của một số. Nhiệm vụ của bạn là tìm số nhỏ nhất thỏa mãn S và D? 3 | 4 | Input Format 5 | 6 | 1 dòng gồm 2 số S, D 7 | 8 | Constraints 9 | 10 | 1<=S,D<=1000; 11 | 12 | Output Format 13 | 14 | In ra số nhỏ nhất có D chữ số và có tổng bằng S, nếu không tìm được đáp án thì in ra -1 15 | 16 | Sample Input 0 17 | 18 | 12 8 19 | Sample Output 0 20 | 21 | 10000029 22 | 23 | */ 24 | 25 | 26 | #include 27 | using namespace std; 28 | #define ll long long 29 | #define fi first 30 | #define se second 31 | #define pii pair 32 | 33 | string calc(int s, int d) 34 | { 35 | if (9 * d < s || s == 0) 36 | return "-1"; 37 | string res; 38 | int number_start = -1; 39 | for (int i = 1; i <= 9; i++) 40 | { 41 | if (9 * (d - 1) >= s - i) 42 | { 43 | number_start = i; 44 | break; 45 | } 46 | } 47 | res.push_back(number_start + '0'); 48 | s -= number_start; 49 | d--; 50 | for (int i = 0; i <= 9; i++) 51 | { 52 | while (9 * (d - 1) >= s - i && s - i >= 0) 53 | { 54 | res.push_back(i + '0'); 55 | s -= i; 56 | d--; 57 | } 58 | } 59 | return res; 60 | } 61 | void solve() 62 | { 63 | int s, d; 64 | cin >> s >> d; 65 | cout << calc(s, d) << endl; 66 | } 67 | 68 | int main() 69 | { 70 | solve(); 71 | } -------------------------------------------------------------------------------- /thamlam/stringgame.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | 4 | */ 5 | 6 | #include 7 | using namespace std; 8 | #define ll long long 9 | #define pii pair 10 | #define vii vector 11 | #define pb push_back 12 | #define fi first 13 | #define el cout << endl 14 | #define se second 15 | #define in(a) cin >> a; 16 | #define out(a) cout << a; 17 | #define all(x) (x).begin(), (x).end() 18 | #define rep(a) for (int i = 0; i < (a); i++) 19 | #define vll vector 20 | #define vi vector 21 | #define ms(a) memset(a, sizeof(a)) 22 | #define FOR(i, a, b) for (int i = a; i <= b; i++) 23 | #define FOD(i, b, a) for (int i = b; i >= a; i--) 24 | #define faster \ 25 | ios_base::sync_with_stdio(false); \ 26 | cin.tie(NULL); \ 27 | cout.tie(NULL); 28 | const ll MOD = 1e9 + 7; 29 | 30 | int main() 31 | { 32 | faster; 33 | 34 | string s ; 35 | cin>> s ; 36 | int cnt =0; 37 | map mp; 38 | for(char x : s ){ 39 | mp[x]++; 40 | } 41 | for(auto it : mp) { 42 | if(it.second&1){ 43 | ++cnt ; 44 | } 45 | } 46 | int ans =(cnt==2|| cnt==0 || cnt==1 ||(cnt&1&&cnt>1))? 1 : 2 ; 47 | cout< 31 | using namespace std; 32 | typedef long long ll; 33 | const int ac = 1e9 + 7; 34 | int main() 35 | { 36 | int n; 37 | cin >> n; 38 | int i = 2; 39 | map db; 40 | for (int i = 2; i <= sqrt(n); i++) 41 | { 42 | if (n % i == 0) 43 | { 44 | db[i]++; 45 | n /= i; 46 | } 47 | } 48 | if (n != 1) 49 | db[n]++; 50 | if (db.size() >= 3) 51 | { 52 | cout << "YES"; 53 | } 54 | else 55 | { 56 | if (db.size() == 1) 57 | { 58 | int res = 0; 59 | for (auto x : db) 60 | { 61 | if (res >= 6) 62 | break; 63 | res += x.second; 64 | } 65 | if (res >= 6) 66 | { 67 | cout << "YES"; 68 | } 69 | else 70 | { 71 | cout << "NO"; 72 | } 73 | } 74 | else 75 | { 76 | int res = 0; 77 | for (auto x : db) 78 | { 79 | if (res >= 4) 80 | break; 81 | res += x.second; 82 | } 83 | if (res >= 4) 84 | { 85 | cout << "YES"; 86 | } 87 | else 88 | { 89 | cout << "NO"; 90 | } 91 | } 92 | } 93 | } -------------------------------------------------------------------------------- /đồ thị/.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "files.associations": { 3 | "*.cp": "cpp" 4 | } 5 | } -------------------------------------------------------------------------------- /đồ thị/BFStrendothivohuong.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | 4 | #define ll long long 5 | #define pii pair 6 | #define vii vector 7 | #define pb push_back 8 | #define fi first 9 | #define el cout<> a; 12 | #define out(a) cout<< a; 13 | #define all(x) (x).begin(), (x).end() 14 | #define rep(a) for(int i = 0; i < (a); i++) 15 | #define vll vector 16 | #define vi vector 17 | #define ms(a,n) memset(a,n,sizeof(a)) 18 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 19 | #define FOD(i,b,a) for(int i=b;i>=a;i--) 20 | #define faster ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); 21 | const ll MOD = 1e9 + 7; 22 | 23 | 24 | 25 | vll ke[1001]; 26 | int used[1001]; 27 | 28 | int n , m , u; 29 | void dfs(int u){ 30 | used[u]=1; 31 | cout< q; 41 | q.push(u); 42 | 43 | used[u]=1; 44 | while(!q.empty()){ 45 | int top=q.front(); 46 | q.pop(); 47 | cout<< top<<' '; 48 | for(int x : ke[top]){ 49 | if(!used[x]){ 50 | q.push(x); 51 | used[x]=1; 52 | } 53 | } 54 | } 55 | } 56 | void solve(){ 57 | cin>>n>>m>>u; 58 | for(int i=0;i>x>>y; 61 | ke[x].pb(y); 62 | ke[y].pb(x); 63 | 64 | } 65 | ms(used,0); 66 | for(int i=1;i<=n;i++){ 67 | sort(all(ke[i])); 68 | } 69 | bfs(u); 70 | 71 | } 72 | 73 | 74 | 75 | int main() 76 | { 77 | #ifndef ONLINE_JUDGE 78 | freopen("input.txt", "r", stdin); 79 | freopen("output.txt", "w", stdout); 80 | #endif 81 | faster; 82 | solve(); 83 | 84 | } 85 | -------------------------------------------------------------------------------- /đồ thị/DFStrendothivohuong.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | 4 | #define ll long long 5 | #define pii pair 6 | #define vii vector 7 | #define pb push_back 8 | #define fi first 9 | #define el cout<> a; 12 | #define out(a) cout<< a; 13 | #define all(x) (x).begin(), (x).end() 14 | #define rep(a) for(int i = 0; i < (a); i++) 15 | #define vll vector 16 | #define vi vector 17 | #define ms(a,n) memset(a,n,sizeof(a)) 18 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 19 | #define FOD(i,b,a) for(int i=b;i>=a;i--) 20 | #define faster ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); 21 | const ll MOD = 1e9 + 7; 22 | 23 | 24 | 25 | vll ke[1001]; 26 | int used[1001]; 27 | 28 | int n , m , u; 29 | void dfs(int u){ 30 | used[u]=1; 31 | cout<>n>>m>>u; 40 | for(int i=0;i>x>>y; 43 | ke[x].pb(y); 44 | ke[y].pb(x); 45 | 46 | } 47 | ms(used,0); 48 | for(int i=1;i<=n;i++){ 49 | sort(all(ke[i])); 50 | } 51 | dfs(u); 52 | 53 | } 54 | 55 | 56 | 57 | int main() 58 | { 59 | #ifndef ONLINE_JUDGE 60 | freopen("input.txt", "r", stdin); 61 | freopen("output.txt", "w", stdout); 62 | #endif 63 | faster; 64 | solve(); 65 | 66 | } 67 | -------------------------------------------------------------------------------- /đồ thị/bfstrendothicohuong.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | 4 | #define ll long long 5 | #define pii pair 6 | #define vii vector 7 | #define pb push_back 8 | #define fi first 9 | #define el cout<> a; 12 | #define out(a) cout<< a; 13 | #define all(x) (x).begin(), (x).end() 14 | #define rep(a) for(int i = 0; i < (a); i++) 15 | #define vll vector 16 | #define vi vector 17 | #define ms(a,n) memset(a,n,sizeof(a)) 18 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 19 | #define FOD(i,b,a) for(int i=b;i>=a;i--) 20 | #define faster ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); 21 | const ll MOD = 1e9 + 7; 22 | 23 | 24 | 25 | vll ke[1001]; 26 | int used[1001]; 27 | 28 | int n , m , u; 29 | void dfs(int u){ 30 | used[u]=1; 31 | cout< q; 41 | q.push(u); 42 | 43 | used[u]=1; 44 | while(!q.empty()){ 45 | int top=q.front(); 46 | q.pop(); 47 | cout<< top<<' '; 48 | for(int x : ke[top]){ 49 | if(!used[x]){ 50 | q.push(x); 51 | used[x]=1; 52 | } 53 | } 54 | } 55 | } 56 | void solve(){ 57 | cin>>n>>m>>u; 58 | for(int i=0;i>x>>y; 61 | ke[x].pb(y); 62 | //ke[y].pb(x); 63 | 64 | } 65 | ms(used,0); 66 | for(int i=1;i<=n;i++){ 67 | sort(all(ke[i])); 68 | } 69 | bfs(u); 70 | 71 | } 72 | 73 | 74 | 75 | int main() 76 | { 77 | #ifndef ONLINE_JUDGE 78 | freopen("input.txt", "r", stdin); 79 | freopen("output.txt", "w", stdout); 80 | #endif 81 | faster; 82 | solve(); 83 | 84 | } 85 | -------------------------------------------------------------------------------- /đồ thị/canhcau.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #define endl "\n" 3 | using namespace std; 4 | vector check; 5 | vector> a; 6 | void bfs(int n, int x, int y) 7 | { 8 | queue q; 9 | q.push(n); 10 | while (q.size()) 11 | { 12 | int u = q.front(); 13 | q.pop(); 14 | for (auto v : a[u]) 15 | { 16 | if ((u == x && v == y) || (u == y && v == x)) 17 | continue; 18 | if (check[v]) 19 | { 20 | check[v] = 0; 21 | q.push(v); 22 | } 23 | } 24 | } 25 | } 26 | int main() 27 | { 28 | ios_base::sync_with_stdio(0); 29 | cin.tie(0); 30 | int t; 31 | cin >> t; 32 | while (t--) 33 | { 34 | int n, m, stp = 0, s; 35 | cin >> n >> m; 36 | a.clear(); 37 | a.resize(n + 1); 38 | check.clear(); 39 | check.resize(n + 1, 1); 40 | vector> e(m); 41 | for (int i = 0; i < m; i++) 42 | { 43 | cin >> e[i].first >> e[i].second; 44 | a[e[i].first].push_back(e[i].second); 45 | a[e[i].second].push_back(e[i].first); 46 | } 47 | sort(e.begin(), e.end()); 48 | for (int i = 1; i <= n; i++) 49 | { 50 | if (check[i]) 51 | { 52 | stp++; 53 | check[i] = 0; 54 | bfs(i, -1, -1); 55 | } 56 | } 57 | for (int i = 0; i < m; i++) 58 | { 59 | check.clear(); 60 | check.resize(n + 1, 1); 61 | s = 0; 62 | for (int j = 1; j <= n; j++) 63 | { 64 | if (check[j]) 65 | { 66 | s++; 67 | check[j] = 0; 68 | bfs(j, e[i].first, e[i].second); 69 | } 70 | } 71 | if (s > stp) 72 | cout << e[i].first << " " << e[i].second << " "; 73 | } 74 | cout << endl; 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /đồ thị/chuyedscanhsangdanhsachke.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | 4 | #define ll long long 5 | #define pii pair 6 | #define vii vector 7 | #define pb push_back 8 | #define fi first 9 | #define el cout<> a; 12 | #define sz(a) a.size(); 13 | #define out(a) cout<< a; 14 | #define all(x) (x).begin(), (x).end() 15 | #define rep(a) for(int i = 0; i < (a); i++) 16 | #define vll vector 17 | #define vi vector 18 | #define ms(a,n) memset(a,n,sizeof(a)) 19 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 20 | #define FOD(i,b,a) for(int i=b;i>=a;i--) 21 | #define faster ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); 22 | const ll MOD = 1e9 + 7; 23 | // do thi vo huong 24 | vector ke[1001]; 25 | int n, m; 26 | void solve(){ 27 | cin >> n >> m; 28 | FOR(i,0,m-1){ 29 | int x, y; 30 | cin >> x >> y; 31 | ke[x].pb(y); 32 | ke[y].pb(x); 33 | } 34 | FOR(i,1,n){ 35 | sort(all(ke[i])); 36 | cout << i << " " << ": "; 37 | for(int x : ke[i]){ 38 | cout << x << ' '; 39 | } 40 | cout << endl; 41 | } 42 | } 43 | int main() 44 | { 45 | 46 | faster; 47 | solve(); 48 | 49 | } 50 | -------------------------------------------------------------------------------- /đồ thị/danhsachkesangdanhsachcan.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | 4 | #define ll long long 5 | #define pii pair 6 | #define vii vector 7 | #define pb push_back 8 | #define fi first 9 | #define el cout<> a; 12 | #define sz(a) a.size(); 13 | #define out(a) cout<< a; 14 | #define all(x) (x).begin(), (x).end() 15 | #define rep(a) for(int i = 0; i < (a); i++) 16 | #define vll vector 17 | #define vi vector 18 | #define ms(a,n) memset(a,n,sizeof(a)) 19 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 20 | #define FOD(i,b,a) for(int i=b;i>=a;i--) 21 | #define faster ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); 22 | const ll MOD = 1e9 + 7; 23 | 24 | int n, m; 25 | vector canh[1001]; 26 | 27 | void solve(){ 28 | cin >> n; 29 | cin.ignore(); 30 | for (int i = 1; i <= n;i++){ 31 | string s; 32 | getline(cin, s); 33 | stringstream ss(s); 34 | string num; 35 | while(ss>> num){ 36 | if(stoll(num)>i){ 37 | cout << i << ' '<< num << endl; 38 | } 39 | } 40 | } 41 | } 42 | int main() 43 | { 44 | 45 | faster; 46 | solve(); 47 | } 48 | -------------------------------------------------------------------------------- /đồ thị/demsothanhphanlienthong.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #define endl "\n" 3 | using namespace std; 4 | int main() 5 | { 6 | ios_base::sync_with_stdio(0); 7 | cin.tie(0); 8 | int t; 9 | cin >> t; 10 | while (t--) 11 | { 12 | int n, m, x, y, s = 0, k; 13 | cin >> n >> m; 14 | int check[n + 1] = {}; 15 | vector> a(n + 1); 16 | for (int i = 0; i < m; i++) 17 | { 18 | cin >> x >> y; 19 | a[x].push_back(y); 20 | a[y].push_back(x); 21 | } 22 | for (int i = 1; i <= n; i++) 23 | { 24 | if (!check[i]) 25 | { 26 | s++; 27 | check[i] = 1; 28 | stack st; 29 | st.push(i); 30 | while (st.size()) 31 | { 32 | k = st.top(); 33 | st.pop(); 34 | for (auto j : a[k]) 35 | { 36 | if (!check[j]) 37 | { 38 | check[j] = 1; 39 | st.push(j); 40 | } 41 | } 42 | } 43 | } 44 | } 45 | cout << s << endl; 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /đồ thị/dfstrendothicohuong.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | 4 | #define ll long long 5 | #define pii pair 6 | #define vii vector 7 | #define pb push_back 8 | #define fi first 9 | #define el cout<> a; 12 | #define out(a) cout<< a; 13 | #define all(x) (x).begin(), (x).end() 14 | #define rep(a) for(int i = 0; i < (a); i++) 15 | #define vll vector 16 | #define vi vector 17 | #define ms(a,n) memset(a,n,sizeof(a)) 18 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 19 | #define FOD(i,b,a) for(int i=b;i>=a;i--) 20 | #define faster ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); 21 | const ll MOD = 1e9 + 7; 22 | 23 | 24 | 25 | vll ke[1001]; 26 | int used[1001]; 27 | 28 | int n , m , u; 29 | void dfs(int u){ 30 | used[u]=1; 31 | cout<>n>>m>>u; 40 | for(int i=0;i>x>>y; 43 | ke[x].pb(y); 44 | //ke[y].pb(x); 45 | 46 | } 47 | ms(used,0); 48 | for(int i=1;i<=n;i++){ 49 | sort(all(ke[i])); 50 | } 51 | dfs(u); 52 | 53 | } 54 | 55 | 56 | 57 | int main() 58 | { 59 | #ifndef ONLINE_JUDGE 60 | freopen("input.txt", "r", stdin); 61 | freopen("output.txt", "w", stdout); 62 | #endif 63 | faster; 64 | solve(); 65 | 66 | } 67 | -------------------------------------------------------------------------------- /đồ thị/dothilienthongmanh.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Cho đồ thị có hướng G = (V, E) được biểu diễn dưới dạng danh sách cạnh. Hãy kiểm tra đồ thị có liên thông mạnh hay không? Bài này các bạn thử cài đặt bằng 3 cách là : brute force, thuật toán Tarjan, thuật toán Kosaraju. 3 | 4 | Input Format 5 | 6 | Dòng đầu tiên là 2 số n, m, tương ứng với số lượng đỉnh, cạnh của đồ thị. Các đỉnh của đồ thị được đánh số từ 1 tới n. m dòng tiếp theo mỗi dòng chứa đỉnh u, v (u != v) tương ứng với một cạnh của đồ thị. 7 | 8 | Constraints 9 | 10 | 1=<=n<=1000; 1<=m<=n*(n-1)/2; 11 | 12 | Output Format 13 | 14 | In ra 1 nếu đồ thị liên thông mạnh, ngược lại in ra 0. 15 | 16 | Sample Input 0 17 | 18 | 6 14 19 | 3 4 20 | 3 1 21 | 2 5 22 | 2 6 23 | 4 6 24 | 2 3 25 | 5 6 26 | 1 5 27 | 1 2 28 | 3 5 29 | 4 5 30 | 6 3 31 | 4 2 32 | 1 4 33 | Sample Output 0 34 | 35 | 1 36 | 37 | */ 38 | 39 | #include 40 | #define endl "\n" 41 | using namespace std; 42 | int main() 43 | { 44 | ios_base::sync_with_stdio(0); 45 | cin.tie(0); 46 | int t; 47 | cin >> t; 48 | while (t--) 49 | { 50 | int n, m, x, y, ok = 1; 51 | cin >> n >> m; 52 | queue q; 53 | vector check(n + 1, 0); 54 | vector> a(n + 1); 55 | for (int i = 0; i < m; i++) 56 | { 57 | cin >> x >> y; 58 | a[x].push_back(y); 59 | } 60 | q.push(1); 61 | check[1] = 1; 62 | while (q.size()) 63 | { 64 | x = q.front(); 65 | q.pop(); 66 | for (auto y : a[x]) 67 | { 68 | if (check[y]==0) 69 | { 70 | check[y] = 1; 71 | q.push(y); 72 | } 73 | } 74 | } 75 | for (int i = 2; i <= n; i++) 76 | { 77 | if (check[i]==0) 78 | { 79 | ok = 0; 80 | break; 81 | } 82 | } 83 | if (ok) 84 | cout << "YES" << endl; 85 | else 86 | cout << "NO" << endl; 87 | } 88 | } 89 | -------------------------------------------------------------------------------- /đồ thị/dscanhsangdskecohuong.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | 4 | #define ll long long 5 | #define pii pair 6 | #define vii vector 7 | #define pb push_back 8 | #define fi first 9 | #define el cout<> a; 12 | #define sz(a) a.size(); 13 | #define out(a) cout<< a; 14 | #define all(x) (x).begin(), (x).end() 15 | #define rep(a) for(int i = 0; i < (a); i++) 16 | #define vll vector 17 | #define vi vector 18 | #define ms(a,n) memset(a,n,sizeof(a)) 19 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 20 | #define FOD(i,b,a) for(int i=b;i>=a;i--) 21 | #define faster ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); 22 | const ll MOD = 1e9 + 7; 23 | 24 | int n, m; 25 | vll ke[1001]; 26 | 27 | void solve(){ 28 | cin >> n >> m; 29 | for (int i = 0; i < m;i++){ 30 | int x, y; 31 | cin>>x >> y; 32 | ke[x].pb(y); 33 | } 34 | for (int i = 1; i <= n;i++){ 35 | sort(all(ke[i])); 36 | cout << i << ' ' << ": "; 37 | for(int x : ke[i]){ 38 | cout << x << " "; 39 | } 40 | cout << endl; 41 | } 42 | } 43 | int main() 44 | { 45 | 46 | faster; 47 | solve(); 48 | } 49 | -------------------------------------------------------------------------------- /đồ thị/dskesangdscanhcohuong.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | 4 | #define ll long long 5 | #define pii pair 6 | #define vii vector 7 | #define pb push_back 8 | #define fi first 9 | #define el cout<> a; 12 | #define sz(a) a.size(); 13 | #define out(a) cout<< a; 14 | #define all(x) (x).begin(), (x).end() 15 | #define rep(a) for(int i = 0; i < (a); i++) 16 | #define vll vector 17 | #define vi vector 18 | #define ms(a,n) memset(a,n,sizeof(a)) 19 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 20 | #define FOD(i,b,a) for(int i=b;i>=a;i--) 21 | #define faster ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); 22 | const ll MOD = 1e9 + 7; 23 | 24 | int n; 25 | void solve(){ 26 | faster; 27 | //int n; 28 | cin >> n; 29 | cin.ignore(); 30 | 31 | for (int i = 1; i <= n;i++) { 32 | string s; 33 | getline(cin, s); 34 | stringstream ss(s); 35 | string num; 36 | vll a; 37 | while (ss >> num) { 38 | a.push_back(stoll(num)); 39 | } 40 | sort(all(a)); 41 | for(auto x : a) { 42 | cout< 2 | using namespace std; 3 | 4 | #define ll long long 5 | #define pii pair 6 | #define vii vector 7 | #define pb push_back 8 | #define fi first 9 | #define el cout << endl 10 | #define se second 11 | #define in(a) cin >> a; 12 | #define out(a) cout << a; 13 | #define all(x) (x).begin(), (x).end() 14 | #define rep(a) for (int i = 0; i < (a); i++) 15 | #define vll vector 16 | #define vi vector 17 | #define ms(a, n) memset(a, n, sizeof(a)) 18 | #define FOR(i, a, b) for (int i = a; i <= b; i++) 19 | #define FOD(i, b, a) for (int i = b; i >= a; i--) 20 | #define faster \ 21 | ios_base::sync_with_stdio(false); \ 22 | cin.tie(nullptr); \ 23 | cout.tie(nullptr); 24 | const ll MOD = 1e9 + 7; 25 | int n , m ; 26 | ll d[105][105]; 27 | void solve(){ 28 | cin>> n>> m ; 29 | FOR(i,1,n){ 30 | FOR(j,1,n){ 31 | if(i==j){ 32 | d[i][j]=0; 33 | }else { 34 | d[i][j]=1e9; 35 | } 36 | } 37 | } 38 | for(int i=1;i<=m;i++){ 39 | int x, y, z; 40 | cin>> x>> y>> z; 41 | d[x][y]= d[y][x]=z; 42 | } 43 | 44 | 45 | FOR(k,1,n){ 46 | FOR(i,1,n){ 47 | for(int j=1;j<=n;j++){ 48 | d[i][j] = min(d[i][j], d[i][k] + d[k][j]); 49 | } 50 | } 51 | } 52 | int q; 53 | cin>> q; 54 | while(q--){ 55 | int x, y; 56 | cin>> x>> y; 57 | cout<< d[x][y];el; 58 | } 59 | 60 | } 61 | 62 | int main() 63 | { 64 | #ifndef ONLINE_JUDGE 65 | freopen("input.txt", "r", stdin); 66 | freopen("output.txt", "w", stdout); 67 | #endif 68 | faster; 69 | int t = 1; 70 | // cin >> t; 71 | while (t--) 72 | { 73 | solve(); 74 | } 75 | } -------------------------------------------------------------------------------- /đồ thị/kiemtrachutrinhtrendothicohuong.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | 4 | #define ll long long 5 | #define pii pair 6 | #define vii vector 7 | #define pb push_back 8 | #define fi first 9 | #define el cout << endl 10 | #define se second 11 | #define in(a) cin >> a; 12 | #define out(a) cout << a; 13 | #define all(x) (x).begin(), (x).end() 14 | #define rep(a) for (int i = 0; i < (a); i++) 15 | #define vll vector 16 | #define vi vector 17 | #define ms(a, n) memset(a, n, sizeof(a)) 18 | #define FOR(i, a, b) for (int i = a; i <= b; i++) 19 | #define FOD(i, b, a) for (int i = b; i >= a; i--) 20 | #define faster \ 21 | ios_base::sync_with_stdio(false); \ 22 | cin.tie(nullptr); \ 23 | cout.tie(nullptr); 24 | const ll MOD = 1e9 + 7; 25 | int color[1001]; 26 | vll ke[1001]; 27 | int n , m ; 28 | int ok; 29 | void dfs(int i){ 30 | color[i]=1; 31 | for(auto x : ke[i]){ 32 | if(color[x]==0){ 33 | dfs(x); 34 | }else if(color[x]==1){ 35 | ok =1; 36 | } 37 | } 38 | color[i]=2; 39 | } 40 | void solve(){ 41 | ok =0; 42 | cin>>n>>m; 43 | FOR(i,1,1000){ 44 | ke[i].clear(); 45 | } 46 | ms(color,0); 47 | FOR(i,1,m){ 48 | int a, b; 49 | cin>>a>>b; 50 | ke[a].pb(b); 51 | } 52 | FOR(i,1,n){ 53 | sort(all(ke[i])); 54 | } 55 | FOR(i,1,n){ 56 | if(color[i]==0 ){ 57 | dfs(i); 58 | } 59 | } 60 | cout<<(ok==1?"YES":"NO");el; 61 | } 62 | 63 | int main() 64 | { 65 | #ifndef ONLINE_JUDGE 66 | freopen("input.txt", "r", stdin); 67 | freopen("output.txt", "w", stdout); 68 | #endif 69 | faster; 70 | int t = 1; 71 | cin >> t; 72 | while (t--) 73 | { 74 | solve(); 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /đồ thị/kiemtrađuongi.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | 4 | #define ll long long 5 | #define pii pair 6 | #define vii vector 7 | #define pb push_back 8 | #define fi first 9 | #define el cout<> a; 12 | #define out(a) cout<< a; 13 | #define all(x) (x).begin(), (x).end() 14 | #define rep(a) for(int i = 0; i < (a); i++) 15 | #define vll vector 16 | #define vi vector 17 | #define ms(a,n) memset(a,n,sizeof(a)) 18 | #define FOR(i,a,b) for(int i=a;i<=b;i++) 19 | #define FOD(i,b,a) for(int i=b;i>=a;i--) 20 | #define faster ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); 21 | const ll MOD = 1e9 + 7; 22 | 23 | int n , m ; 24 | vll ke[1001]; 25 | int used[1001]; 26 | int tplt[1001]; 27 | int cnt=0; 28 | void bfs(int u ){ 29 | queue q; 30 | q.push(u); 31 | used[u]=1; 32 | while(!q.empty()){ 33 | int top=q.front(); 34 | q.pop(); 35 | tplt[top]=cnt; 36 | for(int x : ke[top]){ 37 | if(!used[x]){ 38 | q.push(x); 39 | used[x]=1; 40 | } 41 | } 42 | } 43 | } 44 | void solve(){ 45 | cin>>n>>m; 46 | for(int i=0;i>x>>y; 49 | ke[x].pb(y); 50 | ke[y].pb(x); 51 | } 52 | ms(used,0); 53 | ms(tplt,0); 54 | for(int i=1;i<=n;i++){ 55 | sort(all(ke[i])); 56 | } 57 | for(int i=1;i<=n;i++){ 58 | if(!used[i]){ 59 | ++cnt; 60 | bfs(i); 61 | } 62 | } 63 | 64 | int t ; 65 | cin>> t; 66 | while(t--){ 67 | int a, b; 68 | cin>> a>> b; 69 | if(tplt[a]==tplt[b]){ 70 | cout<<1; 71 | }else cout<<-1; 72 | cout< 2 | using namespace std; 3 | using ll = long long; 4 | const ll MOD = 1e9+7; 5 | int a[1005][1005]; 6 | vector ke[1005]; 7 | int main() 8 | { 9 | int n; cin >> n; 10 | for(int i = 1; i <= n; i++) 11 | { 12 | for(int j = 1; j <= n; j++) 13 | { 14 | cin >> a[i][j]; 15 | } 16 | } 17 | for(int i = 1; i <= n; i++) 18 | { 19 | for(int j = 1; j <= n; j++) 20 | { 21 | if(i <= j && a[i][j]) cout << i << ' ' << j << ' ' << a[i][j] << '\n'; 22 | } 23 | } 24 | } -------------------------------------------------------------------------------- /đồ thị/ĐƯỜNG ĐI VÀ CHU TRÌNH EULER VỚI ĐỒ THỊ VÔ HƯỚNG.txt: -------------------------------------------------------------------------------- 1 | Cho đồ thị vô hướng liên thông G= được biểu diễn dưới dạng danh sách cạnh. Hãy kiểm tra xem đồ thị có đường đi Euler hay chu trình Euler hay không? 2 | 3 | 4 | Đường đi Euler bắt đầu tại một đỉnh, và kết thúc tại một đỉnh khác. 5 | 6 | Chu trình Euler bắt đầu tại một đỉnh, và kết thúc chu trình tại chính đỉnh đó. 7 | 8 | Input: 9 | 10 | Dòng đầu tiên đưa vào T là số lượng bộ test. 11 | Những dòng tiếp theo đưa vào các bộ test. Mỗi bộ test gồm 2 dòng: dòng đầu tiên đưa vào hai số |V|, |E| tương ứng với số đỉnh, số cạnh của đồ thị; Dòng tiếp theo đưa vào các bộ đôi uÎV, vÎV tương ứng với một cạnh của đồ thị. 12 | T, |V|, |E| thỏa mãn ràng buộc: 1≤T≤100; 1≤|V|≤103; 1≤|E|≤|V|(|V|-1)/2; 13 | Output: 14 | 15 | Đưa ra 1, 2, 0 kết quả mỗi test theo từng dòng tương ứng với đồ thị có đường đi Euler, chu trình Euler và trường hợp không tồn tại. 16 | Ví dụ: 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | Input: 25 | 26 | Output: 27 | 28 | 2 29 | 30 | 6 10 31 | 32 | 1 2 1 3 2 3 2 4 2 5 3 4 3 5 4 5 4 6 5 6 33 | 34 | 6 9 35 | 36 | 1 2 1 3 2 3 2 4 2 5 3 4 3 5 4 5 4 6 37 | 38 | 2 39 | 40 | 1 41 | ========sol-======== 42 | #include 43 | #define endl "\n" 44 | using namespace std; 45 | int main() 46 | { 47 | ios_base::sync_with_stdio(0); 48 | cin.tie(0); 49 | int t; 50 | cin >> t; 51 | while (t--) 52 | { 53 | int n, m, u, v, s = 0; 54 | cin >> n >> m; 55 | vector> a(n + 1); 56 | for (int i = 0; i < m; i++) 57 | { 58 | cin >> u >> v; 59 | a[u].push_back(v); 60 | a[v].push_back(u); 61 | } 62 | for (int i = 1; i <= n; i++) 63 | if (a[i].size() % 2 == 0) 64 | s++; 65 | if (s == n) 66 | cout << 2 << '\n'; 67 | else if (s == n - 2) 68 | cout << 1 << '\n'; 69 | else 70 | cout << 0 << '\n'; 71 | } 72 | } 73 | --------------------------------------------------------------------------------