Điểm:
200
Thời gian:
1.0s
Bộ nhớ:
256M
Input:
bàn phím
Output:
màn hình
Ghép số (THTA Vòng Tỉnh/TP 2022)
Cho hai số tự nhiên \(A\) và \(B\) sao cho mỗi số đều chỉ gồm các chữ số đôi một khác nhau. Lần lượt lấy các chữ số của \(A\) và \(B\) ghép lại để tạo thành số \(C\) sao cho:
- Số chữ số của \(C\) bằng tổng số chữ số của \(A\) và \(B\);
- Thứ tự các chữ số trong \(A\) không đổi;
- Thứ tự các chữ số trong \(B\) không đổi;
Yêu cầu: Hãy tìm số \(C\) nhỏ nhất có thể ghép được.
Input
- Nhập vào hai số tự nhiên \(A\) và \(B\). \((1 \le A \le B \le 10^8)\). Mỗi số được ghi trên một dòng.
Output
- Đưa ra số \(C\) thỏa mãn đề bài.
Example
Test 1
Input
15
28
Output
1258
Note
Có thể ghép thành các số: \(1528,1258,1285,2815,2158,2185\). Số nhỏ nhất là \(1258\).
Test 2
Input
12547
2469
Output
122454679
Note
Có thể ghép thành các số khác nhau như: \(125472469,124692547,122469547,122454679, ...\). Số \(122454679\) là số nhỏ nhất thỏa mãn.
Bình luận
Nối chuỗi rồi sort là được
Code lỏ dùng 2 trỏ 😃
include <bits/stdc++.h>
define endl "\n"
define ll long long
using namespace std;
int main(){
string a,b; cin >> a >> b;
int i = 0; int j = 0;
while (i < a.length() && j < b.length()){
if ((a[i] - '0') > (b[j] - '0')){
cout << b[j++];
}
else if ((a[i] - '0') < (b[j] - '0')){
cout << a[i++];
}
else cout << a[i++];
}
while (i < a.length()) cout << a[i++];
while (j < b.length()) cout << b[j++];
return 0;
}
/\/\
\ /
(. .)
/( )\
/( )\
() ()
() ()
/\/\
\ /
(. .)
/( )\
/( )\
() ()
() ()
/\/\
\ /
(. .)
/( )\
/( )\
() ()
() ()
test2 quái z:), A<=B mà A vẫn > nhỉ:)
dùng sort dk mn