結果
| 問題 | No.332 数列をプレゼントに |
| コンテスト | |
| ユーザー |
uenoku
|
| 提出日時 | 2017-03-28 17:12:48 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.89.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,552 bytes |
| 記録 | |
| コンパイル時間 | 1,009 ms |
| コンパイル使用メモリ | 98,172 KB |
| 実行使用メモリ | 585,292 KB |
| 最終ジャッジ日時 | 2024-07-06 13:23:56 |
| 合計ジャッジ時間 | 36,719 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 WA * 2 |
| other | AC * 4 MLE * 38 |
ソースコード
#include <algorithm>
#include <cmath>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <string>
#include <vector>
#define rep(i, n) for (long long int i = 0; i < (n); i++)
#define rrep(i, n) for (long long int i = (n)-1; i >= 0; i--)
using namespace std;
using lli = long long int;
struct node {
lli sum = 0;
lli mask = 0;
};
bool can[101][5000005] = {};
int main()
{
lli n, x;
cin >> n >> x;
lli k = x;
vector<lli> small, big;
lli a[105];
rep(i, n)
{
cin >> a[i];
if (a[i] > 5 * 1e4)
big.push_back(a[i]);
else
small.push_back(a[i]);
}
int nb = big.size();
vector<node> data;
map<lli, lli> m;
m[0] = 1;
rep(i, (1 << nb))
{
node tmp;
tmp.mask = i;
rep(j, nb)
{
if ((i >> j) & 1) {
tmp.sum += big[j];
}
}
// cout << tmp.sum << " " << tmp.mask << endl;
// cout << i << endl;
m[tmp.sum] = i;
//cout << m[1e10] << endl;
}
int ns = small.size();
can[0][0] = true;
rep(i, ns)
{
rep(j, 5 * 1e6)
{
can[i + 1][j] |= can[i][j];
if (can[i][j] && j + a[i] < 5 * 1e6) {
can[i + 1][j + a[i]] = true;
}
}
}
//cout << m[1e10] << endl;
rep(j, 5 * 1e6)
{
if (can[ns][j]) {
if (m[k - j]) {
//cout << "#k-j=" << k - j << endl;
lli mask = m[k - j];
//cout << m[k - j] << endl;
if (k == j) {
mask = 0;
}
///cout << mask << endl;
map<lli, lli> cntUse;
rep(l, nb)
{
if ((mask >> l) & 1) {
cntUse[big[l]]++;
}
}
rrep(l, ns + 1)
{
if (l == 0)
continue;
if (j - a[l - 1] >= 0 && can[l - 1][j - a[l - 1]]) {
cntUse[a[l - 1]]++;
}
}
string ans(n, 'x');
rep(i, n)
{
if (cntUse[a[i]] > 0) {
ans[i] = 'o';
cntUse[a[i]]--;
}
}
cout << ans << endl;
return 0;
}
}
}
cout << "No" << endl;
}
uenoku