#include<stdio.h> long long int pa(long long int x) { long long int ans = 0; for (long long int i = 2; (i * i * i) <= x; i++) { ans += (x / (i * i * i)); } //printf("%lld\n", ans); return ans; } int main(){ long long int m; while (~scanf("%lld", &m)){ long long int l = 8; long long int r = 1e16; long long int cnt = 0; int flag = 0; cnt = 0; flag = 0; long long int mid ; while (l <= r) { mid = (l + r) / 2; cnt = pa(mid); if (cnt < m) { l = mid + 1; } if (cnt > m) { r = mid - 1; } if (cnt == m) { flag = 1; while (1) { mid--; cnt = pa(mid); if (cnt != m) { break; } } } if (flag) break; } //printf("%d", flag); if (flag) printf("%lld\n", mid + 1); else printf("-1\n"); } return 0; }
先假定有x这个数,在算出这个数之前有多少组看是否满足题意 进行二分
这是我首次做二分的题 感觉二分是真的快乐