Submission #701508

#TimeUsernameProblemLanguageResultExecution timeMemory
701508CyanmondFancy Fence (CEOI20_fancyfence)C++17
30 / 100
75 ms2004 KiB
#include <bits/stdc++.h> using i64 = long long; constexpr i64 mod = 1000000007; i64 add(i64 a, i64 b) { return (a + b) % mod; } i64 sub(i64 a, i64 b) { return (a + mod - b) % mod; } i64 mul(i64 a, i64 b) { return (a * b) % mod; } void eadd(i64 &a, i64 b) { a = add(a, b); } void esub(i64 &a, i64 b) { a = sub(a, b); } void emul(i64 &a, i64 b) { a = mul(a, b); } i64 calcPaint(i64 x, i64 y) { return mul((1 + x) * x / 2 % mod, (1 + y) * y / 2 % mod); } int main() { int N; std::cin >> N; std::vector<i64> H(N), W(N); for (auto &e : H) { std::cin >> e; } for (auto &e : W) { std::cin >> e; } if (std::all_of(H.begin(), H.end(), [&](auto x) { return x == H[0]; })) { // subtask 4 i64 X = H[0], Y = std::accumulate(W.begin(), W.end(), 0ll) % mod; std::cout << calcPaint(X, Y) << std::endl; return 0; } bool isSubtask5 = true; for (int i = 1; i < N; ++i) { if (H[i] < H[i - 1]) { isSubtask5 = false; } } if (isSubtask5) { i64 wSum = 0, answer = 0; for (int i = N - 1; i >= 0; --i) { i64 a = calcPaint(H[i], wSum + W[i]), b = calcPaint(H[i], wSum); esub(a, b); eadd(answer, a); eadd(wSum, W[i]); } std::cout << answer << std::endl; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...