結果
| 問題 |
No.10 +か×か
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2015-09-26 20:20:23 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 82 ms / 5,000 ms |
| コード長 | 1,597 bytes |
| コンパイル時間 | 1,439 ms |
| コンパイル使用メモリ | 160,164 KB |
| 実行使用メモリ | 43,448 KB |
| 最終ジャッジ日時 | 2024-12-14 15:31:22 |
| 合計ジャッジ時間 | 2,444 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 12 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
#define repu(i, a, b) for (int i = (a); i < (b); ++i)
#define repd(i, a, b) for (int i = (a); i > (b); --i)
#define mem(a, x) memset(a, x, sizeof(a))
#define all(a) a.begin(), a.end()
#define uni(a) a.erase(unique(all(a)), a.end())
typedef long long ll;
const int MOD = 1000000007;
template<class T, class U> inline T tmin(T a, U b) {return (a < b) ? a : b;}
template<class T, class U> inline T tmax(T a, U b) {return (a > b) ? a : b;}
template<class T, class U> inline void amax(T &a, U b) {if (b > a) a = b;}
template<class T, class U> inline void amin(T &a, U b) {if (b < a) a = b;}
template<class T> inline T tabs(T a) {return (a > 0) ? a : -a;}
template<class T> T gcd(T a, T b) {while (b != 0) {T c = a; a = b; b = c % b;} return a;}
const int N = 100001;
ll a[N], dp[51][N];
int main(int argc, char *argv[]) {
ios_base::sync_with_stdio(false);
int n, total;
cin >> n >> total;
repu(i, 1, n + 1) cin >> a[i];
mem(dp, -1);
dp[1][a[1]] = 0;
repu(i, 2, n + 1) {
repu(t, 1, total + 1) {
ll tmp = dp[i][t];
if (t % a[i] == 0 && dp[i - 1][t / a[i]] != -1) {
if (tmp == -1) tmp = dp[i - 1][t / a[i]] | (1LL << (n - i));
else amin(tmp, dp[i - 1][t / a[i]] | (1LL << (n - i)));
}
if (t > a[i] && dp[i - 1][t - a[i]] != -1) {
if (tmp == -1) tmp = dp[i - 1][t - a[i]];
else amin(tmp, dp[i - 1][t - a[i]]);
}
dp[i][t] = tmp;
}
}
string ret = "";
ll cnt = dp[n][total];
repd(i, n - 2, -1) {
if (cnt & (1LL << i)) ret += '*';
else ret += '+';
}
printf("%s\n", ret.c_str());
return 0;
}