Atcoder ABC169

A

  直接输出a×b即可

int a, b; std::cin >> a >> b; std::cout << a * b << "\n";

B

  将所有的N个数乘起来看是不是大于1018,很明显会爆long long而用高精度的话也太麻烦了,所以可以考虑用__int128_t,但也有可能会出现最后一个数是0,前面所有数乘起来大于1018的情况,所以将所有的数先排序,排完序之后再乘起来.

int n; std::cin >> n; std::vector<int64_t> a(n); for (int i = 0; i < n; i++ ) std::cin >> a[i]; std::sort(all(a)); i128 ANS = 1; for (int i = 0; i < n; i++ ) { if (ANS * a[i] > INF || ANS * a[i] < 0) return std::cout << "-1\n", 0; ANS *= a[i]; } std::cout << ANS << "\n";

C

  看起来是一个可以直接乘起来的题,但是会因为double丢精度,所以我们要把double先转化成int再做乘法.

i64 a; std::string b; std::cin >> a >> b; int B = 0; for (auto c : b) { if (c == '.') continue; B = B * 10 + (c - '0'); } std::cout << a * B / 100 << "\n";

D

  我们要将N尽可能多的执行操作,而N = p1k1p2k2pmkm,一定是让最小的尽可能的用,所以从2开始枚举,让N每次除以它的倍数,这样我们就可以做到O(N)的复杂度

signed main() { std::cin.tie(nullptr) -> sync_with_stdio(false); i64 N; std::cin >> N; i64 ans = 0; for (int i = 2; i * 1ll * i <= N; i++ ) { for (i64 j = i; N % j == 0; j *= i) ans ++, N /= j; while(N % i == 0) N /= i; } std::cout << ans + (N != 1) << "\n"; return 0 ^ 0; }

E

  结论题,我们可以取得最小中位数和最大中位数之间的所有中位数,都可以被取到.所以,我们按照这个写一个程序,先算出最小取到的中位数和最大取到的中位数,然后用分类讨论,等差数列求项数公式求出即可。(偶数的情况公差是0.5,奇数的情况公差是1)。

signed main() { std::cin.tie(nullptr) -> sync_with_stdio(false); int N; std::cin >> N; std::vector<int> A(N), B(N); rep(i,0,N) { std::cin >> A[i] >> B[i]; } std::sort(all(A)); std::sort(all(B)); std::cout << (N & 1 ? B[N / 2] - A[N / 2] + 1 : B[N / 2] + B[N / 2 - 1] - A[N / 2] - A[N / 2 - 1] + 1) << "\n"; return 0 ^ 0; }

F

  我们要求出在2N1个集合中Ak1+Ak2++Akm=s的个数,很容易想到要用dp来求解,我们设状态dp[i][j]来表示选到第i个数的时候和为j的方案有多少个,就相当于转化成了一个背包问题。

signed main() { std::cin.tie(nullptr) -> sync_with_stdio(false); int N, s; std::cin >> N >> s; std::vector<int> a(N + 1); rep(i,1,N + 1) std::cin >> a[i]; std::vector<std::vector<Z>> dp(N + 1, std::vector<Z> (s + 1)); dp[0][0] = 1; for (int i = 1; i <= N; i++ ) { for (int j = s; j >= 0; j -- ) { dp[i][j] += dp[i - 1][j] * 2; // 当前这个数加不加进来 两种方案 if (j + a[i] <= s) dp[i][j + a[i]] += dp[i - 1][j]; } } std::cout << dp[N][s] << "\n"; return 0 ^ 0; }

__EOF__

本文作者HoneyGrey
本文链接https://www.cnblogs.com/Haven-/p/16588273.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   浅渊  阅读(26)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示