結果
| 問題 |
No.332 数列をプレゼントに
|
| コンテスト | |
| ユーザー |
tails
|
| 提出日時 | 2015-12-25 14:30:23 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 5 ms / 2,000 ms |
| コード長 | 892 bytes |
| コンパイル時間 | 1,649 ms |
| コンパイル使用メモリ | 172,676 KB |
| 実行使用メモリ | 5,248 KB |
| 最終ジャッジ日時 | 2024-12-24 07:30:32 |
| 合計ジャッジ時間 | 3,185 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 5 |
| other | AC * 42 |
ソースコード
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a[110];
char h[110];
int n,c;
ll x,y;
void f(int i,ll s,ll t,int p){
if(++c==5000){
map<int,string> h1,h2;
h1[0]=string(n,'x');
for(int i=0;i<n;++i){
int v=a[i]>>8;
int j=a[i]&255;
y-=v;
for(auto t:h1){
int key=t.first;
if(key+y>=x){
h2[key]=t.second;
}
if(key+v<=x){
h2[key+v]=t.second;
h2[key+v][j]='o';
}
}
h1.swap(h2);h2.clear();
}
{
auto t=h1.find(x);
cout<<(t!=h1.end()?t->second:"No");
}
exit(0);
}
if(i<0){
cout<<h;
exit(0);
}
int v=a[i]>>8;
int j=a[i]&255;
if(s-v>=0&&v!=p){
h[j]='o';
f(i-1,s-v,t,0);
}
if(t-v>=0){
h[j]='x';
f(i-1,s,t-v,v);
}
}
int main(){
cin>>n>>x;
y=0;
for(int i=0;i<n;++i){
int v;
cin>>v;
y+=v;
a[i]=(long long)v<<8|i;
}
if(y>=x){
sort(a,a+n);
f(n-1,x,y-x,0);
}
cout<<"No";
}
tails