求助 本地 与 洛谷 IDE 结果不一致
  • 板块学术版
  • 楼主VitrelosTia
  • 当前回复9
  • 已保存回复9
  • 发布时间2024/10/6 22:52
  • 上次更新2024/10/7 09:49:47
查看原帖
求助 本地 与 洛谷 IDE 结果不一致
672333
VitrelosTia楼主2024/10/6 22:52
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define test cerr << "test"
#define print(x) cerr << #x << " = " << x << '\n'
#define printarr(x, n) for (int i = 1; i <= n; i++) cerr << #x << "[" << i << "] = " << x[i] << '\n'

const int N = 20;
ll k;

int a[N]; ll f[N][N][2][2];
ll dfs(int i, int lst, bool lim, bool zro) {
	if (i == 0 && !zro) return 1;
	if (f[i][lst][lim][zro] != -1) return f[i][lst][lim][zro];
	ll ans = 0; int mx = lim ? a[i] : 9;
	for (int j = 0; j <= mx; j++) if (j != lst || zro) {
//		printf ("i = %d, lst = %d, j = %d\n", i,lst, j);
		ans += dfs(i - 1, j, lim && j == mx, zro && j == 0);
	}
	return f[i][lst][lim][zro] = ans;
}
bool check(ll x) {
	int len = 0; memset(f, -1, sizeof f);
	for (; x; x /= 10) a[++len] = x % 10;
//	cout << dfs(len, -1, true, true) << '\n';
	return dfs(len, -1, true, true) < k;
}

int main() {
	ios::sync_with_stdio(false); cin.tie(nullptr);
//	check(2506230722);
	int T; for (cin >> T; T--; ) {
		cin >> k;
		ll l = 1, r = 1e18, ans = 0;
		while (l <= r) {
			ll mid = (l + r) >> 1;
//			print(mid);
			if (check(mid)) l = mid + 1;
			else r = mid - 1, ans = mid;
		}
		cout << ans << '\n';
	}	
	return 0;
}
2024/10/6 22:52
加载中...