結果
| 問題 | No.332 数列をプレゼントに |
| コンテスト | |
| ユーザー |
akakimidori
|
| 提出日時 | 2019-01-10 02:47:52 |
| 言語 | C (gcc 13.3.0) |
| 結果 |
RE
|
| 実行時間 | - |
| コード長 | 1,365 bytes |
| コンパイル時間 | 243 ms |
| コンパイル使用メモリ | 31,360 KB |
| 実行使用メモリ | 5,248 KB |
| 最終ジャッジ日時 | 2024-11-24 01:04:07 |
| 合計ジャッジ時間 | 8,782 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 5 |
| other | AC * 19 WA * 15 RE * 8 |
ソースコード
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef long long int int64;
#define MAX(a,b) ((a)>(b)?(a):(b))
#define MIN(a,b) ((a)<(b)?(a):(b))
#define ABS(a) ((a)>(0)?(a):-(a))
#define POS(i,j) ((i)*(100*blen+1)+(j))
void run(void){
int n;
int64 x;
scanf("%d%lld",&n,&x);
int a[100];
int i,j;
for(i=0;i<n;i++) scanf("%d",a+i);
int b[100],c[10];
int blen=0;
int clen=0;
for(i=0;i<n;i++){
if(a[i]<=100){
b[blen++]=i;
} else {
c[clen++]=i;
}
}
char *dp=(char *)calloc((blen+1)*(100*blen+1),sizeof(char));
dp[POS(0,0)]=1;
for(i=0;i<blen;i++){
memcpy(dp+POS(i+1,0),dp+POS(i,0),100*blen+1);
int x=a[b[i]];
for(j=100*blen;j>=x;j--){
if(dp[POS(i,j-x)]){
dp[POS(i+1,j)]=1;
}
}
}
for(i=0;i<(1<<clen);i++){
int64 sum=0;
for(j=0;j<clen;j++){
if((i>>j)&1){
sum+=a[c[j]];
}
}
if(x-sum>=0 && x-sum<=100*blen && dp[POS(blen,(int)(x-sum))]){
x-=sum;
break;
}
}
if(i>=(1<<clen)){
printf("No\n");
return;
}
char *ans=(char *)calloc(n+1,sizeof(char));
for(j=0;j<clen;j++){
ans[c[j]]=((i>>j)&1)?'o':'x';
}
int y=(int)x;
for(i=blen-1;i>=0;i--){
if(dp[POS(i,y-a[b[i]])]){
ans[b[i]]='o';
y-=a[b[i]];
} else {
ans[b[i]]='x';
}
}
puts(ans);
}
int main(void){
run();
return 0;
}
akakimidori