0828-T2 超级幸运数

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;
}
posted @ 2024-08-29 12:54  maniubi  阅读(3)  评论(0编辑  收藏  举报