結果
問題 |
No.1043 直列大学
|
ユーザー |
![]() |
提出日時 | 2020-05-01 21:51:45 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 997 bytes |
コンパイル時間 | 2,260 ms |
コンパイル使用メモリ | 170,576 KB |
実行使用メモリ | 5,248 KB |
最終ジャッジ日時 | 2024-12-25 03:36:13 |
合計ジャッジ時間 | 3,559 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 12 WA * 16 |
ソースコード
#include<bits/stdc++.h> int main(){ using namespace std; constexpr unsigned long MOD = 1000000007; unsigned long N, M, Sv{1}, Sr{1}; cin >> N >> M; vector<unsigned long> dp1{1}, dp2{1}; dp1.reserve(50000); dp2.reserve(50000); for(unsigned long i{0}, V; i < N; ++i){ cin >> V; dp1.resize(Sv += V); for(unsigned long j{Sv}; j-- > V; )(dp1[j] += dp1[j - V]) %= MOD; } for(unsigned long i{0}, R; i < M; ++i){ cin >> R; dp2.resize(Sr += R); for(unsigned long j{Sr}; j-- > R; )(dp2[j] += dp2[j - R]) %= MOD; } partial_sum(dp1.rbegin(), dp1.rend(), dp1.rbegin()); const auto& access = [&Sv, &dp1](long i) -> unsigned long { if(i < Sv)return dp1[i] %= MOD; return 0; }; unsigned long A, B; cin >> A >> B; unsigned long ans{0}; for(unsigned long i{1}; i < Sr; ++i)ans += dp2[i] * (access(A * i) + MOD - access(B * i + 1)) % MOD; cout << ans << endl; return 0; }