結果
| 問題 |
No.1956 猫の額
|
| ユーザー |
googol_S0
|
| 提出日時 | 2022-05-23 22:32:41 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 1,352 ms / 10,000 ms |
| コード長 | 2,457 bytes |
| コンパイル時間 | 2,380 ms |
| コンパイル使用メモリ | 198,752 KB |
| 最終ジャッジ日時 | 2025-01-29 14:29:55 |
|
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 21 |
ソースコード
#include<bits/stdc++.h>
using namespace std;
int main(){
int N,mod,C;
cin>>N>>mod>>C;
vector<int> A(N);
int S=0;
for(int i=0;i<N;i++){
cin>>A[i];
S+=A[i];
}
if(C<=45){
int x;
vector<int> DP(46*50001,0);
DP[0]=1;
for(int i=0;i<N;i++){
for(int k=45;k>=0;k--){
for(int j=50000;j>=0;j--){
if((j+A[i]<=50000)&&(k+1<=45)){
x=(j+A[i])+(k+1)*50001;
DP[x]+=DP[j+k*50001];
if(DP[x]>=mod){
DP[x]-=mod;
}
}
}
}
}
for(int i=1;i<=50000;i++){
if(i>S){
break;
}
cout<<" ";
if(i<=S){
cout<<DP[i+C*50001];
}
}for(int i=0;i<46*50001;i++){
DP[i]=0;
}
DP[0]=1;
for(int i=0;i<N;i++){
for(int k=45;k>=0;k--){
for(int j=50000;j>=0;j--){
if((j+A[i]<=50000)){
x=(j+A[i])+k*50001;
DP[x]+=DP[j+k*50001];
if(DP[x]>=mod){
DP[x]-=mod;
}
}if((k+1<=45)){
x=j+(k+1)*50001;
DP[x]+=DP[j+k*50001];
if(DP[x]>=mod){
DP[x]-=mod;
}
}
DP[j+k*50001]=0;
}
}
}
for(int i=50001;i<=S;i++){
cout<<" ";
cout<<DP[S-i+C*50001];
}
cout<<endl;
}else{
C=N-C;
int x;
vector<int> DP(46*50001,0);
DP[0]=1;
for(int i=0;i<N;i++){
for(int k=45;k>=0;k--){
for(int j=50000;j>=0;j--){
if((j+A[i]<=50000)){
x=(j+A[i])+k*50001;
DP[x]+=DP[j+k*50001];
if(DP[x]>=mod){
DP[x]-=mod;
}
}if((k+1<=45)){
x=j+(k+1)*50001;
DP[x]+=DP[j+k*50001];
if(DP[x]>=mod){
DP[x]-=mod;
}
}
DP[j+k*50001]=0;
}
}
}
for(int i=S-1;i>=50000;i--){
cout<<" ";
cout<<DP[S-i+C*50001];
}
for(int i=0;i<46*50001;i++){
DP[i]=0;
}
DP[0]=1;
for(int i=0;i<N;i++){
for(int k=45;k>=0;k--){
for(int j=50000;j>=0;j--){
if((j+A[i]<=50000)&&(k+1<=45)){
x=(j+A[i])+(k+1)*50001;
DP[x]+=DP[j+k*50001];
if(DP[x]>=mod){
DP[x]-=mod;
}
}
}
}
}
for(int i=min(50000,S)-1;i>=0;i--){
cout<<" ";
cout<<DP[i+C*50001];
}
cout<<endl;
}
}
googol_S0