题解/算法 {C. Long Multiplication}
@LINK: https://codeforces.com/contest/1954/problem/C
;
注意, 你的交换操作 不会影响x+y
的值;
即令S=x+Y
, 则x*y = x * (S-x) = -x^2 + S*x
, 当x = (S/2)
时 取得最大值;
可是, 你的交换操作 不一定会使得x == (S/2)
, 因此 我们的目的 就是让ABS( y-x)
尽量的小;
.
证明: 令x = (S/2) - t, 则y = (S/2) + t
, 因此x*y = (S/2)^2 - t^2
, 显然要让t
尽量的小;
如何构造 让ABS( x-y)
最小呢?
比如x = ABC5...; y = ABC4...
(即x[b] != y[b]
且前缀x[0...b) == y[0...b)
);
那么 因为ABC5??? > ABC4???
, 因此你一定要让ABC5???
其中的???
尽量的小 (因为不管他是多少 他都一定大于ABC4???
);
string A, B; cin>>A>>B;
int N = A.size();
bool meet = 0;
FOR_( i, 0, N-1){
if