热卖商品
新闻详情
【codeforces 776C】Molly\'s Chemicals 题解_rosekc的博客-CSDN博客
来自 : CSDN技术社区
发布时间:2021-03-24
看题目 就是求符合条件的区间和问题。穷举明显会爆炸 求区间和的典型做法线段树也不行 查询太多也会爆炸。当时做的时候上网找到一个办法 就是求前缀和。
sum[i] a1 ... ai ai ... aj 便转化为求 sum[j]−sum[i−1] 的问题 sum[i] 可以很方便地用 sum[i] sum[i−1] an 求得。至此 问题转化为 求符合 i,j(0≤i j≤n),sum[j]−sum[i] kx i,j,x 个数。转化完成了 接着怎么做 明显穷举是不行的 搞那么多当然有更高的姿势水平啦T_T。把式子转换一下 得 sum[j] kx sum[i] sum[j] kx sum[i] 把符合条件的 罗列下就好了。
#include bits/stdc++.h using namespace std;const int maxn = 10e5 + 10;long long sum[maxn];map long long, vector int m;int main() int n, k, t; scanf(\"%d%d\", n, for (int i = 1; i i++) scanf(\"%d\", sum[i] = sum[i - 1] + t; m[sum[i]].push_back(i); long long re = 0; long long tt = 1; while (1) for (int i = 1; i i++) auto ptr = m.find(sum[i - 1] + tt); if (ptr == m.end()) continue; auto ttt = ptr- second; for (auto it = ttt.begin(); it != ttt.end(); it++) if (*it = i) re++; //printf(\"%d\\n\", re); if (tt (10e14 / abs(k)) || tt (-10e14 / abs(k))) break; tt *= k; printf(\"%lld\\n\", re);}
这段代码参考了网上某个前缀和的代码,把数值相同的sum[i]丢进了map容器里 并把 的值丢进对应的vector容器。之后用kx+sum[i]去找 sum[j] 的值 注意 找到符合条件的 结果加一就好了。
看似很美好,结果在过这个数据时候就爆炸了。
2017年2月25日C. Molly’s Chemicals time limit per test 2.5 seconds memory limit per test 512 megabytes input standard input output standard output ...【codeforces 776C】Molly's Chemicals 题解【codeforces 776C】Molly’s Chemicals 题解【codeforces 776C】Molly's Chemicals 题解
本文链接: http://rosechemicals.immuno-online.com/view-718111.html
发布于 : 2021-03-24
阅读(0)
最新动态
2021-03-24
2021-03-24
2021-03-24
2021-03-24
2021-03-24
2021-03-24
2021-03-24
2021-03-24
2021-03-24
2021-03-24
2021-03-24
2021-03-24
联络我们