結果
| 問題 | No.1515 Making Many Multiples |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-08-12 22:31:26 |
| 言語 | C++23(gcc16) (gcc 16.1.0 + boost 1.90.0) |
| 結果 |
AC
|
| 実行時間 | 70 ms / 2,000 ms |
| + 954µs | |
| コード長 | 1,420 bytes |
| 記録 | |
| コンパイル時間 | 3,368 ms |
| コンパイル使用メモリ | 175,624 KB |
| 実行使用メモリ | 19,072 KB |
| 最終ジャッジ日時 | 2026-08-12 22:31:34 |
| 合計ジャッジ時間 | 5,516 ms |
|
ジャッジサーバーID (参考情報) |
judge2_1 / judge1_1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 28 |
ソースコード
#include<iostream>
#include<vector>
using namespace std;
typedef long long ll;
int mod(int x,int k){
return (x%k+k)%k;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n,k;
ll x,y;
cin>>n>>k>>x>>y;
x=x%k;
y=y%k;
vector<ll> a(n+1);
ll ca;
for(int i=1;i<=n;i++){
cin>>ca;
a[i]=ca%k;
}
vector<vector<int>> dp(k+1);
for(int i=0;i<k;i++){
dp[i].resize(k+1);
for(int j=0;j<k;j++){
dp[i][j]=-1*(1<<24);
}
}
dp[x][y]=dp[y][x]=0;
vector<int> best(k+1,-1*(1<<24));
best[x]=best[y]=0;
for(int r=1;r<=n;r++){
int na=a[r];
//算分,其实很难得分
for(int i=0;i<k;i++){
int rem=mod(k-i-na,k);
dp[i][rem]++;
best[i]=max(best[i],dp[i][rem]);
best[rem]=max(best[rem],dp[i][rem]);
}
//dp[na][u]=max(dp[na][u],max_v dp[u][v]) 不在乎v的值,因为是否得分在上边计算了
for(int i=0;i<k;i++){
dp[na][i]=max(dp[na][i],best[i]);
dp[i][na]=dp[na][i];
}
for(int i=0;i<k;i++){
best[i]=max(best[i],dp[na][i]);
best[na]=max(best[na],dp[na][i]);
}
}
int rst=0;
for(int i=0;i<k;i++){
for(int j=0;j<k;j++){
rst=max(rst,dp[i][j]);
}
}
cout<<rst<<endl;
return 0;
}