找不到代码错误
查看原帖
找不到代码错误
1047693
Asharuiya楼主2024/4/18 19:37

麻烦帮忙看一看代码哪里有错误

#include <cstdio>
#define int unsigned long long
using namespace std;

int re() {
	int s = 0, f = 1;
	char ch = getchar();
	while (ch > '9' || ch < '0') {
		if (ch == '-')
			f = -1;
		ch = getchar();
	}
	while ('0' <= ch && ch <= '9')
		s = s * 10 + ch - 48, ch = getchar();
	return s * f;
}

void wr(int s) {
	if (s < 0)
		putchar('-'), s = -s;
	if (s > 9)
		wr(s / 10);
	putchar(s % 10 + 48);
}

void wr(int s, char ch) {
	wr(s), putchar(ch);
}
//const int inf=;
int n, k, m, a, b;
int T;
int arr[107], arr_ind = 0;
int ar[107], ar_ind = 0;

bool if_inar(int l, int r) {
	int la = l / m;
	int ra = r / m;
	if (l % m == 0)
		return 1;
	if (la != ra)
		return 1;
	else
		return 0;
}

void solve() {
	arr_ind = 0;
	n = re();
	k = re();
	m = re();
	a = re();
	b = re();
	ar[0] = 1;
	for (int i = 1; i <= 100; i++) {
		ar[i] = ar[i - 1] * k;
		if (ar[i] >= 1e18 || ar[i] < 0) {
			ar_ind = i + 1;
			break;
		}
	}
	if ((n % m) == 0) {
		wr(0, '\n');
		return;
	}
	if (k == 1) {
		puts("-1");
		return;
	}
	while (n != 0) {
		arr[arr_ind++] = n;
		n /= k;
	}
	int ans = arr_ind * b;
	for (int i = 0; i < arr_ind; i++) {
		int num = arr[i];
		for (int q = 0; q < ar_ind; q++) {
			int l = ar[q] * num;
			int r = ar[q] * num + ar[q] - 1;
//            if(r<0)r = 1e18;
//            if(l >= 1e18)break;
			if (if_inar(l, r)) {
				int temp = i * b + q * a;
				if (ans > temp)
					ans = temp;
			}
		}
	}
	wr(ans, '\n');
}

signed main() {
	T = re();
	while (T--) {
		solve();
	}
	return 0;
}

2024/4/18 19:37
加载中...