結果
| 問題 |
No.1172 Add Recursive Sequence
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2020-08-14 23:13:53 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,729 bytes |
| コンパイル時間 | 1,732 ms |
| コンパイル使用メモリ | 172,724 KB |
| 実行使用メモリ | 15,812 KB |
| 最終ジャッジ日時 | 2024-10-10 16:39:06 |
| 合計ジャッジ時間 | 4,230 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | WA * 2 |
| other | AC * 4 WA * 12 |
ソースコード
// 21:41 - 21:56
#include <bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define all(x) x.begin(), x.end()
#define lch (o << 1)
#define rch (o << 1 | 1)
typedef double db;
typedef long long ll;
typedef unsigned int ui;
typedef pair<int, int> pint;
typedef tuple<int, int, int> tint;
const int N = 1e5 + 5;
const int MOD = 1e9 + 7;
const int INF = 0x3f3f3f3f;
const ll INF_LL = 0x3f3f3f3f3f3f3f3f;
vector<int> in[N], out[N];
int l[N], r[N]; // [l, r)
ll a[N], c[N];
ll f[N], g[N];
int main() {
ios::sync_with_stdio(0);
int len, n, m;
cin >> len >> n >> m;
for (int i = 0; i < len; i++)
cin >> a[i];
for (int i = 1; i <= len; i++)
cin >> c[i];
for (int i = 1; i <= m; i++) {
cin >> l[i] >> r[i];
in[l[i]].push_back(i);
out[r[i]].push_back(i);
}
for (int i = len; i < n; i++)
for (int j = 1; j <= len; j++)
a[i] = (a[i] + a[i - j] * c[j]) % MOD;
for (int i = 0; i < n; i++) {
// add in
if (i - len >= 0) {
for (auto j: in[i - len]) {
if (r[j] - l[j] < len) continue;
for (int k = 1; k <= len; k++)
g[i - k] = (g[i - k] + a[len - k]) % MOD;
}
}
// remove out
for (auto j: out[i]) {
if (r[j] - l[j] < len) continue;
int now = r[j] - l[j];
for (int k = 1; k <= len; k++)
g[i - k] = (g[i - k] - a[now - k]) % MOD;
}
// not in g
for (int j = 0; j < len; j++) {
if (i - j < 0) continue;
for (auto k: in[i - j]) {
if (r[k] <= i) continue;
f[i] = (f[i] + a[j]) % MOD;
}
}
// in g
for (int j = 1; j <= len; j++) {
f[i] = (f[i] + g[i - j] * c[j]) % MOD;
g[i] = (g[i] + g[i - j] * c[j]) % MOD;
}
}
for (int i = 0; i < n; i++) {
f[i] = (f[i] % MOD + MOD) % MOD;
cout << f[i] << endl;
}
return 0;
}