結果
| 問題 | No.10 +か×か |
| コンテスト | |
| ユーザー |
akakimidori
|
| 提出日時 | 2016-12-11 23:42:54 |
| 言語 | C90 (gcc 12.4.0) |
| 結果 |
AC
|
| 実行時間 | 9 ms / 5,000 ms |
| コード長 | 796 bytes |
| 記録 | |
| コンパイル時間 | 358 ms |
| コンパイル使用メモリ | 37,824 KB |
| 実行使用メモリ | 20,356 KB |
| 最終ジャッジ日時 | 2025-12-06 14:35:37 |
| 合計ジャッジ時間 | 876 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 13 |
ソースコード
#include<stdio.h>
#include<stdlib.h>
#define POS(i,j) ((i)*(total+1)+(j))
void run(void){
int n,total;
scanf("%d%d",&n,&total);
int *A=(int *)malloc(sizeof(int)*(n+1));
int i;
for(i=1;i<=n;i++){
scanf("%d",A+i);
}
int *dp=(int *)calloc((total+1)*(n+1),sizeof(int));
dp[POS(n,total)]=1;
for(i=n;i>=2;i--){
int k;
for(k=total;k>=0;k--){
if(dp[POS(i,k)]){
if(k-A[i]>=0){
dp[POS(i-1,k-A[i])]=1;
}
if(k%A[i]==0){
dp[POS(i-1,k/A[i])]=1;
}
}
}
}
int now=A[1];
for(i=2;i<=n;i++){
int t=now+A[i];
if(t<=total && dp[POS(i,t)]){
printf("+");
now=t;
} else {
printf("*");
now=now*A[i];
}
}
printf("\n");
return;
}
int main(void){
run();
return 0;
}
akakimidori