結果
| 問題 |
No.1515 Making Many Multiples
|
| コンテスト | |
| ユーザー |
SSRS
|
| 提出日時 | 2021-05-21 21:49:27 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 171 ms / 2,000 ms |
| コード長 | 1,096 bytes |
| コンパイル時間 | 1,753 ms |
| コンパイル使用メモリ | 178,160 KB |
| 実行使用メモリ | 19,328 KB |
| 最終ジャッジ日時 | 2024-10-10 08:20:44 |
| 合計ジャッジ時間 | 4,963 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 28 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
const int INF = 1000000;
int main(){
int N, K, X, Y;
cin >> N >> K >> X >> Y;
vector<int> A(N);
for (int i = 0; i < N; i++){
cin >> A[i];
A[i] %= K;
}
vector<vector<int>> dp(K, vector<int>(K, -INF));
dp[X % K][Y % K] = 0;
vector<int> r(K, -INF), c(K, -INF);
r[X % K] = 0;
c[Y % K] = 0;
for (int i = 0; i < N; i++){
for (int j = 0; j < K; j++){
int k = (K * 2 - j - A[i]) % K;
dp[j][k]++;
r[j] = max(r[j], dp[j][k]);
c[k] = max(c[k], dp[j][k]);
}
vector<tuple<int, int, int>> T;
for (int j = 0; j < K; j++){
T.push_back(make_tuple(A[i], j, r[j]));
T.push_back(make_tuple(A[i], j, c[j]));
}
for (int j = 0; j < K * 2; j++){
int r2 = get<0>(T[j]);
int c2 = get<1>(T[j]);
int x = get<2>(T[j]);
dp[r2][c2] = max(dp[r2][c2], x);
r[r2] = max(r[r2], x);
c[c2] = max(c[c2], x);
}
}
int ans = 0;
for (int i = 0; i < K; i++){
for (int j = 0; j < K; j++){
ans = max(ans, dp[i][j]);
}
}
cout << ans << endl;
}
SSRS