You are on page 1of 173

Contents

1. SỐ ARMSTRONG............................................................................................................................5
2. GIAI THỪA SỐ LỚN.......................................................................................................................6
3. SỐ HOÀN HẢO.................................................................................................................................7
4. ĐƯỜNG ĐI CÓ TỔNG LỚN NHẤT...............................................................................................8
5. LŨY THỪA DƯ...............................................................................................................................10
6. LIỆT KÊ HOÁN VỊ........................................................................................................................11
7. TỔ HỢP K PHẦN TỬ.....................................................................................................................12
8. BÌNH PHƯƠNG SỐ LỚN..............................................................................................................13
9. GIAI THỪA CÓ N SỐ KHÔNG Ở CUỐI.....................................................................................14
10. DÃY SỐ CẤP CỘNG..................................................................................................................15
11. BÀI TOÁN NGƯỜI ĐI DU LỊCH..............................................................................................16
12. TỔNG VÀ TÍCH //////////..............................................................................................................17
13. ĐẾM CHỮ SỐ//////////..................................................................................................................17
14. SỐ DƯ//////////................................................................................................................................17
15. MÃ CỘT TRONG FILE EXCEL/////////.....................................................................................17
16. MẬT KHẨU HỢP LỆ///////////.....................................................................................................18
17. XÂU MẸ CHUNG NGẮN NHẤT//////////...................................................................................18
18. SỐ LỚN///////////............................................................................................................................18
19. TÍNH 2004^X MOD 29...............................................................................................................18
20. ĐẾM GIAI THỪA.......................................................................................................................19
21. NHẦM SỐ....................................................................................................................................21
22. GẮN DÂY....................................................................................................................................23
23. LŨY THỪA MA TRẬN..............................................................................................................24
24. SỐ ĐẶC BIỆT..............................................................................................................................25
25. TÌM SỐ.........................................................................................................................................27
26. BÀI TOÁN CÁI TÚI...................................................................................................................28
27. SỐ CÁCH ĐẶT QUÂN HẬU.....................................................................................................29
28. ĐẾM SỐ SỐ 0 LIÊN TIẾP CUỐI N!.........................................................................................31
29. CẶP SỐ BẠN BÈ.........................................................................................................................32
30. SỐ CHÍNH PHƯƠNG.................................................................................................................33
31. ĐẾM SỐ CHÍNH PHƯƠNG.......................................................................................................35

1
32. XÂU KÝ TỰ.................................................................................................................................35
34. TẬP CON.....................................................................................................................................36
35. BÀI TOÁN IP..............................................................................................................................38
37. ĐA THỨC TỔNG........................................................................................................................39
38. BIỂU THỨC TỔNG GIAI THỪA.............................................................................................41
39. BIỂU THỨC CĂN – GIAI THỪA.............................................................................................42
40. BIỂU THỨC CĂN – LŨY THỪA..............................................................................................43
41. TỔNG CÁC ƯỚC SỐ.................................................................................................................44
42. ƯỚC SỐ NGUYÊN TỐ...............................................................................................................44
43. ĐỔI HỆ THẬP PHÂN SANG HỆ NHỊ PHÂN.............................................................................45
44. ĐẾM SỐ NGUYÊN TỐ HOÀN TOÀN......................................................................................46
45. SỐ ĐỐI XỨNG............................................................................................................................47
46. HÀM MŨ SỐ LỚN......................................................................................................................48
47. ƯỚC SỐ NGUYÊN.....................................................................................................................50
48. M CHỮ SỐ ĐẦU TRONG LŨY THỪA....................................................................................51
49. TỔNG HAI SỐ LỚN...................................................................................................................52
50. TỔNG CÁC SỐ LẺ.....................................................................................................................53
51. TỔNG DÃY SỐ LIÊN TIẾP.......................................................................................................54
52. ĐẾM SỐ CHỮ SỐ.......................................................................................................................55
53. PHÂN TÍCH SỐ..........................................................................................................................55
54. HOÁN VỊ THẦN KỲ..................................................................................................................58
55. ĐẾM SỐ NGUYÊN TỐ...............................................................................................................59
56. PHÉP CHIA SỐ LỚN (Code 300d)............................................................................................60
57. SỐ ĐỐI XỨNG GẦN NHẤT......................................................................................................60
58. BIẾN ĐỔI DƯƠNG.....................................................................................................................62
59. MÃ ĐI TUẦN...............................................................................................................................63
60. TỔNG LŨY THỪA BẬC N........................................................................................................64
61. NGUYÊN TỐ TỔNG..................................................................................................................66
62. ĐẾM DÃY NHỊ PHÂN................................................................................................................67
63. TÍNH LŨY THỪA A^N (Cdoe hơn 300d).................................................................................68
64. TÍNH LŨY THỪA A^N MODE 10^9+7...................................................................................68
65. TÌM VỊ TRÍ SỐ X TRONG DÃY CHỮ SỐ..................................................................................69
66. TÌM KIẾM TRONG DÃY SỐ......................................................................................................70

2
67. TỔNG ƯỚC SỐ KHÁC NHAU..................................................................................................71
68. DÃY CON LIÊN TIẾP TỔNG LỚN NHẤT.............................................................................72
69. CHUYỂN ĐỔI NHỊ PHÂN SANG THẬP PHÂN.....................................................................73
70. CHUYỂN ĐỔI THẬP PHÂN SANG HEXA.............................................................................74
71. SỐ CÁC BỘ SỐ CÓ TỔNG BẰNG S........................................................................................75
72. ƯỚC LŨY THỪA 2 LỚN NHẤT...............................................................................................76
73. BIẾN ĐỔI SỐ..............................................................................................................................77
74. TÍCH CHỮ SỐ LỚN NHẤT.......................................................................................................78
75. SỐ CÓ HAI CHỮ SỐ A VÀ B....................................................................................................79
76. DÃY CON K PHẦN TỬ CÓ TỔNG BẰNG S...........................................................................81
77. ĐẾM SỐ DÃY CON K PHẦN TỬ CÓ TỔNG NHỎ NHẤT....................................................82
78. LIỆT KÊ CẤC CÁCH PHÂN TÍCH SỐ THÀNH TÍCH CÁC SỐ TỰ NHIÊN KHÁC........84
79. MUA SO – CO – LA....................................................................................................................85
80. TÍNH SỐ DƯ TỔ HỢP CHẬP K CỦA N KHI CHIA CHO M...............................................86
81. DÃY CON ĐƠN ĐIỆU TĂNG DÀI NHẤT...............................................................................87
82. SỐ CODON..................................................................................................................................89
83. SỐ MŨ LỚN NHẤT CỦA ƯỚC SỐ..........................................................................................90
84. TẠO SỐ LỚN NHẤT..................................................................................................................91
85. ĐƯỜNG ĐI LỚN NHẤT.............................................................................................................92
86. SỐ CATALAN THỨ N...............................................................................................................93
87. ĐẾM NHÓM CHỮ SỐ................................................................................................................94
88. PHÂN CHIA DÃY SỐ.................................................................................................................96
89. CHÊNH LỆCH LỚN NHẤT GIỮA 0 VÀ 1 TRONG DÃY NHỊ PHÂN.................................97
90. TÌM THẺ BỊ THIẾU...................................................................................................................98
91. BIỂU DIỄN SỐ 01.......................................................................................................................99
92. BIỂU DIỄN SỐ 02.....................................................................................................................100
93. BIỂU DIỄN SỐ 03.....................................................................................................................101
94. BIỂU DIỄN SỐ THÀNH TỔNG K SỐ FIBONACCI............................................................102
95. BIỂU DIỄN SỐ THÀNH TỔNG CÁC SỐ CHÍNH PHƯƠNG..............................................104
96. BIỂU DIỄN SỐ THÀNH TỔNG CÁC SỐ LŨY THỪA CỦA 2............................................105
97. BIỂU DIỄN SÔ THÀNH TỔNG CÁC CHỮ SỐ CHẴN........................................................106
98. BIỂU DIỄN SỐ THÀNH TỔNG CÁC CHỮ SỐ LẺ..............................................................107
99. BIỂU DIỄN SỐ THÀNH TỔNG CỦA CÁC CHỮ SỐ 1 VÀ 2..............................................109

3
105. SỬA LẠI DẤU NGOẶC...........................................................................................................111
110. KIỂM TRA DÃY NGOẶC ĐÚNG...........................................................................................112
111. DƯ THỪA DẤU NGOẶC.........................................................................................................114
112. BIỂU THỨC HẬU TỐ 1...........................................................................................................114
113. TIỀN TỐ SANG HẬU TỐ........................................................................................................116
114. ĐẾM DÃY NHỊ PHÂN THỎA MÃN ĐIỀU KIỆN.................................................................118
115. QUÂN TƯỢNG.........................................................................................................................119
125. TỔNG ƯỚC NGUYÊN TỐ LỚN NHẤT CỦA CÁC SỐ KHÔNG VƯỢT QUÁ N.............121
126. TÌM SỐ ĐẶC BIỆT LỚN NHẤT.............................................................................................122
127. TÌM SỐ CÓ ƯỚC NGUYÊN TỐ LỚN NHẤT.......................................................................124
128. BỘ N SỐ NGUYÊN TỐ............................................................................................................126
130. NGOẶC HỢP LỆ......................................................................................................................128
134. CHIỀU DÀI TỐI THIỂU CỦA CHUỖI SAU KHI LOẠI BỎ CÁC CHUỖI CON.............130
139. GIAI THỪA XẤU XÍ..................................................................................................................131
145. SỐ LƯỢNG NGUYÊN TỬ.......................................................................................................132
146. GIẢI MÃ CHUỖI Ở CHỈ MỤC NHẤT ĐỊNH........................................................................135
147. LẤY CHỮ CÁI ĐẦU TIÊN KHÔNG TRÙNG LẶP THUỘC CHUỖI................................137
148. TÍNH SỐ LƯỢNG HỌC SINH KHÔNG ĐƯỢC ĂN.............................................................138
149. TÍNH THỜI GIAN CẦN THIẾT ĐỂ MUA VÉ......................................................................140
150. GIÁ CUỐI CÙNG SAU KHI GIẢM GIÁ TRONG CỦA HÀNG..........................................142
151. NHIỆT ĐỘ HÀNG NGÀY........................................................................................................144
152. ĐẾM SỐ LƯỢNG CÁC ARRAY CON BỊ RÀNG BUỘC CỐ ĐỊNH...................................145
153. SỐ LẦN ÍT NHẤT ĐỂ ĐẢO CHUỖI BIT NHẤT ĐỊNH.......................................................147
154. DANH SÁCH SỐ LỚN NHẤT CỦA MỖI LẦN TRƯỢT CỦA SỔ......................................149
155. XÂY DỰNG ARRAY TỪ STACK...........................................................................................151
156. BÓNG CHÀY.............................................................................................................................152
157. CHUỖI ĐỐI XỨNG..................................................................................................................154
158. ĐẢO NGƯỢC CHUỖI TRONG HÀNG ĐỢI.........................................................................156
159. ĐẢO CHỖ K PHẦN TỬ TRONG HÀNG ĐỢI.......................................................................157
160. TÌM SỐ LỚN NHẤT TRONG HÀNG ĐỢI............................................................................158
161. TÌM SỐ NHỎ NHẤT TRONG HÀNG ĐỢI............................................................................160
162. TÌM HỢP CỦA HAI HÀNG ĐỢI............................................................................................161
163. TÌM GIAO CỦA HAI HÀNG ĐỢI..........................................................................................163

4
164. KIỂM TRAI LẠI XEM HAI HÀNG ĐỢI CÓ GIỐNG NHAU HAY KHÔNG....................165
1. SINH XÂU AB...............................................................................................................................167
2. SINH XÂU NHỊ PHÂN N BIT.....................................................................................................168
3. SORTING 4....................................................................................................................................168
4. SINH HOÁN VỊ.............................................................................................................................171
5. SORTING 2....................................................................................................................................172

1. SỐ ARMSTRONG
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int Count(int n){
int cnt=0;
while(n!=0){
cnt++;
n/=10;}
return cnt;
}
ll SUM(ll n){
ll sum = 0;
ll m = n;
while(n!=0){
sum += pow(n%10,Count(m));
n/=10;
}
return sum;
}
int main(){

5
int t;
cin >> t;
while(t--){
ll n;
cin >>n;
if(SUM(n) == n) cout <<1;
else cout <<0;
cout<<'\n';
}
return 0;}
2. GIAI THỪA SỐ LỚN
#include <bits/stdc++.h>
#define ll long long
#define fi first
#define se second
#define f(i,a,b) for(int i=a; i<=b; ++i)
#define fn(i,a,b) for(int i=a; i>=b; --i)
const int MOD=1e9+7;
using namespace std;
string s[100005];
void giaithua(int n){
int a[500005], m=1;
ll r=0,q;
a[0]=1;
for(int i=2;i<=n;i++){
for(int j=0;j<m;j++){
q=r;

6
r=(a[j]*i+r)/10;
a[j]=(a[j]*i+q)%10;
}
while(r>0){
a[m]=r%10;
m++;
r=r/10;
}
for(int p=m-1;p>=0;p--) s[i]+=char('0'+a[p]);
}
}
int t, n;
int main () {
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
giaithua(10000);
cin >> t;
while(t--){
cin >> n;
if(n==0 || n==1) cout<<1<<'\n';
else cout<<s[n]<<'\n';
}
return 0;
}
3. SỐ HOÀN HẢO
#include<bits/stdc++.h>
using namespace std ;
#define int long long

7
const int maxn = 1e7 + 7;
const int mod = 1e9 + 7;
void implement(){
int n ;
cin >> n ;
if(n == 6 || n == 28 || n == 496 || n ==8128 || n == 33550336 || n == 8589869056 || n ==
137438691328)
cout << 1 ;
else cout << 0 ;
}
int32_t main(){
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int t; cin >> t;
while(t--){
implement();
cout << endl;
}
return 0;
}
4. ĐƯỜNG ĐI CÓ TỔNG LỚN NHẤT
#include <bits/stdc++.h>
using namespace std;
const int maxn = 105;
const int INF = 1e18;
int a[maxn][maxn], f[maxn][maxn];
int m, n;

8
void implement() {
cin >> m >> n;
for (int i = 0; i < m; ++i) {
for (int j = 0; j < n; ++j) {
cin >> a[i][j];
}
}
for (int i = 0; i < m; ++i) {
f[i][0] = a[i][0];
}
for (int j = 1; j < n; ++j) {
for (int i = 0; i < m; ++i) {
f[i][j] = a[i][j] + max({(i > 0) ? f[i - 1][j - 1] : -INF, f[i][j - 1], (i < m - 1) ? f[i + 1]
[j - 1] : -INF});
}
}
int res = -INF;
for (int i = 0; i < m; ++i) {
res = max(res, f[i][n - 1]); }
cout << res << endl;
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int t;
cin >> t;

9
while (t--) {
implement();
}
return 0;
}
5. LŨY THỪA DƯ
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int MOD = 1e9 + 7;
ll binaryPow(ll a, ll b, ll MOD) {
ll ans = 1;
a %= MOD;
while (b) {
if (b % 2 == 1) {
ans = (ans * a) % MOD;}
b /= 2;
a = (a * a) % MOD;
}
return ans;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
ll t;
cin >> t;

10
while (t--) {
ll a, b;
cin >> a >> b;
cout << binaryPow(a, b, MOD) << endl;
}
return 0;
}
6. LIỆT KÊ HOÁN VỊ
#include <bits/stdc++.h>
using namespace std;
int n, x[105], k, used[105]={};
void Output(){
for(int i = 1; i <= n; ++i)
cout << x[i] <<(i<n?" ":"\n");}
void Try(int i){
for(int j = 1; j <= n; ++j){
if(used[j] == 0){
used[j] = 1;
x[i] = j;}
else continue;
if(i == n) Output();
if(i < n) Try(i + 1);
used[j] = 0;
}
}
int main(){
ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0);

11
int t; cin >>t;
while(t--){
cin >>n;
Try(1);}
return 0;}
7. TỔ HỢP K PHẦN TỬ
#include <bits/stdc++.h>
#define MAX 50
#define ll long long
using namespace std;
int arr[MAX];
int n, k;
ll gt(int n) {
ll s = 1;
for (int i = 1; i <= n; i++)
s *= i;
return s;}
ll sumKey(int n, int k) {
return gt(n) / (gt(k)*gt(n - k));}
void res() {
cout << "[";
for (int i = 1; i <= k; i++){
cout << arr[i];
if(i < k) cout << " ";
}
cout << "]";
cout << endl;}

12
void key(int i) {
for (int j = arr[i-1] + 1; j <= n-k+i; j++) {
arr[i] = j;
if (i == k) {
res(); }
else{
key(i + 1);
}
}
}
int main() {
int t;
cin >> t;
while(t--) {
cin >> n >> k;
cout << sumKey(n, k) << endl;
key(1); }
return 0;
}
8. BÌNH PHƯƠNG SỐ LỚN
#include <bits/stdc++.h>
#define ll long long
#define fi first
#define se second
#define f(i,a,b) for(int i=a; i<=b; ++i)
#define fn(i,a,b) for(int i=a; i>=b; --i)
const int MOD=1e9+7;

13
using namespace std;
int t, n;
int main(){
ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0);
cin >>t;
while(t--){
cin >> n;
f(i,1,(n-1)/9) cout<<"123456790";
int k=(n-1)%9;
f(i,1,k) cout<<char(48+i);
fn(i,k+1,2) cout<<char(48+i);
f(i,1,(n-1)/9) cout<<"098765432";
cout<<1<<'\n';
}
return 0;}
9. GIAI THỪA CÓ N SỐ KHÔNG Ở CUỐI
#include <bits/stdc++.h>
#define ll long long
#define fi first
#define se second
#define f(i,a,b) for(int i=a; i<=b; ++i)
#define fn(i,a,b) for(int i=a; i>=b; --i)
const int MOD=1e9+7;
using namespace std;
int t;
ll m, n;
ll tinh(ll m){

14
ll ans=0, tmp=5;
while(m>=tmp){
ans+=m/tmp;
tmp*=5;}
return ans;
}
int main(){
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
cin >> t;
while(t--){
cin >> n;
m=4*n-1000;
ll x=0;
while(m<=4*n+1000){
if(tinh(m)>=n){x=m; break;}
m++;}
cout<<x<<'\n'; }
return 0;
}
10. DÃY SỐ CẤP CỘNG
#include <bits/stdc++.h>
#define ll long long
#define fi first
#define se second
#define f(i,a,b) for(int i=a; i<=b; ++i)
#define fn(i,a,b) for(int i=a; i>=b; --i)
const int MOD=1e9+7;

15
using namespace std;
int n;
ll a[1000005];
int main() {
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
int t;
cin >>t;
while(t--){
cin >> n;
f(i,1,n) cin >> a[i];
ll x=a[2]-a[1];
int c=0;
f(i,2,n-1){
if((a[i+1]-a[i])!=x){c=1; break;}
}
if(c==0) cout<<"YES";
else cout<<"NO";
cout <<'\n'; }
return 0;
}
11. BÀI TOÁN NGƯỜI ĐI DU LỊCH
#include<bits/stdc++.h>
using namespace std;
int n , m , ans = INT_MAX ,cmin = INT_MAX;
int c[500][500], check[50], luu[50] ,truoc[500];
void Try(int k){
for(int i=2; i<=n; ++i){

16
if(check[i]==0 && c[truoc[k-1]][i]!=0 ){
check[i] = 1;
luu[k] = luu[k-1] + c[truoc[k-1]][i] ;
truoc[k] = i ;
if(k==(n-1)){
if(c[i][1])ans = min(ans,luu[k]+c[i][1]) ;}
else if(luu[k] + cmin*(n-k) < ans )Try(k+1);
check[i] = 0 ;
}
}
}
int main(){
int k , j ,c0;
truoc[0] = 1;
cin >> n >> m ;
for(int i=1; i<=m; ++i){
cin >> k >> j >> c0 ;
c[k][j] = c0 ;
cmin = min(cmin , c0);
}
Try(1);
cout << ans ;
return 0;
}
12. TỔNG VÀ TÍCH //////////
13. ĐẾM CHỮ SỐ//////////
14. SỐ DƯ//////////
15. MÃ CỘT TRONG FILE EXCEL/////////

17
16. MẬT KHẨU HỢP LỆ///////////
17. XÂU MẸ CHUNG NGẮN NHẤT//////////
18. SỐ LỚN///////////
19. TÍNH 2004^X MOD 29
#include <bits/stdc++.h>
#define ll long long
#define fi first
#define se second
#define f(i,a,b) for(int i=a; i<=b; ++i)
#define fn(i,a,b) for(int i=a; i>=b; --i)
#define VAL 29
using namespace std;
int calc(int x, int p){
int i,t;
x = x % VAL;
p = p % (VAL - 1);
if (p == 0) return 0;
else{
t = 1;
for (i = 0; i < p; i++)
t = (t * x) % VAL;
t--;
while (t % (x - 1) != 0) t += VAL;
i = t / (x - 1);
return i;
}
}
int main(){

18
int t;
cin >>t;
while(t--){
int n, v;
cin >> n;
v = calc(2, 2 * n + 1);
v = (v * calc(3, n + 1)) % VAL;
v = (v * calc(167, n + 1)) % VAL;
cout << v << endl; }
return 0;
}
20. ĐẾM GIAI THỪA
#include<bits/stdc++.h>
using namespace std ;
#define FOR(i,a,b) for(int i = (a),_b=(b); i <= b; i ++)
#define FOD(i,a,b) for(int i =(a),_b=(b); i >= b; i --)
#define REP(i,a) for(int i = 0,_a=(a); i <_a; i ++)
#define F first
#define S second
#define PB push_back
#define MP make_pair
#define int long long
const int maxn = 1e7 + 7;
const int mod = 1e9 + 7;
const double PI = acos(-1.0);
const double e = 2.71828183;
int Dig(int x){

19
if(x <= 3) return 1;
return(int)(1. + floor(log10(x*PI*2)/2 + log10(x/e) * x));
}
void implement(){
int k ; cin >> k;
int left, right, l, r;
l = 0; r = 1000111000; left = r;
while(l <= r){
int mid = (l + r) >> 1;
if(Dig(mid) >= k){
left = mid;
r = mid - 1;
}
else l = mid + 1;
}
l = 0, r = 1000111000, right = l;
while(l <= r){
int mid = (l + r) >> 1;
if(Dig(mid) <= k){
right = mid;
l = mid + 1;
}
else r = mid - 1;
}
if(Dig(left) != k){
cout <<"NO";
}

20
else {
cout << right - left + 1 <<" ";
FOR(i,left,right) cout << i << " ";
}
}
int32_t main(){
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int t; cin >> t;
while(t--){
implement();
cout << endl;
}
return 0;
}
21. NHẦM SỐ
#include <bits/stdc++.h>
#define ll long long
#define fi first
#define se second
#define f(i,a,b) for(int i=a; i<=b; ++i)
#define fn(i,a,b) for(int i=a; i>=b; --i)
const int MOD=1e9+7;
using namespace std;
int main(){
int t;
cin >>t;

21
while(t--){
string a,b;
cin.ignore();
cin>>a>>b;
int c1=0,d1=0,c2=0,d2=0;
for(int i=0;i<a.length();i++){
if(a[i]=='3') a[i]='5';
c1=c1*10+a[i]-48;
}
for(int i=0;i<b.length();i++){
if(b[i]=='3') b[i]='5';
c2=c2*10+b[i]-48;
}
c1+=c2;
for(int i=0;i<a.length();i++){
if(a[i]=='5') a[i]='3';
d1=d1*10+a[i]-48;
}
for(int i=0;i<b.length();i++){
if(b[i]=='5') b[i]='3';
d2=d2*10+b[i]-48;
}
d1+=d2;
cout<<d1<<" "<<c1<<'\n';
}
return 0;
}

22
22. GẮN DÂY
#include <bits/stdc++.h>
#define endl "\n"
using namespace std;
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
int t;
cin >> t;
while (t--){
int n;
cin >> n;
int x, s = 0, mod = 1e9 + 7;
priority_queue<int, vector<int>, greater<int>> q;
for (int i = 0; i < n; i++){
cin >> x;
q.push(x);}
while (q.size() > 1){
int s1 = q.top();
q.pop();
int s2 = q.top();
q.pop();
int k = (s1 + s2) % mod;
s = (s + k) % mod;
q.push(k);
}
cout << s << endl;}}

23
23. LŨY THỪA MA TRẬN
#include <bits/stdc++.h>
#define ll long long
#define fi first
#define se second
#define f(i,a,b) for(int i=a; i<=b; ++i)
#define fn(i,a,b) for(int i=a; i>=b; --i)
const int MOD=1e9+7;
using namespace std;
ll t, n, k, x;
struct matrix{
ll c[15][15];};
matrix operator * (matrix a, matrix b){
matrix res;
for(int i=0; i<n; i++)
for(int j=0; j<n; j++){
res.c[i][j] = 0;
for (int k=0; k<n; k++)
res.c[i][j] = (res.c[i][j]+a.c[i][k]*b.c[k][j])%MOD; }
return res;
}

matrix tinh(matrix a, ll n)
{
if (n==1) return a;
if (n%2!=0) return tinh(a,n-1)*a;
matrix tmp = tinh(a,n/2);

24
return tmp*tmp;}
int main(){
cin >> t;
while(t--){
cin >> n >> k;
matrix a;
f(i,0,n-1) f(j,0,n-1){
cin >> x;
a.c[i][j]=x;
}
a=tinh(a,k);
f(i,0,n-1) {f(j,0,n-1) cout<<a.c[i][j]%MOD<<" "; cout<<'\n';}
}
return 0;
}
24. SỐ ĐẶC BIỆT
#include <bits/stdc++.h>
#define ll long long
#define fi first
#define se second
#define f(i,a,b) for(int i=a; i<=b; ++i)
#define fn(i,a,b) for(int i=a; i>=b; --i)
const int MOD=1e9+7;
using namespace std;
int t, dp[205][205], x, f[205];
int main(){
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);

25
cin >> t;
while(t--){
cin >> x;
f[0]=1;
f(i,1,200) f[i]=(f[i-1]*10)%x;
dp[0][0]=0;
dp[1][0]=8%x, dp[0][1]=6%x;
f(i,2,200) dp[0][i]=(dp[0][i-1]*10+6)%x, dp[i][0]=(dp[i-1][0]*10+8)%x;
f(i,1,200){
f(j,1,200-i){
dp[i][j]=(dp[i][0]*f[j]+dp[0][j])%x;
}
}
int ans1=500, ans2=500;
f(i,0,200){
f(j,0,200-i){
if(dp[i][j]==0 && (i+j)!=0){
if(i+j<ans1+ans2) ans1=i, ans2=j;
}
}
}
if(ans1==500) cout<<-1<<'\n';
else{
f(i,1,ans1) cout<<8;
f(i,1,ans2) cout<<6;
cout<<'\n';
}

26
}
return 0;
}
25. TÌM SỐ
#include<stdio.h>
#include<vector>
using namespace std;
typedef unsigned long long ull;
const ull INF=1e19+1;
ull pr[]={0,2,3,5,7,11,13,17,19,23,29,31};
vector<ull> p[15];
int n,i,j,k;
ull f[15][1111];
int main(void){
for (i=1;i<=11;i=i+1) {
p[i].push_back(1);
p[i].push_back(pr[i]);
while (p[i][p[i].size()-1]>p[i][p[i].size()-2])
{
k=p[i].size()-1;
p[i].push_back(p[i][k]*pr[i]);
}
}
int t;
scanf("%d",&t);
while(t--){
scanf("%d",&n);

27
for (i=1;i<=n;i=i+1)
{
if (i-1>=p[1].size()-1) f[1][i]=INF;
else f[1][i]=p[1][i-1];
}
for (i=2;i<=11;i=i+1)
for (j=1;j<=n;j=j+1)
{
f[i][j]=INF;
for (k=1;k<=j;k=k+1)
if (j%k==0)
if ((k-1<p[i].size()-1) && (f[i-1][j/k]<INF))
if ((f[i-1][j/k]*p[i][k-1])%f[i-1][j/k]==0)
if (f[i][j]>f[i-1][j/k]*p[i][k-1])
f[i][j]=f[i-1][j/k]*p[i][k-1];
}
printf("%llu\n",f[11][n]);
}
}
26. BÀI TOÁN CÁI TÚI
#include <bits/stdc++.h>
#define ll long long
#define fi first
#define se second
#define f(i,a,b) for(int i=a; i<=b; ++i)
#define fn(i,a,b) for(int i=a; i>=b; --i)
const int MOD=1e9+7;

28
using namespace std;
int t, n, w, a[30], c[30], dp[30][30005];
int main() {
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
cin >> t;
while(t--){
cin >> n >> w;
f(i,1,n) cin >> a[i];
f(i,1,n) cin >> c[i];
f(i,1,n){
f(j,1,w){
if(j>=a[i]) dp[i][j]=max(dp[i-1][j],dp[i-1][j-a[i]]+c[i]);
else dp[i][j]=dp[i-1][j];
}
}
cout<<dp[n][w]<<'\n';
}
return 0;
}
27. SỐ CÁCH ĐẶT QUÂN HẬU
#include <bits/stdc++.h>
#define ll long long
#define fi first
#define se second
#define f(i,a,b) for(int i=a; i<=b; ++i)
#define fn(i,a,b) for(int i=a; i>=b; --i)
const int MOD=1e9+7;

29
using namespace std;
int t, n, a[15][15], ans, check[15][15];
void mark(int x, int y, int key){
f(j,1,n) check[x][j]+=key, check[j][y]+=key;
int z=1;
while(x+z<=n && y+z<=n) check[x+z][y+z]+=key, z++;
z=1;
while(x+z<=n && y-z>=1) check[x+z][y-z]+=key, z++;
z=1;
while(x-z>=1 && y+z<=n) check[x-z][y+z]+=key, z++;
z=1;
while(x-z>=1 && y-z>=1) check[x-z][y-z]+=key, z++;}
void Try(int k){
if(k==n+1) ans++;
else{
for(int i=1; i<=n; ++i){
if(check[k][i]==0){
mark(k,i,1);
Try(k+1);
mark(k,i,-1);
}
}
}
}
int main() {
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
cin >> t;

30
while(t--){
cin >> n;
f(i,1,n)f(j,1,n) a[i][j]=0;
ans=0;
Try(1);
cout<<ans<<'\n';
}
return 0;}
28. ĐẾM SỐ SỐ 0 LIÊN TIẾP CUỐI N!
#include<bits/stdc++.h>
using namespace std ;
#define int long long
const int maxn = 1e7 + 7;
const int mod = 1e9 + 7;
void implement(){
int n ;
cin >> n ;
int cnt2 = 0 , cnt5 = 0 ;
while(n > 0){
cnt5 += n/ 5;
n /= 5;
}
cout << cnt5;
}
int32_t main(){
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);

31
int t; cin >> t;
while(t--){
implement();
cout << endl;
}
return 0;
}
29. CẶP SỐ BẠN BÈ
#include <bits/stdc++.h>
#define ll long long
#define fi first
#define se second
#define f(i,a,b) for(int i=a; i<=b; ++i)
#define fn(i,a,b) for(int i=a; i>=b; --i)
const int MOD=1e9+7;
using namespace std;
ll a, b, t, sa, sb;
int main() {
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
cin >> t;
while(t--){
cin >> a >> b;
sa=0, sb=0;
f(i,2,sqrt(a)){
if(a%i==0){
if(i*i!=a){
sa+=i+a/i;

32
}
else sa+=i;
}}
sa++;
f(i,2,sqrt(b)){
if(b%i==0){
if(i*i!=b){
sb+=i+b/i;
}
else sb+=i;
}}
sb++;
if(a==sb && b==sa) cout<<"YES"<<'\n';
else cout<<"NO"<<'\n';
}
return 0;
}
30. SỐ CHÍNH PHƯƠNG
#include <bits/stdc++.h>
#define ll long long
using namespace std;
bool check(ll n){
if(n == 0) return true;
ll x = sqrt(n);
if(x*x == n) return true;
return false;
}

33
bool check1(ll n){
while(n!=0){
ll x = n%10;
if(x!=0 && x != 1 && x!=4 && x!=9) return false;
n/=10;
}
return true;
}
int main (){
int t; cin >>t;
while(t--){
ll n;
cin >>n;
ll low = pow(10,n-1);
ll high = pow(10,n)-1;
for(ll i = low; i <= high; ++i){
if(check(i) && check1(i)){
cout <<i;
break;
}
}
cout <<'\n';
}
return 0;
}

34
31. ĐẾM SỐ CHÍNH PHƯƠNG
#include <bits/stdc++.h>
#define ll long long
#define fi first
#define se second
#define f(i,a,b) for(int i=a; i<=b; ++i)
#define fn(i,a,b) for(int i=a; i>=b; --i)
using namespace std;
int t;
ll l, r;
int main() {
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
cin >> t;
while(t--){
cin >> l >> r;
ll x=sqrt(l), y=sqrt(r);
if(x*x!=l) x++;
cout<<y-x+1<<'\n';
}
return 0;
}
32. XÂU KÝ TỰ
#include<bits/stdc++.h>
using namespace std;
int n , check ;
string sc , s , a , b;
int main(){

35
int t;
cin >> t;
while(t--){
cin >> a >> b >> sc >> a >> b >> s;
sc.pop_back();
sc.pop_back(); sc.erase(sc.begin());
s.pop_back();s.erase(s.begin());
int lnc = sc.size() , ln = s.size() ,ans = 0;
if(lnc==0){cout << 0 << '\n' ; continue ;}
if(ln==0){cout << -1 << '\n' ; continue ;}
for(int i=0; i<=ln - lnc ; i++){
if(s[i]==sc[0]){
check = 0 ;
for(int j = 1 ; j<lnc ; ++j){
if(sc[j]!=s[i+j]){check = 1 ; break;}
}
if(check==0){cout << i << '\n' ; ans = 1 ; break ;}
}
}
if(ans==0)cout << -1 << '\n';
}
return 0;
}
33. XÂU THỜI GIAN
34. TẬP CON
#include <bits/stdc++.h>
#define ll long long

36
#define fi first
#define se second
#define f(i,a,b) for(int i=a; i<=b; ++i)
#define fn(i,a,b) for(int i=a; i>=b; --i)
const int MOD=1e9+7;
using namespace std;
ll t, n, a[100005], b[100005], c;
map<ll,int>cnt;
int main()
{
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
cin >> t;
while(t--){
cin >> n;
f(i,1,n) {cin >> a[i]; cnt[a[i]]=0;}
sort(a+1,a+n+1);
c=0;
f(i,1,n){
cnt[a[i]]++;
if(cnt[a[i]]==1) b[++c]=a[i];
}
ll ans=1;
f(i,1,c) ans=(ans*(cnt[b[i]]+1))%MOD;
cout<<(ans-1+MOD)%MOD<<" ";
c=0;
f(i,1,n) if(a[i]>=0) b[++c]=a[i];
if(c>1){

37
cout<<"["<<b[1]<<", ";
f(i,2,c-1) cout<<b[i]<<", ";
cout<<b[c]<<"]";
cout<<'\n';}
else if(c==1){
cout<<"["<<b[1]<<"]"<<'\n';
}
else{
cout<<"["<<a[n]<<"]"<<'\n';
}
}
return 0;
}
35. BÀI TOÁN IP
#include <bits/stdc++.h>
#define ll long long
#define fi first
#define se second
#define f(i,a,b) for(int i=a; i<=b; ++i)
#define fn(i,a,b) for(int i=a; i>=b; --i)
const int MOD=1e9+7;
using namespace std;
string s;
bool check(int x, int y){
if(y-x+1>3) return 0;
if(s[x]=='0'){
if(y-x+1==1) return 1;

38
return 0;
}
if(y-x+1==1 || y-x+1==2) return 1;
int sum=100*(s[x]-'0')+10*(s[x+1]-'0')+s[y]-'0';
if(0<=sum && sum<=255) return 1;
return 0;
}
int main() {
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
int t;
cin >> t;
while(t--){
cin >> s;
int n=s.length();
if(n<4 || n>12) {cout<<0<<'\n'; continue;}
int ans=0;
for(int i=0; i<n; ++i)
for(int j=i+1; j<n; ++j)
for(int p=j+1; p<n; ++p){
if(check(0,i) && check(i+1,j) && check(j+1,p) && check(p+1,n-1)) ans++;
}
cout<<ans<<'\n';
}
return 0;
}
36. TÍNH GIÁ TRỊ BIỂU THỨC SỐ LỚN
37. ĐA THỨC TỔNG

39
#include<bits/stdc++.h>
using namespace std ;
#define int long long
const int maxn = 1e7 + 7;
const int mod = 1e9 + 7;
void implement(){
int n ,i;
float x , s, t ;
unsigned long long m ;
cin >> n ;
cin >> x ;
s = 0.0;
t = 1.0;
m = 0;
i = 1;
while(i <= n){
t = t * x;
m=m+i;
s += t/m;
i ++;
}
cout << fixed << setprecision(3) << s << endl;
}
int32_t main(){
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int t; cin >> t;

40
while(t--){
implement();
}
return 0;
}
38. BIỂU THỨC TỔNG GIAI THỪA
#include<bits/stdc++.h>
using namespace std;
float x;
int n;
int main(){
int t;
cin >> t;
while(t--){
cin >> n >> x;
float tmp=1, hiep=1, s=0;
for(int i=1; i<=n; ++i){
tmp*=x;
hiep*=i;
s+=tmp/hiep;
}
cout<<fixed<<setprecision(3)<<s<<'\n';
}
return 0;
}

41
39. BIỂU THỨC CĂN – GIAI THỪA
#include<bits/stdc++.h>
using namespace std ;
#define int long long
const int maxn = 1e7 + 7;
const int mod = 1e9 + 7;
void implement(){
int n ,i;
float x , s, t ;
unsigned long long m ;
cin >> n ;
m = 1;
i = 2;
s = 1.0;
while(i <= n){
m=m*i;
++ i ;
t = 1.0/i;
s += m;
s = pow(s,t);
}
cout << fixed << setprecision(3) << s << " " << endl;
}
int32_t main(){
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int t; cin >> t;

42
while(t--){
implement();
}
return 0;
}
40. BIỂU THỨC CĂN – LŨY THỪA
#include<bits/stdc++.h>
using namespace std;
float x;
int n;
float Bp(float n, float k){
float ans = 1;
for(int i = 1; i <= k; ++i) ans*=n;
return ans;
}
int main(){
int t;
cin >> t;
while(t--){
cin >> n >> x;
float tmp=1, s=0;
for(float i=1; i <= n; ++i){
s = sqrt(Bp(x,i)+s);
}
cout<<fixed<<setprecision(3)<<s<<'\n';
}
return 0;

43
}
41. TỔNG CÁC ƯỚC SỐ
#include<bits/stdc++.h>
#define ll unsigned long long
const int MOD=1e9+7;
using namespace std;
int main(){
int t; cin >>t;
while(t--){
int n;
cin >>n;
ll sum=0;
for(int i = 1; i <= sqrt(n); ++i){
if(n%i==0) sum += i,sum+=n/i;
}
int x =sqrt(n);
if(x*x == n) sum -= x;
cout <<sum - n <<'\n';
}
return 0;
}
42. ƯỚC SỐ NGUYÊN TỐ
#include <bits/stdc++.h>
#define ll long long
using namespace std;
int t;
ll n;

44
int main() {
cin >> t;
while(t--){
cin >> n;
int dem=0, uoc=2;
while(n!=1){
if(n%uoc==0) dem++;
while(n%uoc==0) n/=uoc;
uoc++;
if(uoc>sqrt(n)) break;
}
if(n!=1) dem++;
cout<<dem<<'\n';
}
return 0;
}
43. ĐỔI HỆ THẬP PHÂN SANG HỆ NHỊ PHÂN
#include <iostream>
#include <vector>
using namespace std;
string decimalToBinary(long long n) {
if (n == 0) {
return "0";
}
string binary = "";
while (n > 0) {
binary = char('0' + n % 2) + binary;

45
n /= 2;
}
return binary;
}
int main() {
int t;
cin >> t;
for (int i = 0; i < t; i++) {
long long n;
cin >> n;
string binary = decimalToBinary(n);
cout << binary << endl;
}
return 0;
}
44. ĐẾM SỐ NGUYÊN TỐ HOÀN TOÀN
#include <bits/stdc++.h>
using namespace std;
bool check1(int n){
while(n!=0){
int k = n%10;
if(k!=2 && k!=3 && k!=5 && k!=7) return false;
n/=10;
}
return true;
}
int main(){

46
int N = 1e6;
bool check[N + 1];
for (int i = 2; i <= N; i++) {
check[i] = true;
}
check[0] = false;
check[1] = false;
for (int i = 2; i*i <= N; i++) {
if (check[i] == true) {
for (int j = i * i; j <= N; j += i) {
check[j] = false;
}
}
}
int t; cin >>t;
while(t--){
int n, cnt=0;
cin >>n;
for(int i = 1; i <= n; ++i){
if(check[i]== true && check1(i)==true) cnt++;
}
cout <<cnt <<endl;
}
}
45. SỐ ĐỐI XỨNG
#include <bits/stdc++.h>
#define ll long long

47
using namespace std;
int t, k;
int main() {
cin >> t;
while(t--){
cin >> k;
ll ans=9;
int mu=(k-1)/2;
if(k==1 || k==2) ans=9;
else{
while(mu--) ans*=10;
}
cout<<ans<<'\n';
}
return 0;
}
46. HÀM MŨ SỐ LỚN
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const ll MOD = 1e9 + 7;
ll powerLL(ll x, ll n)
{
ll result = 1;
while (n) {
if (n & 1)
result = result * x % MOD;

48
n = n / 2;
x = x * x % MOD;
}
return result;
}
ll powerStrings(string sa, string sb)
{
ll a = 0, b = 0;
for (int i = 0; i < sa.length(); i++)
a = (a * 10 + (sa[i] - '0')) % MOD;
for (int i = 0; i < sb.length(); i++)
b = (b * 10 + (sb[i] - '0')) % (MOD - 1);
return powerLL(a, b);
}
int main()
{
int test;
cin >> test;
while (test--)
{
cin.ignore();
string sa, sb;
cin >> sa >> sb;
cout << powerStrings(sa, sb) << endl;
}
return 0;
}

49
47. ƯỚC SỐ NGUYÊN
#include <bits/stdc++.h>
#define ll long long
using namespace std;
int t;
ll x;
int main() {
cin >> t;
while(t--){
cin >> x;
ll n=x, uoc=2;
bool check=true;
while(n!=1){
int dem=0;
while(n%uoc==0){
dem++;
n/=uoc;
}
if(dem>1) {check=false; break;}
uoc++;
if(uoc>sqrt(n)) break;
}
if(check==false) cout<<"YES"<<'\n';
else cout<<"NO"<<'\n';
}
return 0;
}

50
48. M CHỮ SỐ ĐẦU TRONG LŨY THỪA
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
void findFirstM(ll N, ll K, ll M)
{
ll firstM;
double y = (double)K * log10(N * 1.0);
y = y - (ll)y;
double temp = pow(10.0, y);
firstM = temp * (1LL) * pow(10, M - 1);
cout << firstM << endl;
}
int main(){
int t;
cin >> t;
while(t--){
long long int N;
int K,M;
cin >> N >> K >> M;
if(N==0)
cout << "0";
else
findFirstM(N,K,M);
}
return 0;
}

51
49. TỔNG HAI SỐ LỚN
#include <bits/stdc++.h>
#define endl "\n"
using namespace std;
string ADD(string a,string b){
string s="";
if(a.size()>b.size()) b.insert(0,a.size()-b.size(),'0');
else if(a.size()<b.size()) a.insert(0,b.size()-a.size(),'0');
int tmp=0;
for(int i=a.size()-1;i>=0;i--){
tmp=a[i]+b[i]-96+tmp;
s.insert(0,1,tmp%10+48);
tmp=tmp/10;
}
if(tmp>0) s.insert(0,1,tmp+48);
return s;}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
int t;
cin>>t;
while(t--){
string a,b;
cin>>a>>b;
cout<<ADD(a,b)<<endl;
}
}

52
50. TỔNG CÁC SỐ LẺ
#include <bits/stdc++.h>
#define f(i,x,y) for(int i=x; i<=y; ++i)
#define fn(i,x,y) for(int i=x; i>=y; --i)
#define ll long long
using namespace std;
int main(){
ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int t; cin >>t;
while(t--){
ll a, b;
cin >>a >>b;
ll sum = 0;
if(a % 2 == 0 && b % 2 == 0){
int k = (b - a)/2;
sum = k*(b + a)/2;
}
if(a % 2 == 0 && b % 2 != 0){
int k = (b - a + 1)/2;
sum = k*(b + a + 1)/2;
}
if(a % 2 != 0 && b % 2 != 0){
int k = (b - a + 2)/2;
sum = k*(b + a )/2;
}
if(a % 2 != 0 && b % 2 == 0){
int k = (b - a + 1)/2;

53
sum = k*(b + a - 1)/2;
}
cout <<sum <<endl;
}
return 0;
}
51. TỔNG DÃY SỐ LIÊN TIẾP
#include <bits/stdc++.h>
#define ll long long
#define fi first
#define se second
#define f(i,a,b) for(int i=a; i<=b; ++i)
#define fn(i,a,b) for(int i=a; i>=b; --i)
using namespace std;
int t;
ll l, r;
int main() {
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
cin >> t;
while(t--){
cin >> l >> r;
ll ssh=r-l+1;
cout<<(l+r)*ssh/2<<'\n';
}
return 0;
}

54
52. ĐẾM SỐ CHỮ SỐ
#include<bits/stdc++.h>
using namespace std ;
#define int long long
const int maxn = 1e7 + 7;
const int mod = 1e9 + 7;
void implement(){
string n ;
cin >> n ;
int res = n.length();
if(!isdigit(n[0])) -- res;
cout << res ;
}
int32_t main(){
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int t; cin >> t;
while(t--){
implement();
cout << endl;
}
return 0;
}
53. PHÂN TÍCH SỐ
#include<bits/stdc++.h>
using namespace std ;
#define int long long

55
const int maxn = 1e7 + 7;
const int mod = 1e9 + 7;
bool isPrime(int n) {
if (n <= 1) return false;
if (n <= 3) return true;
if (n % 2 == 0 || n % 3 == 0) return false;
for (int i = 5; i * i <= n; i += 6) {
if (n % i == 0 || n % (i + 2) == 0) return false;
}
return true;
}
void implement(){
int n ;
cin >> n ;
int cnt = 0 ;
if(isPrime(n)){
cout << 1;
cout << endl << n << " " << 1;
return ;
}
map<int,int>mp;
if (n % 2 == 0) ++ cnt ;
while(n % 2 == 0){
++ mp[2];
n/= 2;
}
for(int i = 3 ; i <= sqrt(n); i += 2){

56
if(n % i == 0) ++ cnt ;
while(n % i == 0){
mp[i] ++ ;
n /= i ;
}
}
if(n != 1 ) {
++ cnt ;
mp[n] ++ ;
}
cout << cnt ;
for(auto x : mp){
cout << endl << x.first << " " << x.second ;
}
}
int32_t main(){
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int t; cin >> t;
while(t--){
implement();
cout << endl;
}
return 0;
}

57
54. HOÁN VỊ THẦN KỲ
#include<bits/stdc++.h>
using namespace std;
void kDifference(int n, int k){
if(k==0) {
for(int i=1; i<=n; ++i)
cout<<i<<" ";
cout<<endl;}
else if(n % (2*k) != 0) {
cout<<-1<<endl;
} else {
for(int i=0; i<n; ++i){
if((i/k) % 2 == 0)
cout<<i+k+1<<" ";
else
cout<<i-k+1<<" ";
}
cout<<endl;
}}
int main(){
int t,n,k;
cin>>t;
while(t--) {
cin>>n>>k;
kDifference(n, k); }
return 0;
}

58
55. ĐẾM SỐ NGUYÊN TỐ
#include <bits/stdc++.h>
#define ll long long
#define fi first
#define se second
#define f(i,a,b) for(int i=a; i<=b; ++i)
#define fn(i,a,b) for(int i=a; i>=b; --i)
using namespace std;
int t, l, r, check[1000005], dem[1000005];
int main() {
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
check[1]=1;
for(int i=2; i<=1000000; ++i){
if(check[i]==0)
for(int j=i*2; j<=1000000; j+=i){
check[j]=1;}
}
for(int i=1; i<=1000000; ++i){
if(check[i]==0) dem[i]=dem[i-1]+1;
else dem[i]=dem[i-1];
}
cin >> t;
while(t--){
cin >> l >> r;
cout << dem[r]-dem[l-1] <<'\n';
}
return 0;}

59
56. PHÉP CHIA SỐ LỚN (Code 300d)
57. SỐ ĐỐI XỨNG GẦN NHẤT
#include<bits/stdc++.h>
using namespace std ;
#define int long long
const int maxn = 1e7 + 7;
const int mod = 1e9 + 7;
int check(int n){
string s = to_string(n);
int len = s.length();
for(int i = 0 ; i < len/2; ++ i){
if(s[i] != s[len - i - 1])
return 0;
}
return 1;
}
void implement(){
int n ;
cin >> n ;
if(check(n)){
cout << n ;
return ; }
if(n < 10)
cout << n - 1 << " " << n + 1 << endl;
else {
int nho = n - 1 ;
int lon = n + 1;

60
while(!check(nho) && !check(lon)){
-- nho;
++ lon;
}
if(check(nho) && check(lon)){
cout << nho << " " << lon ;
}
else if(check(nho)){
cout << nho ;
}
else {
cout << lon ;
}
}
}
int32_t main(){
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int t; cin >> t;
while(t--){
implement();
cout << endl;
}
return 0;
}

61
58. BIẾN ĐỔI DƯƠNG
#include <bits/stdc++.h>
#define ll long long
#define fi first
#define se second
#define f(i,a,b) for(int i=a; i<=b; ++i)
#define fn(i,a,b) for(int i=a; i>=b; --i)
using namespace std;
int t, n, a[100005];
int main() {
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
cin >> t;
while(t--){
cin >> n;
int s0=0, sa=0, sd=0;
f(i,1,n) {
cin >> a[i];
if(a[i]==0) s0++;
if(a[i]>0) sd++;
if(a[i]<0) sa++;
}
if(s0!=0) {cout<<-1<<'\n'; continue;}
cout<<min(sa,sd)<<'\n';
}
return 0;
}

62
59. MÃ ĐI TUẦN
#include <bits/stdc++.h>
#define ll long long
#define fi first
#define se second
#define f(i,a,b) for(int i=a; i<=b; ++i)
#define fn(i,a,b) for(int i=a; i>=b; --i)
const int MOD=1e9+7;
using namespace std;
int t, n, k, x, y, visited[20][20];
int l[]={-2,-2,-1,-1,1,1,2,2};
int r[]={-1,1,-2,2,-2,2,-1,1};
bool check(int x, int y, int n){
if(1<=x && x<=n && 1<=y && y<=n) return true;
return false;
}
void Try(int a, int b, int step){
if(step==k+1) return;
visited[a][b]=1;
f(i,0,7){
if(check(a+l[i],b+r[i],n)==true){
Try(a+l[i],b+r[i],step+1);
}
}
}
int main () {
cin >> t;

63
while(t--){
cin >> n >> k >> x >> y;
f(i,1,n) f(j,1,n) visited[i][j]=0;
Try(x,y,0);
int ans=0;
f(i,1,n) f(j,1,n) if(visited[i][j]==1) ans++;
cout<<ans<<'\n';
}
return 0;
}
60. TỔNG LŨY THỪA BẬC N
#include <bits/stdc++.h>
#define ll long long
#define fi first
#define se second
#define f(i,a,b) for(int i=a; i<=b; ++i)
#define fn(i,a,b) for(int i=a; i>=b; --i)
const int MOD=1e9+7;
using namespace std;
int t, m, n, x[15][105], sl[15], dp[15][35][1005];
int mu(int a, int b){
int ans=1;
f(i,1,b) ans*=a;
return ans;
}
int main() {
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);

64
cin >> t;
f(i,2,10){
f(j,1,100){
if(mu(j,i)>1000) {sl[i]=j-1; break;}
else x[i][j]=mu(j,i);
}
}
f(u,2,10) dp[u][1][x[u][1]]=1;
f(u,2,10){
f(i,1,sl[u]) dp[u][i][0]=1;
}
f(u,2,10){
f(i,2,sl[u]){
f(j,1,1000){
if(j>=x[u][i]) dp[u][i][j]=dp[u][i-1][j]+dp[u][i-1][j-x[u][i]];
else dp[u][i][j]=dp[u][i-1][j];
}
}
}
while(t--){
cin >> m >> n;
cout<<dp[n][sl[n]][m]<<'\n';
}
return 0;
}

65
61. NGUYÊN TỐ TỔNG
#include <bits/stdc++.h>
#define ll long long
#define fi first
#define se second
#define f(i,a,b) for(int i=a; i<=b; ++i)
#define fn(i,a,b) for(int i=a; i>=b; --i)
const int MOD=1e9+7;
using namespace std;
int t;
ll n;
bool check(ll n){
if(n==0 || n==1) return 0;
if(n==2 || n==3) return 1;
if(n%2==0 || n%3==0) return 0;
for(int i=3; i<=sqrt(n); i+=2) if(n%i==0) return 0;
return 1;
}
int main() {
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
cin >> t;
while(t--){
cin >> n;
for(ll i=n; i<=10*n; ++i) if(i%2!=0) if(check(i-2)==1 && check(i)==1) {cout<<i<<'\n';
break;}
}
return 0;

66
}
62. ĐẾM DÃY NHỊ PHÂN
#include <bits/stdc++.h>
typedef unsigned long long ull;
using namespace std;
ull change (string s, int n){
ull sum = 0;
for (int i = 0; i < n; i++){
if (s[i] == '1')
sum |= 1 << (n - 1 - i); }
return sum;
}
ull print (string a, string b , int n){
ull aa = change (a, n);
ull bb = change (b, n);
if (aa == bb)
return 0;
return (aa > bb) ? (aa - bb - 1) : (bb - aa -1);
}
int main (){
int t; cin >> t;
while (t--){
int n;
string x, y;
cin >> n >> x >> y;
cout << print (x , y, n) << endl;}
return 0; }

67
63. TÍNH LŨY THỪA A^N (Cdoe hơn 300d)
64. TÍNH LŨY THỪA A^N MODE 10^9+7
#include <bits/stdc++.h>
#define ll long long
#define fi first
#define se second
#define f(i,a,b) for(int i=a; i<=b; ++i)
#define fn(i,a,b) for(int i=a; i>=b; --i)
const int MOD=1e9+7;
using namespace std;
int t; ll a, n;
ll tinh(ll a, ll n){
if(n==0) return 1;
if(n%2==0){
ll tmp=tinh(a,n/2);
return (tmp*tmp)%MOD; }
else{
ll tmp=tinh(a,n/2);
return ((tmp*tmp)%MOD*a)%MOD; }
}
int main() {
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
cin >> t;
while(t--){
cin >> a >> n;
cout<<tinh(a,n)<<'\n'; }
return 0;}

68
65. TÌM VỊ TRÍ SỐ X TRONG DÃY CHỮ SỐ
#include <bits/stdc++.h>
#define ll long long
#define fi first
#define se second
#define f(i,a,b) for(int i=a; i<=b; ++i)
#define fn(i,a,b) for(int i=a; i>=b; --i)
const int MOD=1e9+7;
using namespace std;
int n, m, a[100005], b[100005];
int binarySearch(int x){
int l=1, r=n;
while(l<=r){
int mid=(r+l)/2;
if(a[mid]==x && a[mid-1]<x) return mid;
if(a[mid]>=x) r=mid-1;
else l=mid+1; }
return 0;
}
int main() {
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
cin >> n >> m;
f(i,1,n) cin >> a[i];
f(i,1,m) cin >> b[i];
f(i,1,m){
cout << binarySearch(b[i])<<" "; }
return 0; }

69
66. TÌM KIẾM TRONG DÃY SỐ
#include <bits/stdc++.h>
#define ll long long
#define fi first
#define se second
#define f(i,a,b) for(int i=a; i<=b; ++i)
#define fn(i,a,b) for(int i=a; i>=b; --i)
const int MOD=1e9+7;
using namespace std;
int n, m, b[100005];
pair<int,int>a[100005];
int binarySearch(int x){
int l=1, r=n;
while(l<=r){
int mid=(r+l)/2;
if(a[mid].fi==x && a[mid-1].fi<x) return mid;
if(a[mid].fi>=x) r=mid-1;
else l=mid+1;
}
return 0;
}
int main() {
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
cin >> n >> m;
f(i,1,n) cin >> a[i].fi, a[i].se=i;
sort(a+1,a+n+1);
f(i,1,m) cin >> b[i];

70
f(i,1,m){
int x=binarySearch(b[i]);
cout<<a[x].se<<" ";
}
return 0;
}
67. TỔNG ƯỚC SỐ KHÁC NHAU
#include <bits/stdc++.h>
#define ll long long
#define fi first
#define se second
#define f(i,a,b) for(int i=a; i<=b; ++i)
#define fn(i,a,b) for(int i=a; i>=b; --i)
const int MOD=1e9+7;
using namespace std;
ll n, m, t;
int main() {
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
cin >> t;
while(t--){
cin >> n >> m;
ll ans=0, x=sqrt(n), y;
if(x*x==n){
if(m%x!=0) ans+=x;
x--;
}
f(i,1,x){

71
if(n%i==0){
if(m%i!=0) ans+=i;
y=n/i;
if(m%y!=0) ans+=y;
}
}
cout<<ans<<'\n';
}
return 0;
}
68. DÃY CON LIÊN TIẾP TỔNG LỚN NHẤT
#include <bits/stdc++.h>
#define ll long long
#define fi first
#define se second
#define f(i,a,b) for(int i=a; i<=b; ++i)
#define fn(i,a,b) for(int i=a; i>=b; --i)
const int MOD=1e9+7;
using namespace std;
ll n, a[1000005], ans, sum;
int main() {
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
int t;
cin >> t;
while(t--){
cin >> n;
f(i,1,n) cin >> a[i];

72
ans=-INT_MAX, sum=0;
f(i,1,n){
sum+=a[i];
if(sum>ans) ans=sum;
if(sum<0) sum=0;
}
cout<<ans<<'\n';
}
return 0;
}
69. CHUYỂN ĐỔI NHỊ PHÂN SANG THẬP PHÂN
#include <bits/stdc++.h>
#define ll unsigned long long
#define fi first
#define se second
#define f(i,a,b) for(int i=a; i<=b; ++i)
#define fn(i,a,b) for(int i=a; i>=b; --i)
using namespace std;
int t;
string s;
int main() {
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
cin >> t;
while(t--){
cin >> s;
ll ans=0, tmp=1;
for(int i=s.length()-1; i>=0; --i){

73
if(s[i]=='1'){
ans+=tmp;
}
tmp=tmp<<1;
}
cout<<ans<<'\n';
}
return 0;
}
70. CHUYỂN ĐỔI THẬP PHÂN SANG HEXA
#include <bits/stdc++.h>
#define ll unsigned long long
#define fi first
#define se second
#define f(i,a,b) for(int i=a; i<=b; ++i)
#define fn(i,a,b) for(int i=a; i>=b; --i)
const int MOD=1e9+7;
using namespace std;
ll n;
int t;
stack<ll>st;
int main() {
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
cin >> t;
while(t--){
cin >> n;
if(n==0) {cout<<0<<'\n'; continue;}

74
while(n!=0){
ll x=n%16;
st.push(x);
n/=16;
}
while(!st.empty()){
if(st.top()<10) cout<<st.top();
else cout<<char(st.top()+'A'-10);
st.pop();
}
cout<<'\n';
}
return 0;
}

71. SỐ CÁC BỘ SỐ CÓ TỔNG BẰNG S


#include <bits/stdc++.h>
using namespace std;
int result(int k, int s){
int count = 0;
if(s == 3*k)
return 1;
for(int i = 0; i <= k; i ++){
int mn = min(k, s-i);
for(int j = 0; j <= mn; j ++){
int n = s - i - j;
if(n <= k) count ++;

75
}
}
return count;
}
int main()
{
int test;
cin >> test;
while(test--){
int k, s;
cin >> k >> s;
cout << result(k, s) << endl;}
return 0;
}
72. ƯỚC LŨY THỪA 2 LỚN NHẤT
#include <bits/stdc++.h>
#define ll long long
#define fi first
#define se second
#define f(i,a,b) for(int i=a; i<=b; ++i)
#define fn(i,a,b) for(int i=a; i>=b; --i)
const int MOD=1e9+7;
using namespace std;
int t;
ll n, ans, tmp;
int main() {
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);

76
cin >>t;
while(t--){
cin >> n;
tmp=2; ans=0;
while(n/tmp!=0){
ans+=n/tmp;
tmp*=2;
}
cout<<ans<<'\n';
}
return 0;}
73. BIẾN ĐỔI SỐ
#include <bits/stdc++.h>
#define ll long long
#define fi first
#define se second
#define f(i,a,b) for(int i=a; i<=b; ++i)
#define fn(i,a,b) for(int i=a; i>=b; --i)
const int MOD=1e9+7;
using namespace std;
ll n;
ll tinh(ll n){
if(n<=1) return n;
ll x=sqrt(n);
ll a=n%2+tinh(n/2), b=n%3+tinh(n/3), c=n-x*x+tinh(x);
return 1+min(a,min(b,c));
}

77
int main() {
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
int t;
cin >> t;
while(t--){
cin >> n;
cout<<tinh(n)<<'\n';
}
return 0;}
74. TÍCH CHỮ SỐ LỚN NHẤT
#include <bits/stdc++.h>
#define ll long long
#define fi first
#define se second
#define f(i,a,b) for(int i=a; i<=b; ++i)
#define fn(i,a,b) for(int i=a; i>=b; --i)
const int MOD=1e9+7;
using namespace std;
ll n, cs, a, m, key[100005], mx, t, gt, ans, test[100005];
ll tinh(ll x){
ll ans=1;
while(x) ans*=(x%10), x/=10;
return ans;
}
int main() {
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
f(i,1,1e3){

78
if(tinh(i)>mx) mx=tinh(i), gt=i;
key[i]=gt;
}
cin >> t;
while(t--){
cin >> n;
if(n<1000) {cout<<tinh(key[n])<<'\n'; continue;}
m=n, cs=0, ans=1;
while(m) cs++, m/=10;
a=n;
f(i,1,cs-3) a/=10;
m=a;
f(i,1,cs-3) m=m*10+9;
if(m==n) m=key[a];
else m=key[a-1];
f(i,1,cs-3) m=m*10+9;
cout<<tinh(m)<<'\n';
}
return 0;}
75. SỐ CÓ HAI CHỮ SỐ A VÀ B
#include <bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;
#define MAX 1000000000000000001
ull Recursive (ull result, short x, int xcount, short y, int ycount, ull n, int sochuso){
if (xcount + ycount > sochuso + 2 || result > MAX){
return MAX;

79
}
if (xcount == ycount && result >= n){
return result;
}
return min(Recursive(result * 10 + x, x, xcount + 1, y, ycount, n, sochuso),
Recursive(result * 10 + y, x, xcount, y, ycount + 1, n ,sochuso));
}
ull findNumber (ull n, short x, short y){
int sochuso = floor(log10(n)) + 1; //Số chữ số của n
ull result = 0; // Sô cần tìm
int xcount = 0; // Số chữ số của X
int ycount = 0; // Số chữ số của Y
if (x == y){
while (result < n){
result = result * 10 + x; }
return result;}
return Recursive(result, x, xcount, y, ycount, n, sochuso);
}
int main (){
int t; cin >> t;
while (t--){
ull n;
cin >> n;
short x, y;
cin >> x >> y;
cout << findNumber(n ,x ,y) << endl; }
return 0; }

80
76. DÃY CON K PHẦN TỬ CÓ TỔNG BẰNG S
#include<bits/stdc++.h>
using namespace std ;
#define int long long
const int maxn = 1e7 + 7;
const int mod = 1e9 + 7;
int cnt(int n , int k , int s, vector<int>&a){
vector<vector<vector<int>>> dp(n + 1, vector<vector<int>>(k + 1,
vector<int>(s+1,0)));
for(int i = 0 ; i <= n ; ++i){
dp[i][0][0] = 1;
}
for(int i = 1 ; i <= n; ++i){
for(int j = 1; j <= k; ++j){
for(int t = 0; t <= s; t ++){
dp[i][j][t] = dp[i-1][j][t];
if(t >= a[i-1]){
dp[i][j][t] += dp[i-1][j-1][t-a[i-1]];
}
}
}
}
return dp[n][k][s];
}
void implement(){
int n, k, s;
cin >> n >> k >> s;

81
vector<int>a(n);
for(int i = 0 ; i < n ; ++i){
cin >> a[i];
}
cout << cnt(n,k,s,a);
}
int32_t main(){
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int t; cin >> t;
while(t--){
implement();
cout << endl;
}
return 0;
}
77. ĐẾM SỐ DÃY CON K PHẦN TỬ CÓ TỔNG NHỎ NHẤT
#include<bits/stdc++.h>
using namespace std ;
#define int long long
const int maxn = 1e7 + 7;
const int mod = 1e9 + 7;
void implement(){
int N, K;
cin >> N >> K;
vector<int> a(N+1);
for (int i = 1; i <= N; i++) { cin >> a[i]; }

82
vector<vector<vector<int>>> dp(N + 1, vector<vector<int>>(K + 1, vector<int>(N*25
+ 1, 0)));
dp[0][0][0] = 1;
for (int i = 1; i <= N; i++) {
for (int j = 0; j <= K; j++) {
for (int s = 0; s <= N * 25; s++) {
dp[i][j][s] = dp[i - 1][j][s];
if (j >= 1 && s >= a[i]) {
dp[i][j][s] += dp[i - 1][j - 1][s - a[i]];
}
}
}
}
for (int s = 0; s <= N * 25; s++) {
if (dp[N][K][s] > 0) {
cout << dp[N][K][s] << endl;
break;
}
}
}
int32_t main(){
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int t; cin >> t;
while(t--){
implement(); }
return 0; }

83
78. LIỆT KÊ CẤC CÁCH PHÂN TÍCH SỐ THÀNH TÍCH CÁC SỐ TỰ NHIÊN
KHÁC
#include <bits/stdc++.h>
using namespace std;
vector <vector<int> > ketqua;
void deQuy(int i, int s, int n, vector <int> x){
if (i > n || s > n)
return;
if (s==n){
ketqua.push_back(x);
return;
}
for (int k = i; k < n; k++){
if (s * k > n)
return;
if (n%k==0){
x.push_back(k);
deQuy(k, s*k, n, x);
x.pop_back();
}
}
}
void phanTich (int n){
vector <int> x;
x.clear();
deQuy(2, 1, n , x);
}

84
int main (){
int t;
cin >> t;
while (t--){
int n;
cin >> n;
ketqua.clear();
phanTich(n);
cout << ketqua.size() << endl;
for (int i = 0; i < ketqua.size(); i++){
for (int j = 0; j < ketqua[i].size(); j++){
cout << ketqua[i][j] << " ";
}
cout << endl;
}
}
return 0;
}
79. MUA SO – CO – LA
#include <bits/stdc++.h>
#define ll long long
#define fi first
#define se second
#define f(i,a,b) for(int i=a; i<=b; ++i)
#define fn(i,a,b) for(int i=a; i>=b; --i)
const int MOD=1e9+7;
using namespace std;

85
ll t, x, y, m;
int main() {
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
cin >> t;
while(t--){
cin >> x >> y >> m;
ll ans=m/x;
ll vo=ans;
while(vo>=y){
ll doi=vo/y;
ans+=doi;
vo-=doi*y;
vo+=doi;
}
cout<<ans<<'\n';
}
return 0;
}
80. TÍNH SỐ DƯ TỔ HỢP CHẬP K CỦA N KHI CHIA CHO M
#include <bits/stdc++.h>
using namespace std;
int nCrModp(int n, int k, int m)
{
if (k > n - k)
k = n - k;
int C[k + 1];
memset(C, 0, sizeof(C));

86
C[0] = 1;
for (int i = 1; i <= n; i++) {
for (int j = min(i, k); j > 0; j--)
// nCj = (n-1)Cj + (n-1)C(j-1);
C[j] = (C[j] + C[j - 1]) % m;
}
return C[k];
}
int main()
{
int t;
cin >> t;
while (t--){
int n, k, m;
cin >> n >> k >> m;
cout << nCrModp(n, k, m) << endl;
}
return 0;
}
81. DÃY CON ĐƠN ĐIỆU TĂNG DÀI NHẤT
#include <bits/stdc++.h>
#define ll long long
#define fi first
#define se second
#define f(i,a,b) for(int i=a; i<=b; ++i)
#define fn(i,a,b) for(int i=a; i>=b; --i)
const int MOD=1e9+7;

87
using namespace std;
int main()
{
int t;
cin >>t;
while(t--){
int n;
cin >>n;
int f[n+1], a[n+1];
f(i,1,n) cin >>a[i];
f[1] = 1;
int res = 1;
f(i,2,n) {
int l = 1, r = res, j = 0;
while (l <= r) {
int m = (l+r)/2;
if (a[i] > a[f[m]]) {
j = m;
l = m+1;
} else r = m-1;
}
if (j == res) f[++res] = i;
if (a[i] < a[f[j+1]]) f[j+1] = i;
}
cout << res << endl;
}
return 0;}

88
82. SỐ CODON
#include <bits/stdc++.h>
#define ll long long
#define fi first
#define se second
#define f(i,a,b) for(int i=a; i<=b; ++i)
#define fn(i,a,b) for(int i=a; i>=b; --i)
const int MOD=1e9+7;
using namespace std;
int main(){
int t; cin >>t;
while(t--){
int n;
cin >>n;
int a[n+1];
map<int,int> dem;
f(i,1,n) cin >>a[i],dem[a[i]]++;
int cnt=0;
f(i,1,n){
if(dem[a[i]] == 1) cnt++,dem[a[i]]=0;
}
cout <<cnt <<endl;
}
return 0;
}

89
83. SỐ MŨ LỚN NHẤT CỦA ƯỚC SỐ
#include <bits/stdc++.h>
using namespace std;
long long findPowerPrime (long long fact, long long p){
long long res = 0;
while (fact > 0){
res += fact / p;
fact /= p;
}
return res;
}
long long findPowerComposite(long long fact, long long n)
{
long long res = INT_MAX;
for (int i = 2; i <= sqrt(n); i++) {
long long count = 0;
while (n % i == 0) {
count++;
n = n / i;
}
if (count > 0) {
long long curr_pow = findPowerPrime(fact, i) / count;
res = min(res, curr_pow);
}
}
if (n >= 2) {
long long curr_pow = findPowerPrime(fact, n);

90
res = min(res, curr_pow);
}
return res;
}
int main (){
int t;
cin >> t;
while (t--){
long long fact, n;
cin >> fact >> n;
cout << findPowerComposite(fact, n) << endl;
}
return 0;
}
84. TẠO SỐ LỚN NHẤT
#include <bits/stdc++.h>
#define ll long long
#define fi first
#define se second
#define f(i,a,b) for(int i=a; i<=b; ++i)
#define fn(i,a,b) for(int i=a; i>=b; --i)
const int MOD=1e9+7;
using namespace std;
int t, n, a[100005];
bool compare(int b, int c){
stack<int>x,y;
while(b!=0) x.push(b%10), b/=10;

91
while(c!=0) y.push(c%10), c/=10;
while(!x.empty() && !y.empty()){
if(x.top()>y.top()) return 1;
if(x.top()<y.top()) return 0;
x.pop(), y.pop();
}
if(!x.empty()) return 1;
if(!y.empty()) return 0;
return 1;
}
int main() {
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
cin >>t;
while(t--){
cin >> n;
f(i,1,n) cin >> a[i];
sort(a+1,a+n+1,compare);
f(i,1,n) cout<<a[i];
cout<<'\n';
}
return 0;
85. ĐƯỜNG ĐI LỚN NHẤT
#include <bits/stdc++.h>
#define ll long long
#define fi first
#define se second
#define f(i,a,b) for(int i=a; i<=b; ++i)

92
#define fn(i,a,b) for(int i=a; i>=b; --i)
const int MOD=1e9+7;
using namespace std;
int tc, m, n, a[1005][1005], dp[1005][1005];
int main(){
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
cin >> tc;
while(tc--){
cin >> n >> m;
f(i,1,n) f(j,1,m) cin >> a[i][j];
f(i,1,m) dp[1][i]=a[1][i];
f(i,1,n) dp[i][0]=-1, dp[i][m+1]=-1;
f(i,2,n) f(j,1,m) dp[i][j]=max(dp[i-1][j-1],max(dp[i-1][j],dp[i-1][j+1]))+a[i][j];
int ans=0;
f(i,1,m) ans=max(ans,dp[n][i]);
cout<<ans<<'\n';
}
return 0;}
86. SỐ CATALAN THỨ N
#include <bits/stdc++.h>
#define ll long long
#define fi first
#define se second
#define f(i,a,b) for(int i=a; i<=b; ++i)
#define fn(i,a,b) for(int i=a; i>=b; --i)
const int MOD=1e9+7;
using namespace std;

93
ll c[32], n, t;
int main() {
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
cin >> t;
c[0]=1, c[1]=1;
for(int i=1; i<=30; ++i){
for(int j=0; j<=i; ++j){
c[i+1]+=c[j]*c[i-j];
}
}
while(t--){
cin >> n;
cout<<c[n]<<'\n';
}
return 0;
}
87. ĐẾM NHÓM CHỮ SỐ
#include <bits/stdc++.h>
#define MAX 40
using namespace std;
int D[MAX][10 * MAX];
int demNhom (int curr_pos, int curr_sum, int N, char * num){
if (curr_pos == N)
return 1;
if (D[curr_pos][curr_sum] != -1)
return D[curr_pos][curr_sum];
D[curr_pos][curr_sum] = 0;

94
int sum = 0;
int temp = 0;
for (int i = curr_pos; i < N; i++){
sum += (num[i] - 48);
if (sum >= curr_sum)
temp += demNhom(i+1, sum, N, num);
}
D[curr_pos][curr_sum] = temp;
return temp;
}
int main (){
int t;
cin >> t;
while (t--){
int N;
cin >> N;
char num[MAX + 1];
for (int i = 0; i < N; i++){
cin >> num[i];
}
num[N] = '\0'; //ki tu ket thuc xau
memset(D, -1, sizeof(D));
cout << demNhom(0, 0, N, num) << endl;
}
return 0;
}

95
88. PHÂN CHIA DÃY SỐ
#include<bits/stdc++.h>
using namespace std;
int n , a[100];
map<int,int>dp;
long long sum,sum2,ans;
int main(){
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
int t ;
cin >> t;
while(t--){
cin >> n;
sum=0;ans=INT_MAX;
for(int i=1; i<=n; ++i)cin >> a[i],sum+=a[i];
sum2 = sum/2;
for(int i=1; i<=sum2; ++i)dp[i]=0;
dp[0]=1;
for(int i=1; i<=n; ++i){
for(int j=sum2; j>=a[i]; --j){
if(dp[j-a[i]]==1)dp[j]=1; }
}
for(int i=0; i<=sum2; ++i){
if(dp[i]==1)ans=min(ans,abs(sum-2*i)); }
cout << ans;
cout << '\n';
}
return 0;}

96
89. CHÊNH LỆCH LỚN NHẤT GIỮA 0 VÀ 1 TRONG DÃY NHỊ PHÂN
#include <bits/stdc++.h>
#define MAX 100
using namespace std;
bool tat_ca_bit_1(string s, int n){
int co = 0;
for (int i = 0; i < s.size(); i++)
co += (s[i] == '1');
return (co == n);
}
int tim_do_dai(int arr[], string s, int n, int ind, int st, int dp[][3]){
if (ind >= n)
return 0;
if (dp[ind][st] != -1)
return dp[ind][st];
if (st == 0)
return dp[ind][st] = max(arr[ind] +
tim_do_dai(arr, s, n, ind + 1, 1, dp),
tim_do_dai(arr, s, n, ind + 1, 0, dp));
else
return dp[ind][st] = max(arr[ind] +
tim_do_dai(arr, s, n, ind + 1, 1, dp), 0);
}
int maxLen(string s, int n){
if (tat_ca_bit_1(s, n))
return -1;
int arr[MAX] = { 0 };

97
for (int i = 0; i < n; i++)
arr[i] = (s[i] == '0' ? 1 : -1);
int dp[MAX][3];
memset(dp, -1, sizeof dp);
return tim_do_dai(arr, s, n, 0, 0, dp);
}
int main(){
int t;
cin >> t;
while(t--){
string s;
cin >> s;
int n = s.size();
cout << maxLen(s, n) << endl;
}
return 0;
}
90. TÌM THẺ BỊ THIẾU
#include <bits/stdc++.h>
#define ll unsigned long long
#define fi first
#define se second
#define f(i,a,b) for(int i=a; i<=b; ++i)
#define fn(i,a,b) for(int i=a; i>=b; --i)
const int MOD=1e9+7;
using namespace std;
int main(){

98
int t;
cin >>t;
while(t--){
int n, l, a;
ll sum=0;
cin >>n >>l;
f(i,1,n-1) cin >>a, sum += a;
ll ans = l*n + pow(n,2)/2 - n/2;
ans-=sum;
cout <<ans<<'\n';
}
return 0;}
91. BIỂU DIỄN SỐ 01
#include <bits/stdc++.h>
#define ll unsigned long long
#define fi first
#define se second
#define f(i,a,b) for(int i=a; i<=b; ++i)
#define fn(i,a,b) for(int i=a; i>=b; --i)
const int MOD=1e9+7;
using namespace std;
ll a[1000005];
ll solve(ll n){
memset(a, 0, sizeof(a));
a[0] = 1;
f(i, 1, n)
f(j, i, n)

99
a[j] = (a[j] + a[j - i]) % MOD;
return (a[n] % MOD) - 1;
}
int main(){
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
int t;
cin >> t;
while(t--){
ll n;
cin >>n;
cout <<solve(n)<<'\n';
}
return 0;}
92. BIỂU DIỄN SỐ 02
#include <bits/stdc++.h>
#define ll long long
#define fi first
#define se second
#define f(i,a,b) for(int i=a; i<=b; ++i)
#define fn(i,a,b) for(int i=a; i>=b; --i)
const int MOD=1e9+7;
using namespace std;
ll solve(ll n, ll k){
ll dp[k+1][n+1];
f(i,0,n) dp[1][i] = 1;
ll sum = 0;
f(i,2,k){

100
f(j,0,n){
sum = 0;
f(x,0,j)
sum += dp[i - 1][x];
dp[i][j] = sum;
}
}
return dp[k][n];
}
int main(){
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
int t;
cin >> t;
while(t--){
ll n, k;
cin >>n >>k;
cout <<solve(n, k)<<'\n';
}
return 0;}
93. BIỂU DIỄN SỐ 03
#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll sbd(int n, int k){
if (n < k) return 0;
if (k == 1) return 1;
ll cnt = n - 1;

101
for (int i = 2; i <= k - 1; ++i){
cnt *= n - i;
cnt /= i;
}
return cnt;
}
int main (){
int t;
cin >> t;
while (t--){
int n, k;
cin >> n >> k;
cout << sbd(n, k) << endl;}
return 0;}
94. BIỂU DIỄN SỐ THÀNH TỔNG K SỐ FIBONACCI
#include <bits/stdc++.h>
using namespace std;
int fib[43] = { 0 };
void fibonacci()
{
fib[0] = 1;
fib[1] = 2;
for (int i = 2; i < 43; i++)
fib[i] = fib[i - 1] + fib[i - 2];
}
int rec(int x, int y, int last)
{

102
if (y == 0) {
if (x == 0)
return 1;
return 0;
}
int sum = 0;
for (int i = last; i >= 0 and fib[i] * y >= x; i--) {
if (fib[i] > x)
continue;
sum += rec(x - fib[i], y - 1, i);
}
return sum;
}
int main(){
int t;
cin >> t;
while (t--){
fibonacci();
int n, k;
cin >> n >> k;
cout << rec(n, k, 42) << endl;
}
return 0;
}

103
95. BIỂU DIỄN SỐ THÀNH TỔNG CÁC SỐ CHÍNH PHƯƠNG
#include <bits/stdc++.h>
#define ll long long
#define fi first
#define se second
#define f(i,a,b) for(int i=a; i<=b; ++i)
#define fn(i,a,b) for(int i=a; i>=b; --i)
const int MOD=1e9+7;
using namespace std;
int t, n, mx;
int dem(int n, int mx){
if(n==0 || mx==1) return 1;
if(n>=mx*mx) return dem(n-mx*mx,mx)+dem(n,mx-1);
else return dem(n,mx-1);
}
int main(){
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
cin >> t;
while(t--){
cin >> n;
mx=sqrt(n);
cout<<dem(n,mx)<<'\n';
}
return 0;
}

104
96. BIỂU DIỄN SỐ THÀNH TỔNG CÁC SỐ LŨY THỪA CỦA 2
#include <bits/stdc++.h>
#define ll long long
#define fi first
#define se second
#define f(i,a,b) for(int i=a; i<=b; ++i)
#define fn(i,a,b) for(int i=a; i>=b; --i)
const int MOD=1e9+7;
using namespace std;
int t, n, mx;
int dem(int n, int mx){
if(n==0 || mx==0) return 1;
if(n>=pow(2,mx)) return dem(n-pow(2,mx),mx)+dem(n,mx-1);
else return dem(n,mx-1);
}
int main(){
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
cin >> t;
while(t--){
cin >> n;
mx=log2(n);
cout<<dem(n,mx)<<'\n';
}
return 0;
}

105
97. BIỂU DIỄN SÔ THÀNH TỔNG CÁC CHỮ SỐ CHẴN
#include <bits/stdc++.h>
#define ll long long
#define fi first
#define se second
#define f(i,a,b) for(int i=a; i<=b; ++i)
#define fn(i,a,b) for(int i=a; i>=b; --i)
const int MOD=1e9+7;
using namespace std;
ll tinh(int n){
if(n==0) return 1;
if(n%2) return (2*tinh(n-1))%MOD;
ll tmp=tinh(n/2);
return (tmp*tmp)%MOD;
}
int main(){
int t;
cin >> t;
while(t--){
long long n;
cin >> n;
if(n%2) cout<<-1<<'\n';
else{
if(n==2) cout<<1<<'\n';
else cout<<tinh((n-2)/2)<<'\n';
}
} return 0;}

106
98. BIỂU DIỄN SỐ THÀNH TỔNG CÁC CHỮ SỐ LẺ
#include <bits/stdc++.h>
#define ll long long
#define fi first
#define se second
#define f(i,a,b) for(int i=a; i<=b; ++i)
#define fn(i,a,b) for(int i=a; i>=b; --i)
const int MOD=1e9+7;
using namespace std;
struct matrix{
long long c[2][2];
matrix(){
c[0][0]=0;
c[0][1]=1;
c[1][0]=1;
c[1][1]=1;
}
};
matrix operator * (matrix a, matrix b)
{
matrix res;
for (int i=0; i<=1; i++)
for (int j=0; j<=1; j++)
{
res.c[i][j] = 0;
for (int k=0; k<=1; k++)
res.c[i][j] = (res.c[i][j]+a.c[i][k]*b.c[k][j])%MOD;

107
}
return res;
}
matrix tinh(matrix a, long long n)
{
if (n==1) return a;
if (n%2!=0) return tinh(a,n-1)*a;
matrix tmp = tinh(a,n/2);
return tmp*tmp;
}
int main()
{
int t;
cin >> t;
while(t--){
long long n;
cin >> n;
matrix a;
a=tinh(a,n);
cout << a.c[0][1]<<'\n';
}
return 0;
}

108
99. BIỂU DIỄN SỐ THÀNH TỔNG CỦA CÁC CHỮ SỐ 1 VÀ 2
#include <bits/stdc++.h>
#define ll long long
#define fi first
#define se second
#define f(i,a,b) for(int i=a; i<=b; ++i)
#define fn(i,a,b) for(int i=a; i>=b; --i)
const int MOD=1e9+7;
using namespace std;
struct matrix{
long long c[2][2];
matrix(){
c[0][0]=0;
c[0][1]=1;
c[1][0]=1;
c[1][1]=1;
}
};
matrix operator * (matrix a, matrix b)
{
matrix res;
for (int i=0; i<=1; i++)
for (int j=0; j<=1; j++)
{
res.c[i][j] = 0;
for (int k=0; k<=1; k++)
res.c[i][j] = (res.c[i][j]+a.c[i][k]*b.c[k][j])%MOD;

109
}
return res;
}
matrix tinh(matrix a, long long n)
{
if (n==1) return a;
if (n%2!=0) return tinh(a,n-1)*a;
matrix tmp = tinh(a,n/2);
return tmp*tmp;
}
int main()
{
int t;
cin >> t;
while(t--){
long long n;
cin >> n;
matrix a;
a=tinh(a,n+1);
cout << a.c[0][1]<<'\n';
}
return 0;
}
100. TÌM SỐ THỨ N KHÔNG THUỘC DÃY FIBONACCI
101. TỔNG CÁC SỐ FIBONACCI CHẴN
102. SỐ PHI FIBONACCI KẾ TIẾP
103. BIỂU DIỄN SỐ N DƯỚI DẠNG TỔNG CỦA 2 SỐ FIBONACCI
104. BIỂU DIỄN SỐ N DƯỚI DẠNG TỔNG CỦA CÁC SỐ FIBONACCI

110
105. SỬA LẠI DẤU NGOẶC
#include <bits/stdc++.h>
#define ll long long
#define fi first
#define se second
#define f(i,a,b) for(int i=a; i<=b; ++i)
#define fn(i,a,b) for(int i=a; i>=b; --i)
const int MOD=1e9+7;
using namespace std;
int tc, z, ans;
string s;
int main(){
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
cin >> tc;
while(tc--){
cin >> s;
ans=0, z=0;
f(i,0,s.length()-1){
if(s[i]=='(') z++;
else{
if(z==0) ans++, z++;
else z--; }
}
ans+=z/2;
cout<<ans<<'\n';
}
return 0;}

111
106. KHOẢNG CÁCH HOÁN VỊ
107. DÃY CHỮ SỐ ĐẦU TIÊN CỦA LŨY THỪA
108. XÂU TỪ ĐIỂN DÀI NHẤT
109. BIỂU DIỄN GIAI THỪA
110. KIỂM TRA DÃY NGOẶC ĐÚNG
#include <bits/stdc++.h>
#define endl "\n"
using namespace std;
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
int t;
cin >> t;
while (t--){
int ok = 1;
string s;
cin >> s;
stack<char> st;
for (int i = 0; i < s.size(); i++) {
if (s[i] == '(' || s[i] == '[' || s[i] == '{')
st.push(s[i]);
else if (s[i] == ')') {
if (st.size() && st.top() == '(')
st.pop();
else{
ok = 0;
break;}
}

112
else if (s[i] == ']'){
if (st.size() && st.top() == '[')
st.pop();
else{
ok = 0;
break;
}
}
else{
if (st.size() && st.top() == '{')
st.pop();
else{
ok = 0;
break;}
}
}
if (st.size())
ok = 0;
if (ok == 1)
cout << "YES" << endl;
else
cout << "NO" << endl;
}
}

113
111. DƯ THỪA DẤU NGOẶC
112. BIỂU THỨC HẬU TỐ 1
#include<bits/stdc++.h>
using namespace std;
int priority(char x){
if(x=='(' || x==')') return 1;
if(x=='+' || x=='-') return 2;
if(x=='*'|| x=='/') return 3;
if(x=='^') return 4;
}
int tt(char x){
if(x=='+' || x=='-'|| x=='*' || x=='/' || x=='^') return 1;
return 0;
}
int th(char x){
if(x>=97 && x<=122) return 1;
return 0;
}
void solve(string s){
stack<char> a;
vector<char> b;
for(int i=0;i<s.length();i++){
int x=s[i];
if(x=='(') a.push(x);
if(x==')'){
char y=a.top();
while(y!='('){

114
b.push_back(y);
a.pop();
y=a.top();
}
a.pop();
}
if(th(x)) b.push_back(x);
if(tt(x)){
if(!a.empty()){
char y=a.top();
while(priority(y)>=priority(x)){
b.push_back(y);
a.pop();
if(a.empty()) break;
y=a.top();
}
}
a.push(x);
}
}
while(!a.empty()){
char x=a.top();
b.push_back(x);
a.pop();
}
for(int i=0;i<b.size();i++){
cout<<b[i];

115
}
cout<<endl;
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t;
cin>>t;
string s;
while(t--){
cin>>s;
solve(s);
}
}
113. TIỀN TỐ SANG HẬU TỐ
#include <bits/stdc++.h>
#define faster() ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
#define ll long long
#define fi first
#define se second
#define f(i,a,b) for(int i=a; i<=b; ++i)
#define fn(i,a,b) for(int i=a; i>=b; --i)
const int MOD=1e9+7;
using namespace std;
void solve(){
string s;

116
getline(cin, s);
stack<string> st;
fn(i, s.length() - 1, 0) {
if (s[i] == '+' || s[i] == '-' || s[i] == '*' || s[i] == '/'){
string tmp1 = st.top();
st.pop();
string tmp2 = st.top();
st.pop();
string tmp = tmp1 + tmp2 + s[i];
st.push(tmp);
}
else {
string tmp = "";
tmp += s[i];
st.push(tmp);
}
}
cout << st.top() << endl;
}
int main(){
faster();
int t;
cin >>t;
cin.ignore();
while(t--){
solve();
}

117
}

114. ĐẾM DÃY NHỊ PHÂN THỎA MÃN ĐIỀU KIỆN


#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
int n,k;
int c[34][34];
int digit,d[34];
void getC(){
memset(c,0,sizeof(c));
for (int i = 0; i <= 32; i++) c[0][i] = 1;
for (int j = 1; j <= 32; j++)
for (int i = 1; i <= 32; i++) c[i][j] = c[i - 1][j - 1] + c[i][j - 1];
};
ll rec(int pos,int p){
if (p < 0) return 0;
if (!pos) return (p == 0) ? 1 : 0;
if (d[pos] == 0) return (rec(pos - 1,p - 1));
else{
ll tmp = rec(pos - 1,p);
if (p) tmp += c[p - 1][pos - 1];
return tmp;
};
};
ll calc(int x){
ll ret = 0;

118
for (int i = 2; i < digit; i++) ret += c[x][i - 1];
ret += rec(digit - 1,x);
return ret;
};
ll solve(){
if (k > 31) return 0;
if (!n) return (k == 1) ? 1 : 0;
digit = 0; int tmp = n;
while (tmp){
d[++digit] = tmp % 2; tmp /= 2;
};
ll ret = calc(k); if (k == 1) ret++;
return ret;
};
int main(){
int t;
cin >>t;
while(t--){
getC();
while (cin >> n >> k) cout << solve() << endl;}
};
115. QUÂN TƯỢNG
#include<bits/stdc++.h>
using namespace std ;
#define int long long
const int maxn = 1e7 + 7;
const int mod = 1e9 + 7;

119
void implement(){
int n ;
cin >> n ;
if(n == 1){
cout << 1 ;
return ;
}
cout << 2*(n-1);
}
int32_t main(){
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int t; cin >> t;
while(t--){
implement();
cout << endl;
}
return 0;
}
116. N QUÂN HẬU 001
117. LŨY THỪA
118. LOẠI SỐ
119. HIỆU 2 SỐ LỚN THEO PHẦN BÙ 10
120. HIỆU 2 SỐ LỚN THEO PHẦN BÙ 9
121. DÃY CON CÓ ĐỘ DÀI LỚN NHẤT SAO CHO CÁC PHẦN TỬ
LIỀN KỀ TRONG DÃY CON CÓ NHÂN TỬ CHUNG
122. DÃY CON DÀI LỚN NHẤT SAO CHO CÁC PHẦN TỬ LIỀN KỀ
CÓ ÍT NHẤT MỘT CHỮ SỐ CHUNG
123. TÌM CÁCH BIỂU DIỄN CỦA N THÀNH TỔNG CỦA HAU SỐ TỰ
NHIÊN LIÊN TIẾP TRỞ LÊN

120
124. ƯỚC NGUYÊN TỐ LỚN NHẤT
125. TỔNG ƯỚC NGUYÊN TỐ LỚN NHẤT CỦA CÁC SỐ KHÔNG
VƯỢT QUÁ N
#include<bits/stdc++.h>
using namespace std ;
#define int long long
const int maxn = 1e7 + 7;
const int mod = 1e9 + 7;
int n ;
int prime[maxn];
void sang(){
for(int i = 0; i <= n ; ++i){
prime[i] = 0 ;
}
for(int i = 2 ; i <= n ; ++i){
if(prime[i] == 0){
for(int j = i; j <= n ; j += i){
prime[j] = i;
}
}
}
}
void implement(){
cin >> n ;
sang();
int sum = 0 ;
if(n == 1) cout << sum;

121
else{
for(int i = 2 ; i <= n ; ++i){
sum += prime[i];
}
cout << sum ;
}
}
int32_t main(){
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int t; cin >> t;
while(t--){
implement();
cout << endl;
}
return 0;
}
126. TÌM SỐ ĐẶC BIỆT LỚN NHẤT
#include<bits/stdc++.h>
using namespace std ;
#define int long long
const int maxn = 1e7 + 7;
const int mod = 1e9 + 7;
int slove(int n){
int maxpri = - 1;
while(n % 2 == 0){
maxpri = 2 ;

122
n /= 2;
}
for(int i = 3; i <= sqrt(n); i += 2){
while(n % i == 0){
maxpri = i ;
n = n/ i;
}
}
if(n > 2){
maxpri = n;
}
return maxpri;
}
bool check(int n){
int tmp = slove(n);
return tmp > sqrt(n);
}
int checkprime(int n){
for(int i = n; i >= 1; --i){
if(check(i)){
return i ;
}
}
return -1;
}
void implement(){
int n ;

123
cin >> n ;
cout << checkprime(n);
}
int32_t main(){
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int t; cin >> t;
while(t--){
implement();
cout << endl;
}
return 0;
}
127. TÌM SỐ CÓ ƯỚC NGUYÊN TỐ LỚN NHẤT
#include<bits/stdc++.h>
using namespace std ;
#define int long long
const int maxn = 1e7 + 7;
const int mod = 1e9 + 7;
int snt(int n){
if(n == 1 || n == 0) return 0;
if(n % 2 == 0) return 0;
if(n % 3 == 0) return 0;
for(int i = 5 ; i*i <= n ; ++i){
if(n%i == 0) return 0;
if(n%(i+2) == 0) return 0;
}

124
return 1 ;}
int check(int n){
int ans = 0 ;
if (n == 1 || n == 0) return 0;
while(n % 2 == 0) ans = 2, n/=2;
while(n % 3 == 0) ans = 3, n/=3;
for(int i = 5 ; i * i <= n ; i += 6){
while(n % i == 0) ans = i, n/= i;
while(n % (i+2) == 0) ans = i + 2, n/= (i+2);
}
if(n > 4) ans = n ;
return n;
}
void implement(){
int l,r;
cin >> l >> r ;
for(int i = r; i >= l; --i){
if(snt(i)){
cout << i ;
return ;
}
}
set<int>st;
for(int i = r; i >= l; --i){
st.insert(check(i));
}
if(!st.empty()){

125
cout << *st.rbegin();
}
}
int32_t main(){
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int t; cin >> t;
while(t--){
implement();
cout << endl;
}
return 0;
}
128. BỘ N SỐ NGUYÊN TỐ
#include<bits/stdc++.h>
using namespace std;
#define int long long
int p, n, s, a[20], snt[505], c, check[505], z;
bool checknt(int n){
if(n <= 1) return 0;
for(int i = 2 ;i <= sqrt(n); ++i)
if(n % i == 0) return 0;
return 1;
}
void print(){
z = 1;
for(int i = 1; i <= n; ++i) cout << snt[a[i]] << " ";

126
cout << '\n';
}
void Try(int k, int sum){
if(k == n + 1){
if(sum == s) print();
}
else {
for(int i = a[k-1] + 1; i <= c; ++i){
if(check[i] == 0){
if(sum + snt[i] <= s){
check[i] = 1;
a[k] = i;
Try(k+1,sum+snt[i]);
check[i] = 0;
}
else break;
}
}
}
}
void implement(){
cin >> p >> n >> s;
for(int i = p + 1; i <= s; ++i)
if(checknt(i)) snt[++c] = i;
z = 0;
Try(1, 0);
if(z == 0) cout << -1;

127
}
int32_t main(){
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int t = 1;
while(t--){
implement();
cout << endl;
}
return 0;
}
129. BIỂU DIỄN SỐ THÀNH TỔNG K SỐ NGUYÊN TỐ PHÂN BIỆT
130. NGOẶC HỢP LỆ
#include <iostream>
#include <string>
#include <stack>
bool isValidParentheses(std::string s) {
std::stack<char> st;
for (char c : s) {
if (c == '(' || c == '[' || c == '{') {
st.push(c);
} else {
if (st.empty()) {
return false;
}
char open = st.top();
st.pop();

128
if (c == ')' && open != '(') {
return false;
} else if (c == ']' && open != '[') {
return false;
} else if (c == '}' && open != '{') {
return false;
}
}
}
return st.empty();
}
int main() {
int t;
std::cin >> t;
std::cin.ignore(); // Đọc ký tự xuống dòng sau số lượng test case
for (int i = 0; i < t; i++) {
std::string s;
std::getline(std::cin, s);
bool result = isValidParentheses(s);
std::cout << result << std::endl;
}
return 0;
}
131. XÓA DẤU NGOẶC ĐƠN NGOÀI CÙNG
132. SO SÁNH CHUỖI SAU KHI XÓA
133. BIẾN CHUỖI TRỞ NÊN TUYỆT VỜI

129
134. CHIỀU DÀI TỐI THIỂU CỦA CHUỖI SAU KHI LOẠI BỎ CÁC
CHUỖI CON
#include <iostream>
#include <string>
int min_length_after_removal(std::string s) {
int length = s.length();
bool removed = true;
while (removed) {
removed = false;
for (int i = 0; i < length - 1; i++) {
if ((s[i] == 'A' && s[i + 1] == 'B') || (s[i] == 'C' && s[i + 1] == 'D')) {
s.erase(i, 2);
length -= 2;
removed = true; }
}
}
return length;
}
int main() {
int t; std::cin >> t;
for (int i = 0; i < t; i++) {
std::string s;
std::cin >> s;
int result = min_length_after_removal(s);
std::cout << result << std::endl;}
return 0;}

130
135. LOẠI BỎ NGÔI SAO KHỎI CHUỖI
136. LOẠI BỎ TRÙNG LẶP TRÊN CHUỖI
137. ĐẾM SỐ LẦN CẦN THÊM ÍT NHẤT ĐỂ CHUỖI TRỞ NÊN HỢP
LỆ
138. GIẢI MÃ CHUỖI
139. GIAI THỪA XẤU XÍ
#include <iostream>
#include <stack>
int clumsy(int n) {
std::stack<int> s;
s.push(n);
n--;
int index = 0;
while (n > 0) {
if (index % 4 == 0) {
s.top() *= n;
} else if (index % 4 == 1) {
s.top() /= n;
} else if (index % 4 == 2) {
s.push(n);
} else {
s.push(-n);
}
n--;
index++;
}
int result = 0;
while (!s.empty()) {

131
result += s.top();
s.pop();
}
return result;
}
int main() {
int t;
std::cin >> t;
for (int i = 0; i < t; i++) {
int n;
std::cin >> n;
int result = clumsy(n);
std::cout << result << std::endl;
}
return 0;
}
140. ĐẢO NGƯỢC CHUỖI GIỮA CÁC DẤU NGOẶC
141. XÂY DỰNG SỐ NHỎ NHẤT TỪ CHUỖI DI
142. ĐƠN GIẢN HÓA ĐƯỜNG DẪN
143. KIỂM TRA TỪ CÓ HỢP LỆ SAU KHI THAY THẾ TỪ
144. LOẠI K SỐ
145. SỐ LƯỢNG NGUYÊN TỬ
#include<bits/stdc++.h>
using namespace std ;
#define int long long
map<string,int>parse(string s){
map<string,int>cnts;
stack<map<string,int>>st;

132
st.push({});
for(int i = 0 ; i < s.size();){
if(s[i] == '('){
st.push({});
++i;
}
else if(s[i] == ')'){
auto top = st.top();
st.pop();
++i;
int start = i;
while(i < s.size() && isdigit(s[i])){
++i;
}
int multi = i > start ? stoi(s.substr(start,i-start)) : 1;
for(const auto& pair : top){
st.top()[pair.first] += pair.second * multi;
}
}
else{
int start = i;
++i;
while(i < s.size() && islower(s[i])){
++i;
}
string name = s.substr(start,i-start);
start = i ;

133
while(i < s.size() && isdigit(s[i])){
++i;
}
int count = i > start ? stoi(s.substr(start,i-start)) : 1;
st.top()[name] += count;
}
}
return st.top();
}
string cnt(const string& formula){
map<string,int>counts = parse(formula);
string res;
for(const auto& pair : counts){
res += pair.first;
if(pair.second > 1){
res += to_string(pair.second);
}
}
return res;
}
void implement(){
string s;
cin >> s;
cout<< cnt(s);
}
int32_t main(){
ios_base::sync_with_stdio(0);

134
cin.tie(0); cout.tie(0);
int t; cin >> t;
while(t--){
implement();
cout << endl;
}
return 0;}
146. GIẢI MÃ CHUỖI Ở CHỈ MỤC NHẤT ĐỊNH
#include<bits/stdc++.h>
using namespace std ;
#define int long long
char decode(string s, int k){
int len = 0;
for(char c : s){
if(isdigit(c)){
len *= (c - '0');
}
else{
++ len;
}
}
for(int i = s.size()-1; i >= 0; --i){
char c = s[i];
if(isdigit(c)){
len /= (c - '0');
k %= len;
}

135
else {
if(k == 0 || k == len){
return c;
}
--len;
}
}
return ' ';
}
void implement(){
string s;
int k;
cin >> s >> k ;
cout << decode(s,k);
}
int32_t main(){
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int t; cin >> t;
while(t--){
implement();
cout << endl;
}
return 0;
}

136
147. LẤY CHỮ CÁI ĐẦU TIÊN KHÔNG TRÙNG LẶP THUỘC CHUỖI
#include<bits/stdc++.h>
using namespace std ;
#define int long long
int first_s(string s){
unordered_map<char,int>mp;
queue<pair<char,int>>q;
for(int i = 0 ; i < s.length(); ++i){
char c = s[i];
if(mp.find(c) == mp.end()){
q.push({c,i});
mp[c] = 1;
}
else{
mp[c] ++;
while(!q.empty() && mp[q.front().first] > 1){
q.pop();
}
}
}
if(q.empty())
return -1;
return q.front().second;
}
void implement(){
string s;
cin >> s ;

137
cout << first_s(s);
}
int32_t main(){
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int t; cin >> t;
while(t--){
implement();
cout << endl;
}
return 0;
}
148. TÍNH SỐ LƯỢNG HỌC SINH KHÔNG ĐƯỢC ĂN
#include<bits/stdc++.h>
using namespace std ;
#define int long long
int cnts(vector<int>std, vector<int>sand){
queue<int>q;
stack<int>st;
for(int st : std){
q.push(st);
}
for(int i = sand.size()-1; i >= 0 ;i --){
st.push(sand[i]);
}
int cnt = 0 ;
while(!q.empty()){

138
if(q.front() == st.top()){
st.pop();
q.pop();
cnt = 0 ;
}
else{
int tmp = q.front();
q.pop();
q.push(tmp);
cnt ++ ;
if( cnt == q.size())
return cnt ;
}
}
return 0 ;
}
void implement(){
string s,s1;
cin >> s >> s1;
vector<int>std;
vector<int>sand;
for(char c : s){
if(isdigit(c))
std.push_back(c - '0');
}
for(char c : s1){
if(isdigit(c))

139
sand.push_back(c - '0');
}
cout << cnts(std,sand);
}
int32_t main(){
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int t; cin >> t;
while(t--){
implement();
cout << endl;
}
return 0;
}
149. TÍNH THỜI GIAN CẦN THIẾT ĐỂ MUA VÉ
#include<bits/stdc++.h>
using namespace std;
#define int long long
int wait(vector<int>& tickets, int k) {
int time = 0;
int n = tickets.size();
while (tickets[k] > 0) {
for (int i = 0; i < n; ++i) {
if (tickets[i] > 0) {
tickets[i]--;
time++;
if (i == k && tickets[k] == 0) {

140
return time;
}
}
}
}
return time;
}
void implement(){
string s;
vector<int> vt;
int k;
cin >> s >> k;
size_t pos = 0;
string token;
while ((pos = s.find(',')) != string::npos) {
token = s.substr(0, pos);
vt.push_back(stoi(token));
s.erase(0, pos + 1);
}
vt.push_back(stoi(s));

cout << wait(vt, k);


}
int32_t main(){
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int t; cin >> t;

141
cin.ignore();
while (t--) {
implement();
cout << '\n';
}
return 0;
}
150. GIÁ CUỐI CÙNG SAU KHI GIẢM GIÁ TRONG CỦA HÀNG
#include<bits/stdc++.h>
using namespace std ;
#define int long long
vector<int> finalfrice(vector<int>& prices){
int n = prices.size();
vector<int>ans(n);
for(int i = 0 ; i < n ; ++i){
ans[i] = prices[i];
for(int j = i + 1; j < n ; ++j){
if(prices[j] <= prices[i]){
ans[i] -= prices[j];
break;
}
}
}
return ans ;
}
void implement(){
string s ;

142
cin >> s ;
vector<int>vt;
size_t pos = 0 ;
string token ;
while(pos = (s.find(',')) != string::npos){
token = s.substr(0,pos);
vt.push_back(stoi(token));
s.erase(0,pos+1);
}
vt.push_back(stoi(s));
vector<int> ans = finalfrice(vt);
for(int i = 0 ; i < ans.size(); ++i){
cout << ans[i];
if(i < ans.size()-1 ){
cout << ",";
}
}
}
int32_t main(){
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int t; cin >> t;
while(t--){
implement();
cout << endl;
}
return 0;}

143
151. NHIỆT ĐỘ HÀNG NGÀY
#include<bits/stdc++.h>
using namespace std ;
#define int long long
vector<int> daily(vector<int>& tempera){
vector<int> res(tempera.size(),0);
stack<int>st;
for(int i = 0 ; i < tempera.size(); ++i){
while(!st.empty() && tempera[i] > tempera[st.top()]){
int prev = st.top();
st.pop();
res[prev] = i - prev;
}
st.push(i);
}
return res;
}
void implement(){
string s;
cin >> s ;
vector<int>vt;
size_t pos = 0 ;
string token;
while((pos = s.find(',')) != string::npos){
token = s.substr(0,pos);
vt.push_back(stoi(token));
s.erase(0,pos+1);

144
}
vt.push_back(stoi(s));
vector<int>res = daily(vt);
for(int i = 0 ; i < res.size() ; ++i){
cout << res[i];
if(i < res.size() - 1){
cout << ",";
}
}
}

int32_t main(){
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int t; cin >> t;
while(t--){
implement();
cout << endl;
}
return 0;
}
152. ĐẾM SỐ LƯỢNG CÁC ARRAY CON BỊ RÀNG BUỘC CỐ ĐỊNH
#include<bits/stdc++.h>
using namespace std ;
#define int long long
int nums(vector<int>& num, int minK, int maxK){
int ans = 0 ;

145
int j1 = -1, j2 = -1, k = -1 ;
for(int i = 0 ; i < num.size(); ++i){
if(num[i] < minK || num[i] > maxK) k = i ;
if(num[i] == minK) j1 = i ;
if(num[i] == maxK) j2 = i ;
ans += max(0LL,min(j1,j2)-k);
}
return ans;
}
void implement(){
string s;
cin >> s ;
int minK, maxK;
cin >> minK >> maxK;
vector<int>vt;
size_t pos = 0 ;
string token;
while((pos = s.find(',')) != string::npos){
token = s.substr(0,pos);
vt.push_back(stoi(token));
s.erase(0,pos+1);
}
vt.push_back(stoi(s));
cout << nums(vt,minK,maxK);
}
int32_t main(){
ios_base::sync_with_stdio(0);

146
cin.tie(0); cout.tie(0);
int t; cin >> t;
while(t--){
implement();
cout << endl;
}
return 0;
}
153. SỐ LẦN ÍT NHẤT ĐỂ ĐẢO CHUỖI BIT NHẤT ĐỊNH
#include<bits/stdc++.h>
using namespace std ;
#define int long long
int minflip(vector<int>&num, int k){
int flip = 0 ;
for(int i = 0 ; i <= num.size()-k; ++i){
if(num[i] == 0){
flip ++;
for(int j = i ; j < i + k ; ++j){
num[j] = 1 - num[j];
}
}
}
for(int i : num){
if(i == 0){
return -1;
}
}

147
return flip;
}
void implement(){
int k;
string s ;
cin >> s >> k ;
vector<int>vt;
size_t pos ;
string token;
while((pos = s.find(',')) != string::npos){
token = s.substr(0,pos);
vt.push_back(stoi(token));
s.erase(0,pos+1);
}
vt.push_back(stoi(s));
cout << minflip(vt,k);
}
int32_t main(){
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int t; cin >> t;
while(t--){
implement();
cout << endl;
}
return 0;
}

148
154. DANH SÁCH SỐ LỚN NHẤT CỦA MỖI LẦN TRƯỢT CỦA SỔ
#include<bits/stdc++.h>
using namespace std ;
#define int long long
vector<int> maxslide(vector<int>& nums, int k){
vector<int>res;
deque<int>dq;
for(int i = 0 ; i < nums.size(); ++i){
while(!dq.empty() && dq.front() < i - k +1){
dq.pop_front();
}
while(!dq.empty() && nums[dq.back()] < nums[i]){
dq.pop_back();
}
dq.push_back(i);
if(i >= k - 1){
res.push_back(nums[dq.front()]);
}
}
return res;
}
void implement(){
int k ;
string s ;
cin >> s >> k;
vector<int>vt;
size_t pos = 0 ;

149
string token;
while((pos = s.find(',')) != string::npos){
token = s.substr(0,pos);
vt.push_back(stoi(token));
s.erase(0,pos+1);
}
vt.push_back(stoi(s));
vector<int> res = maxslide(vt,k);
for(int i = 0 ; i < res.size(); ++i){
cout << res[i];
if(i < res.size() - 1){
cout << ",";
}
}
}
int32_t main(){
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int t; cin >> t;
while(t--){
implement();
cout << endl;
}
return 0;
}

150
155. XÂY DỰNG ARRAY TỪ STACK
#include<bits/stdc++.h>
using namespace std ;
#define int long long
queue<string> targets(vector<int>& target, int n) {
queue<string> res;
int num = 1;
int j = 0;
while(num <= n && j < target.size()) {
res.push("Push");
if(num == target[j]) {
j++;
} else {
res.push("Pop");
}
num++;
}
return res;
}
void implement(){
string s ;
int n ;
cin >> s >> n ;
vector<int>vt;
size_t pos = 0 ;
string token ;
while((pos = s.find(',')) != string::npos){

151
token = s.substr(0,pos);
vt.push_back(stoi(token));
s.erase(0,pos+1);
}
vt.push_back(stoi(s));
queue<string> res = targets(vt,n);
while(!res.empty()) {
cout << res.front();
res.pop();
if(!res.empty())
cout << ", ";
}
}
int32_t main(){
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int t; cin >> t;
while(t--){
implement();
cout << endl;
}
return 0;
}
156. BÓNG CHÀY
#include<bits/stdc++.h>
using namespace std ;
int calpoint(const vector<string>& ops){

152
stack<int>scores;
for(const string& op : ops){
if(op == "+"){
int top = scores.top();
scores.pop();
int newTop = top + scores.top();
scores.push(top);
scores.push(newTop);
}
else if(op == "D")
scores.push(2*scores.top());
else if(op == "C")
scores.pop();
else
scores.push(stoi(op));
}
int res = 0 ;
while(!scores.empty()){
res += scores.top();
scores.pop();
}
return res;
}
void implement(){
string s;
cin >> s ;
vector<string>vt;

153
size_t pos = 0;
string token ;
while((pos = s.find(',')) != string::npos){
token = s.substr(0,pos);
vt.push_back(token);
s.erase(0,pos+1);
}
vt.push_back(s);
cout << calpoint(vt);
}
int32_t main(){
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int t; cin >> t;
while(t--){
implement();
cout << endl;
}
return 0;
}
157. CHUỖI ĐỐI XỨNG
#include<bits/stdc++.h>
using namespace std ;
#define int long long
bool check(string s){
queue<char>q;
int n = s.size();

154
for(int i = 0 ; i < n; ++i){
q.push(s[i]);
}
for(int i = n-1 ; i >= 0 ; --i){
if(q.front() != s[i]){
return false;
}
q.pop();
}
return true;
}
void implement(){
string s;
cin >> s;
cout << check(s) ? 1 : 0 ;
}
int32_t main(){
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int t; cin >> t;
while(t--){
implement();
cout << endl;
}
return 0;
}

155
158. ĐẢO NGƯỢC CHUỖI TRONG HÀNG ĐỢI
#include<bits/stdc++.h>
using namespace std ;
#define int long long
void implement(){
string s ;
cin >> s ;
queue<char>q;
int n = s.size();
for(int i = n-1 ; i >= 0 ; --i){
q.push(s[i]);
}
while(!q.empty()){
cout << q.front();
q.pop();
}
}
int32_t main(){
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int t; cin >> t;
while(t--){
implement();
cout << endl;
}
return 0;
}

156
159. ĐẢO CHỖ K PHẦN TỬ TRONG HÀNG ĐỢI
#include<bits/stdc++.h>
using namespace std ;
#define int long long
vector<string>rev(vector<string>vt, int k){
queue<string>q;
int n = vt.size();
for(int i = k - 1 ; i >= 0 ; --i){
q.push(vt[i]);
}
for(int i = k ; i < n; ++i ){
q.push(vt[i]);
}
vector<string>res;
while(!q.empty()){
res.push_back(q.front());
q.pop();
}
return res;
}
void implement(){
string s ; int k ;
cin >> s >> k;
vector<string>vt;
size_t pos = 0 ;
string token;
while((pos = s.find(',')) != string::npos){

157
token = s.substr(0,pos);
vt.push_back(token);
s.erase(0,pos+1);
}
vt.push_back(s);
vector<string> res = rev(vt , k);
for(int i = 0 ; i < res.size() ; ++i){
cout << res[i];
if(i < res.size() - 1){
cout << ",";
}
}
}
int32_t main(){
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int t; cin >> t;
while(t--){
implement();
cout << endl;
}
return 0;
}
160. TÌM SỐ LỚN NHẤT TRONG HÀNG ĐỢI
#include<bits/stdc++.h>
using namespace std ;
#define int long long

158
int maxx(vector<int>vt){
priority_queue<int>q;
for(int x : vt){
q.push(x);
}
return q.top();
}
void implement(){
string s ;
cin >> s ;
vector<int>vt;
string token;
size_t pos = 0 ;
while((pos = s.find(",")) != string::npos ){
token = s.substr(0,pos);
vt.push_back(stoi(token));
s.erase(0,pos+1);
}
vt.push_back(stoi(s));
cout << maxx(vt);
}
int32_t main(){
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int t; cin >> t;
while(t--){
implement();

159
cout << endl;
}
return 0;
}
161. TÌM SỐ NHỎ NHẤT TRONG HÀNG ĐỢI
#include <bits/stdc++.h>
int main() {
int t;
std::cin >> t;
while (t--) {
std::string input;
std::cin >> input;
std::queue<int> q;
std::istringstream iss(input);
std::string token;
while (getline(iss, token, ',')) {
q.push(std::stoi(token));
}
int min_element = q.front(); // Giả sử phần tử đầu tiên là nhỏ nhất
while (!q.empty()) {
if (q.front() < min_element) {
min_element = q.front();
}
q.pop();
}
std::cout << min_element << std::endl;
}

160
return 0;
}
162. TÌM HỢP CỦA HAI HÀNG ĐỢI
#include<bits/stdc++.h>
using namespace std ;
#define int long long
queue<int> uni(queue<int>& q1, queue<int>& q2) {
unordered_set<int> seen; // Dùng để kiểm tra sự tồn tại của phần tử
queue<int> result;
while (!q1.empty()) {
int val = q1.front();
q1.pop();
if (seen.find(val) == seen.end()) {
result.push(val);
seen.insert(val);
}
}
while (!q2.empty()) {
int val = q2.front();
q2.pop();
if (seen.find(val) == seen.end()) {
result.push(val);
seen.insert(val);
}
}
return result;
}

161
void implement(){
string s1,s2;
cin >> s1 >> s2;
queue<int>vt1;
string token;
size_t pos = 0 ;
while((pos = s1.find(",")) != string::npos){
token = s1.substr(0,pos);
vt1.push(stoi(token));
s1.erase(0,pos+1);
}
vt1.push(stoi(s1));
queue<int>vt2;
string token1;
size_t pos1 = 0 ;
while((pos1 = s2.find(",")) != string::npos){
token1 = s2.substr(0,pos1);
vt2.push(stoi(token1));
s2.erase(0,pos1+1);
}
vt2.push(stoi(s2));
queue<int>res = uni(vt1,vt2);
while(!res.empty()){
cout << res.front();
res.pop();
if(!res.empty()){
cout << ",";

162
}
}
}
int32_t main(){
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int t; cin >> t;
while(t--){
implement();
cout << endl;
}
return 0;
}
163. TÌM GIAO CỦA HAI HÀNG ĐỢI
#include<bits/stdc++.h>
using namespace std;
#define int long long
queue<int> findselec(queue<int>& q1, queue<int>& q2) {
unordered_set<int> seenInQ2;
queue<int> result;
while(!q2.empty()){
seenInQ2.insert(q2.front());
q2.pop();
}
while(!q1.empty()){
if(seenInQ2.find(q1.front()) != seenInQ2.end()){
result.push(q1.front());

163
seenInQ2.erase(q1.front());
}
q1.pop();
}
return result;
}
void implement(){
string s1, s2;
cin >> s1 >> s2;
queue<int> vt1, vt2;
size_t pos = 0;
string token;
while((pos = s1.find(",")) != string::npos){
token = s1.substr(0, pos);
vt1.push(stoi(token));
s1.erase(0, pos + 1);
}
vt1.push(stoi(s1));
size_t pos1 = 0;
string token1;
while((pos1 = s2.find(",")) != string::npos){
token1 = s2.substr(0, pos1);
vt2.push(stoi(token1));
s2.erase(0, pos1 + 1);
}
vt2.push(stoi(s2));
queue<int> res = findselec(vt1, vt2);

164
while(!res.empty()){
cout << res.front();
res.pop();
if(!res.empty()){
cout << ",";
}
}
}
int32_t main(){
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int t; cin >> t;
while(t--){
implement();
cout << endl;
}
return 0;
}
164. KIỂM TRAI LẠI XEM HAI HÀNG ĐỢI CÓ GIỐNG NHAU HAY
KHÔNG
#include <iostream>
#include <queue>
#include <sstream>
#include <string>
#include <vector>
bool areQueuesEqual(std::queue<int>& q1, std::queue<int>& q2) {
if (q1.size() != q2.size()) {

165
return false;
}
while (!q1.empty()) {
if (q1.front() != q2.front()) {
return false;
}
q1.pop();
q2.pop();
}
return true;
}
int main() {
int t;
std::cin >> t;
while (t--) {
std::string input1, input2;
std::cin >> input1 >> input2;
std::queue<int> q1, q2;
std::istringstream iss1(input1);
std::istringstream iss2(input2);
std::string token;
while (getline(iss1, token, ',')) {
q1.push(std::stoi(token));
}
while (getline(iss2, token, ',')) {
q2.push(std::stoi(token));
}

166
bool result = areQueuesEqual(q1, q2);
std::cout << result << std::endl;
}
return 0;}
1. SINH XÂU AB
#include <iostream>
#include <string>
using namespace std;
void generate_AB_strings(string current, int n) {
if (current.length() == n) {
cout << current << " ";
} else {
generate_AB_strings(current + "A", n);
generate_AB_strings(current + "B", n);
}
}
int main() {
int T;
cin >> T;
for (int t = 0; t < T; t++) {
int n;
cin >> n;
string current = "";
generate_AB_strings(current, n);
cout << endl;
}
return 0;}

167
2. SINH XÂU NHỊ PHÂN N BIT
#include <iostream>
#include <string>
using namespace std;
void generate_AB_strings(string current, int n) {
if (current.length() == n) {
cout << current << " ";
} else {
generate_AB_strings(current + "A", n);
generate_AB_strings(current + "B", n);
}
}
int main() {
int T;
cin >> T;
for (int t = 0; t < T; t++) {
int n;
cin >> n;
string current = "";
generate_AB_strings(current, n);
cout << endl;
}
return 0;}
3. SORTING 4
#include <iostream>
#include <vector>
using namespace std;

168
vector<int> findIntersection(const vector<int>& A, const vector<int>& B) {
vector<int> intersection;
int i = 0, j = 0;
while (i < A.size() && j < B.size()) {
if (A[i] == B[j]) {
intersection.push_back(A[i]);
i++;
j++;
} else if (A[i] < B[j]) {
i++;
} else {
j++;
}
}
return intersection;
}
vector<int> findUnion(const vector<int>& A, const vector<int>& B) {
vector<int> unionSet;
int i = 0, j = 0;
while (i < A.size() && j < B.size()) {
if (A[i] == B[j]) {
unionSet.push_back(A[i]);
i++;
j++;
} else if (A[i] < B[j]) {
unionSet.push_back(A[i]);
i++;

169
} else {
unionSet.push_back(B[j]);
j++;
}
}
while (i < A.size()) {
unionSet.push_back(A[i]);
i++;
}
while (j < B.size()) {
unionSet.push_back(B[j]);
j++;
}
return unionSet;
}
int main() {
int T;
cin >> T;
while (T--) {
int n, m;
cin >> n >> m;
vector<int> A(n);
vector<int> B(m);
for (int i = 0; i < n; i++) {
cin >> A[i];
}
for (int i = 0; i < m; i++) {

170
cin >> B[i];
}
vector<int> intersection = findIntersection(A, B);
vector<int> unionSet = findUnion(A, B);
for (int i = 0; i < unionSet.size(); i++) {
cout << unionSet[i] << " ";
}
cout << endl;
for (int i = 0; i < intersection.size(); i++) {
cout << intersection[i] << " ";
}
cout << endl;
}
return 0;
}
4. SINH HOÁN VỊ
#include <iostream>
#include <vector>
using namespace std;
void generatePermutations(vector<int>& current, vector<bool>& used, int n) {
if (current.size() == n) {
for (int i = 0; i < n; i++) {
cout << current[i];
}
cout << " ";
return;
}

171
for (int i = 1; i <= n; i++) {
if (!used[i]) {
current.push_back(i);
used[i] = true;
generatePermutations(current, used, n);
current.pop_back();
used[i] = false;
}
}
}
int main() {
int T;
cin >> T;
for (int t = 0; t < T; t++) {
int n;
cin >> n;
vector<int> current;
vector<bool> used(n + 1, false);
generatePermutations(current, used, n);
cout << endl;
}
return 0;}
5. SORTING 2
#include <bits/stdc++.h>
#define ll long long
#define fi first
#define se second

172
#define pb push_back
#define all(v) v.begin(),v.end()
#define f(i,a,b) for(ll i=a; i<=b; ++i)
#define fn(i,a,b) for(int i=a; i>=b; --i)
#define faster() ios_base::sync_with_stdio(false),cin.tie(0),cout.tie(0);
const int MOD=1e9+7;
using namespace std;
int main(){
faster();
int t;
cin >>t;
while(t--){
int n;
cin >> n;
int a[n], b[n];
for (int i = 0; i < n; i++)
cin >> a[i];
sort(a, a + n);
for (int i = 1; i < n; i += 2)
b[i] = a[(i - 1) / 2];
for (int i = 0; i < n; i += 2)
b[i] = a[n - i / 2 - 1];
for (int i = 0; i < n; i++)
cout << b[i] << " ";
cout<<'\n';
}
return 0;}

173

You might also like