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;
}
标签:0828,string,int,res,ll,T2,solve,幸运,size
From: https://www.cnblogs.com/maniubi/p/18386457