結果
問題 | No.1535 五七五 |
ユーザー | sten_san |
提出日時 | 2021-06-06 18:41:37 |
言語 | C++17(gcc12) (gcc 12.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 825 ms / 2,000 ms |
コード長 | 1,981 bytes |
コンパイル時間 | 2,473 ms |
コンパイル使用メモリ | 218,912 KB |
実行使用メモリ | 69,764 KB |
最終ジャッジ日時 | 2024-11-23 03:32:02 |
合計ジャッジ時間 | 9,398 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 2 ms
5,248 KB |
testcase_01 | AC | 2 ms
5,248 KB |
testcase_02 | AC | 2 ms
5,248 KB |
testcase_03 | AC | 2 ms
5,248 KB |
testcase_04 | AC | 750 ms
42,292 KB |
testcase_05 | AC | 825 ms
48,520 KB |
testcase_06 | AC | 741 ms
42,296 KB |
testcase_07 | AC | 2 ms
5,248 KB |
testcase_08 | AC | 2 ms
5,248 KB |
testcase_09 | AC | 2 ms
5,248 KB |
testcase_10 | AC | 2 ms
5,248 KB |
testcase_11 | AC | 2 ms
5,248 KB |
testcase_12 | AC | 2 ms
5,248 KB |
testcase_13 | AC | 2 ms
5,248 KB |
testcase_14 | AC | 2 ms
5,248 KB |
testcase_15 | AC | 2 ms
5,248 KB |
testcase_16 | AC | 2 ms
5,248 KB |
testcase_17 | AC | 2 ms
5,248 KB |
testcase_18 | AC | 565 ms
69,396 KB |
testcase_19 | AC | 685 ms
68,356 KB |
testcase_20 | AC | 561 ms
68,120 KB |
testcase_21 | AC | 553 ms
67,984 KB |
testcase_22 | AC | 534 ms
66,056 KB |
testcase_23 | AC | 599 ms
69,764 KB |
ソースコード
#include <bits/stdc++.h>using namespace std;struct iofast_t {iofast_t() {ios::sync_with_stdio(false);cin.tie(nullptr);}} iofast;struct uns_t {} uns;template <typename Element, typename Head, typename ...Args>auto vec(Element init, Head arg, Args ...args) {if constexpr (sizeof...(Args) == 0) return std::vector(arg, init);else return std::vector(arg, vec(init, args...));}template <typename Element, typename Head, typename ...Args>auto vec(uns_t, Head arg, Args ...args) {return vec(Element(), arg, args...);}template <typename T, typename Compare = less<T>>T &chmin(T &l, T r, Compare &&f = less<T>()) { return l = min(l, r, f); }template <typename T, typename Compare = less<T>>T &chmax(T &l, T r, Compare &&f = less<T>()) { return l = max(l, r, f); }int main() {int n; cin >> n;int a, b, c; cin >> a >> b >> c;auto s = vec<int>(uns, n);for (auto &e : s) {string t; cin >> t;e = size(t);}auto make = [](const auto &v, int x) {int n = size(v);auto acc = vec<int>(uns, n + 1);acc[0] = 0;for (int i = 0; i < n; ++i) {acc[i + 1] = acc[i] + v[i];}auto dp = vec<int>(uns, n + 1);map<int, int> count;for (int i = 0; i <= n; ++i) {dp[i] = count[acc[i]];++count[acc[i] + x];}return dp;};auto dp1 = make(s, a);reverse(begin(s), end(s));auto dp2 = make(s, c);reverse(begin(s), end(s));reverse(begin(dp2), end(dp2));int64_t ans = 0;auto acc = vec<int>(uns, n + 1);acc[0] = 0;for (int i = 0; i < n; ++i) {acc[i + 1] = acc[i] + s[i];}map<int, int64_t> count;count[acc[0] + b] += dp1[0];count[acc[1] + b] += dp1[1];for (int i = 2; i < n; ++i) {ans += count[acc[i]] * dp2[i];count[acc[i] + b] += dp1[i];}cout << ans << endl;}