Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _USE_MATH_DEFINES
- #include <iostream>
- #include <string>
- #include <map>
- #include <set>
- #include <algorithm>
- #include <vector>
- #include <stdio.h>
- #include <cmath>
- #include <math.h>
- #include <queue>
- #include <stack>
- #include <climits>
- #include <deque>
- #include <ctime>
- using namespace std;
- typedef long long ll;
- typedef unsigned long long ull;
- typedef unsigned int ui;
- #define mh() make_heap()
- #define poph() pop_heap()
- #define pushh() push_heap()
- #define sor(n) n.begin(), n.end()
- #define rsor(n) n.rbegin(), n.rend()
- #define mp make_pair
- #define files freopen("input.txt", "rt", stdin); freopen("output.txt", "wt", stdout)
- #define p(T) pair<T,T>
- #define znac(l) abs(l)/l
- const ll ok = ll(1e9 + 7);
- int main()
- {
- //files;
- ll n;
- cin >> n;
- ll arr[2001];
- ll sum = 0;
- for (int i = 0; i < n; i++)
- {
- cin >> arr[i];
- sum += arr[i];
- }
- vector<ll>way(sum + 1);
- vector<ll>pos(sum + 1);
- if (sum == 0)
- {
- for (int i = 0; i < n; i++)
- {
- cout << "+";
- }
- return 0;
- }
- for (int i = 0; i < sum+1; ++i)
- way[i] = 0;
- way[0] = 1;
- for (int i = 0; i < n; ++i)
- for (ll j = sum; j > 0; --j)
- {
- if (arr[i] != 0)
- if (j >= arr[i] && way[j - arr[i]] != 0&&way[j]==0)
- {
- way[j] = arr[i];
- pos[j] = i;
- }
- }
- ll j = sum / 2;
- while (j != 0)
- {
- arr[pos[j]] = -arr[pos[j]];
- j -= way[j];
- }
- string h = "";
- for (int i = 0; i < n; i++)
- {
- if (arr[i] < 0)
- h += "-";
- else
- {
- h += "+";
- }
- }
- cout << h;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment