题目大意
P16224 [蓝桥杯 2026 省 A] 均衡数
题目描述
如果一个正整数的二进制表示中(无前导 0),1 的数量和 0 的数量相同,则我们称其为一个“均衡数”。
现在,请你找到一个均衡数 x,使得 ∣2026202620262026−x∣ 的值最小。若存在多个均衡数使得 ∣2026202620262026−x∣ 的值相同且最小,则取其中最小的一个。
输入格式
无
输出格式
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
输入输出样例 #1
输入 #1
输出 #1
思路讲解
说白了,最靠近的就是 50 位最大均衡数和 52 位最小均衡数。
这个是 52 位最小均衡数,比这个 50 位的最大的更接近,故选这个。
1 2 3
| >>> bin(2251799847239679) '0b1000000000000000000000000001111111111111111111111111' >>>
|
AC代码
AC
https://www.luogu.com.cn/record/273571661
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
|
#include <bits/stdc++.h> #define all(vec) vec.begin(),vec.end() #define lson(o) (o<<1) #define rson(o) (o<<1|1) #define SZ(a) ((long long) a.size()) #define debug(var) cerr << #var <<" = ["<<var<<"]"<<"\n"; #define debug1d(a) \ cerr << #a << " = ["; \ for (int i = 0; i < (int)(a).size(); i++) \ cerr << (i ? ", " : "") << a[i]; \ cerr << "]\n"; #define debug2d(a) \ cerr << #a << " = [\n"; \ for (int i = 0; i < (int)(a).size(); i++) \ { \ cerr << " ["; \ for (int j = 0; j < (int)(a[i]).size(); j++) \ cerr << (j ? ", " : "") << a[i][j]; \ cerr << "]\n"; \ } \ cerr << "]\n"; #define cend cerr<<"\n-----------\n" #define fsp(x) fixed<<setprecision(x)
using namespace std;
using ll = long long; using ull = unsigned long long; using DB = double; using i128 = __int128; using CD = complex<double>;
static constexpr ll MAXN = (ll)1e6+10, INF = (1ll<<61)-1; static constexpr ll mod = 998244353; static constexpr double eps = 1e-8; const double PI = acos(-1.0);
ll lT,testcase;
struct Solve { Solve() { ll ans=(1ll<<51)+(1ll<<25)-1; cout<<ans<<"\n"; } };
signed main() { ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); #ifdef LOCAL cout.setf(ios::unitbuf); #endif
Solve solve; return 0; }
|
心路历程(WA,TLE,MLE……)