40pts求hack
查看原帖
40pts求hack
358971
朦胧_XY楼主2023/8/16 00:07

40pts, 自己拍了半天也没拍出来有什么错,求大佬hack。

#include <bits/stdc++.h>
using namespace std;
long long n, ans, dgt[20], ten[20];
int a, b, num[20], len;
void init(long long x){
	int t = 1; dgt[1] = x, ten[0] = 1, ten[1] = 10;
	while(x) num[++len] = x%10, x /= 10, t *= 10;
	reverse(num + 1, num + len + 1);
	for(int i = 2; i <= len; i++)
		t /= 10, dgt[i] = dgt[i-1] - num[i-1] * t, ten[i] = ten[i-1] * 10;
}
void dfs(int x, int y, int z, long long sum){
	if(x == len){ ans = sum; return; }
	if(9 - num[x+1] > a - y && num[x+1] + 1 > b - z){
		sum += (num[x+1] + a - y) * ten[len-x-1] + dgt[x+2];
		for(int i = x + 2; i <= len; i++)
			if(num[i] + 1 <= b - z) sum += (9ll - num[i]) * ten[len-i], z += num[i] + 1;
		ans = max(ans, sum); return;
	}
	if(9 - num[x+1] <= a - y) dfs(x + 1, y + 9 - num[x+1], z, sum + 9ll * ten[len-x-1]);
	if(num[x+1] + 1 <= b - z) dfs(x + 1, y, z + num[x+1] + 1, sum + 9ll * ten[len-x-1]);
}
int main(){
	scanf("%lld%d%d", &n, &a, &b);
	init(n);
	dfs(0, 0, 0, 0);
	printf("%lld", ans);
	return 0;
} 

挺无语的,暴搜都能错T^T

2023/8/16 00:07
加载中...