😭 我第三题好不容易写出来了常数复杂度的算法,结果时间还是不够,没交上。 #include <iostream> #include <string> #include <algorithm> using namespace std; int main() { unsigned long long n; cin >> n; if (n == 0) { cout << 1 << endl; return 0; } else if (n == 1 || n == 2) { cout << 2 << endl; return 0; } else if (n == 3) { cout << 3 << endl; return 0; } string binaryForm; bool flag = false; for (unsigned long long i = (long long)1 << 63; i != 0; i = i >> 1) { if (i & n) { binaryForm += '1'; flag = true; } else { if (flag) { binaryForm += '0'; } } } int length = binaryForm.size(); long long count = 1; int curr = 1; for (int i = 0; i < length - 1; i++) { if (i % 2 == 0 && i != 0) { curr *= 2; } count += curr; } string subLeft = binaryForm.substr(1, (length - 1) / 2); int times = 1; for (int i = subLeft.size() - 1; i >= 0; i--) { if (subLeft[i] == '1') { count += times; } times *= 2; } string newBinaryForm = "1" + subLeft; if (length % 2) { subLeft.pop_back(); } reverse(subLeft.begin(), subLeft.end()); newBinaryForm += subLeft + "1"; if (newBinaryForm <= binaryForm) { count++; } cout << count << endl; return 0; }
点赞 评论

相关推荐

头像 会员标识
10-14 23:01
已编辑
中国地质大学(武汉) Java
CUG芝士圈:虽然是网上的项目,但最好还是包装一下,然后现在大部分公司都在忙校招,十月底、十一月初会好找一些。最后,boss才沟通100家,别焦虑,我去年暑假找第一段实习的时候沟通了500➕才有面试,校友加油
点赞 评论 收藏
分享
牛客网
牛客企业服务