求助蓝桥杯官网全过但洛谷一个都没过,想知道哪些数据没有考虑到
查看原帖
求助蓝桥杯官网全过但洛谷一个都没过,想知道哪些数据没有考虑到
1358004
moonlightandyou楼主2024/5/21 12:10

蓝桥杯官网全过但洛谷一个都没过,想知道哪些数据没有考虑到

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

long long num[20] = { 0 };
long long n, a, b;
long long ans[20] = { 0 };
int size;

long long* maxstr(long long str1[], long long str2[])
{
	long long num1 = 0, num2 = 0;
	for (int i = size; i > 0; i--)
	{
		num1 = num1 * 10 + str1[i];
		num2 = num2 * 10 + str2[i];
	}
	if (num1 > num2) return str1;
	else return str2;
}

int tran(long long n)
{
	int i = 0;
	while (n)
	{
		num[++i] = n % 10;
		n /= 10;
	}
	return i;
}

void dfs(int pos, long long a, long long b)
{
	if (pos == 0 || (a == 0 && b == 0))
	{
		long long* max_ans = maxstr(ans, num);
		for (int i = 1; i < 20; i++)
		{
			ans[i] = max_ans[i];
		}
		return;
	}
	int x = num[pos];
	if (9 - x <= a)
	{
		num[pos] = 9;
		dfs(pos - 1, a - 9 + x, b);
		num[pos] = x;
	}
	else if (a)
	{
		num[pos] += a;
		dfs(pos - 1, 0, b);
		num[pos] = x;
	}
	if (x < b)
	{
		num[pos] = 9;
		dfs(pos - 1,  a, b - x - 1);
		num[pos] = x;
	}
	else 
		dfs(pos - 1, a, b);
}

int main(void)
{
	scanf("%lld%lld%lld", &n, &a, &b);
	size = tran(n);
	dfs(size, a, b);
	long long cnt = 0;
	for (int i = 20; i >= 1; i--)
	{
		cnt = cnt * 10 + ans[i];
	}
	printf("%lld", cnt);

}
2024/5/21 12:10
加载中...