- 幸运数字(four)
一个使用`std::sort`的代码
- @ 2026-9-9 17:33:24
#include <bits/stdc++.h>
using namespace std;
using uint = unsigned int;
using ll = long long;
using ull = unsigned long long;
constexpr size_t N = 45, K = (1 << 20) + 10;
int n;
int a[N];
ll a1[K], a2[K];
int c1, c2;
ll res;
void calc(int *a, ll v[], int &c, int len)
{
c = 1;
for (int i = 1; i <= len; i++)
{
for (int j = 1; j <= c; j++)
{
v[c + j] = v[j] + a[i];
}
c <<= 1;
}
}
void compute(ll a, ll b)
{
int l = c2 + 1, r = c2;
for (int i = 1; i <= c1; i++)
{
while (l > 1 && a1[i] + a2[l - 1] >= a)
{
l--;
}
while (r >= l && a1[i] + a2[r] >= b)
{
r--;
}
res += r - l + 1;
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n;
for (int i = 1; i <= n; i++)
{
cin >> a[i];
}
int l = n >> 1, r = n - l;
calc(a, a1, c1, l);
calc(a + l, a2, c2, r);
ll x = 10000000000;
for (int k = 9; k >= 0; k--)
{
if (k < 9)
{
for (int i = 1; i <= c1; i++)
{
a1[i] %= x;
}
for (int i = 1; i <= c2; i++)
{
a2[i] %= x;
}
}
sort(a1 + 1, a1 + c1 + 1);
sort(a2 + 1, a2 + c2 + 1);
x /= 10;
compute(x * 4, x * 5);
compute(x * 14, x * 15);
}
cout << res << '\n';
return 0;
}
0 条评论
目前还没有评论...
信息
- ID
- 2730
- 时间
- ms
- 内存
- MiB
- 难度
- 7
- 标签
- (无)
- 递交数
- 35
- 已通过
- 5
- 上传者