86pts TLE
查看原帖
86pts TLE
1188058
141300hxl楼主2023/12/14 08:52
#include <bits/stdc++.h>
using namespace std;
char ch[260];
int a[260], b[260], ans[260];
int n, &alen = a[0], &blen = b[0], &clen = ans[0];
bool cmp(int a[], int b[]) { /* a < b*/
	if (a[0] != b[0]) return a[0] < b[0];
	int i;
	for (i = a[0]; a[i] == b[i]; i--);
	return i && a[i] < b[i];
}
void dfs(int key, int n) {
	if (n == 0) {
		for (int i = key; i <= alen; i++)
			b[++blen] = a[i];
		int cnt = 0;
		for (; b[blen] == 0 && blen >= 2; blen--) cnt++;
		if (cmp(b, ans))
			memcpy(ans, b, sizeof ans);
		for (int i = key; i <= alen; i++) blen--;
		blen += cnt;
		return;
	}
	if (key > alen)
		return;
	if (cmp(ans, b)) return;
	blen++;
	b[blen] = a[key];
	dfs(key + 1, n);
	b[blen] = 0;
	blen--;
	dfs(key + 1, n - 1);
}
int main() {
	cin >> (ch + 1) >> n;
	alen = strlen(ch + 1);
	blen = 0;
	for (int i = 1; i <= alen; i++)
		a[i] = ch[alen - i + 1] - '0';
	int inf = (1 << 30) - 1 + (1 << 30);
	for (clen; inf; clen++) {
		ans[clen] = inf % 10;
		inf /= 10;
	}
	for (int i = 1; i <= 50; i++) {
		inf = (1 << 15) - 1 + (1 << 15);
		for (int j = 1; j <= clen; j++)
			ans[j] *= inf;
		for (int j = 1; j <= clen; j++) {
			ans[j + 1] += ans[j] / 10;
			ans[j] %= 10;
			if (ans[clen + 1]) clen++;
		}
	}
	dfs(1, n);
	for (int i = clen; i; i--)
		cout << ans[i];
	return 0;
}

我写的DFS怎么优化

2023/12/14 08:52
加载中...