求助
查看原帖
求助
275090
Albet楼主2021/8/20 20:25
#include<iostream>
#include<algorithm>
#include<cstdio>
#define ll long long
using namespace std;
const ll maxn = 101;
ll n, k;
ll a[maxn];
char s;
struct num {
	ll len;
	ll ary[maxn];
};
num maxs, c, ls;
num mul(num x,ll y) {
	for (ll i = 0; i < x.len; i++)x.ary[i] *= y;
	for (ll i = 0; i < x.len; i++) {
		x.ary[i + 1] += x.ary[i] / 10;
		x.ary[i] %= 10;
	}
	while (x.ary[x.len]) {
		x.ary[x.len + 1] += x.ary[x.len] / 10;
		x.ary[x.len] %= 10;
		x.len++;
	}
	return x;
}
num add(num x,ll y) {
	x.ary[0] += y;
	for (ll i = 0; i < x.len; i++) {
		x.ary[i + 1] += x.ary[i] / 10;
		x.ary[i] %= 10;
	}
	while (x.ary[x.len]) {
		x.ary[x.len + 1] += x.ary[x.len] / 10;
		x.ary[x.len] %= 10;
		x.len++;
	}
	return x;
}
void print(num x) {
	for (ll i = x.len - 1; i >= 0; i--) {
		printf("%lld", x.ary[i]);
	}
	printf("\n");
	return;
}
num mul(num x, num y) {
	num ls;
	for (ll i = 0; i < maxn; i++) {
		ls.ary[i] = 0;
	}
	for (ll i = 0; i < x.len; i++) {
		for (ll j = 0; j < y.len; j++) {
			ls.ary[i + j] += x.ary[i] * y.ary[j];
		}
	}
	ls.len = x.len + y.len - 1;
	for (ll i = 0; i < ls.len; i++) {
		ls.ary[i + 1] += ls.ary[i] / 10;
		ls.ary[i] %= 10;
	}
	while (ls.ary[ls.len]) {
		ls.ary[ls.len + 1] += ls.ary[ls.len] / 10;
		ls.ary[ls.len] %= 10;
		ls.len++;
	}
	return ls;
}
num maxx(num x, num y) {
	if (x.len < y.len)return y;
	if (x.len > y.len)return x;
	for (ll i = x.len - 1; i >= 0; i--) {
		if (x.ary[i] < y.ary[i])return y;
		if (x.ary[i] > y.ary[i])return x;
	}
	return x;
}
void dfs(ll x, num ans, ll last) {
	if (x == k) {
		ls.len = 0;
		ls.ary[0] = 0;
		for (ll i = last + 1; i < n; i++) {
			ls = add(ls, a[i]);
			ls = mul(ls, 10);
		}
		ls = add(ls, a[n]);
		ans = mul(ans,ls);
		maxs = maxx(maxs, ans);
		return;
	}
	for (ll i = last + 1; i <= n - k + x; i++) {
		ls.len = 0;
		ls.ary[0] = 0;
		for (ll j = last + 1; j < i; j++) {
			ls = add(ls,a[j]);
			print(ls);
			ls = mul(ls,10);
		}
		ls = add(ls,a[i]);
		dfs(x + 1, mul(ans, ls), i);
	}
	return;
}
int main() {
	scanf("%lld%lld", &n, &k);
	for (ll i = 1; i <= n; i++) {
		cin >> s;
		a[i] = s - '0';
	}
	c.len = 1;
	c.ary[0] = 1;
	dfs(0, c, 0);
	print(maxs);
	return 0;
}
2021/8/20 20:25
加载中...