0828-T2 超級幸運數

maniubi發表於2024-08-29

0828-T2 超級幸運數

題意

給出數字 \(A\)\(B\)。求出以 \(A\)\(B\) 為兩端的數的最小值。

思路

\(AB\)\(BA\) 兩種情況。

\(x\)\(y\) 拼接時,\(x\) 的尾部和 \(y\) 的頭部可以合併。

\(132\)\(231\) 合併出來為 \(13231\)

求出 \(x\)\(y\) 的最長公共前字尾即可,合併時去除。

程式碼

#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll to_int(string s) {
	ll res = 0;
	for (auto c : s) res = res * 10 + c - '0';
	return res;
}
ll solve(int A, int B) {
	string a = to_string(A);
	string b = to_string(B);
	int len = min(a.size(), b.size());
	for (int i = len - 1; i >= 0; i --) {
		if (a.substr(a.size() - i - 1, i + 1) == b.substr(0, i + 1)) {
			string c = a;
			if (i + 1 < b.size()) 
				c = c + b.substr(i + 1);
			return to_int(c);
		}
	}
	string c = a + b;
	return to_int(c);
}
int main() {
 	ll A, B;
	cin >> A >> B;
	ll ans1 = solve(A, B);
	ll ans2 = solve(B, A);
	cout << min(ans1, ans2);
	return 0;
}

相關文章