結果
| 問題 | No.332 数列をプレゼントに |
| コンテスト | |
| ユーザー |
uenoku
|
| 提出日時 | 2017-03-28 17:17:31 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.89.0) |
| 結果 |
MLE
|
| 実行時間 | - |
| コード長 | 2,556 bytes |
| 記録 | |
| コンパイル時間 | 849 ms |
| コンパイル使用メモリ | 97,944 KB |
| 実行使用メモリ | 583,760 KB |
| 最終ジャッジ日時 | 2024-07-06 13:25:32 |
| 合計ジャッジ時間 | 31,349 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 5 |
| other | AC * 4 WA * 2 MLE * 36 |
ソースコード
#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;
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;
}
m[0] = 1;
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