알고리즘/SWEA

[SWEA 4747] 사막에서 만난 지니

히더 2018. 7. 26. 17:43

출처 : https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWSNnKiazq0DFAUr



#include <iostream>

#include <vector>

#include <algorithm>

#include <memory.h>

using namespace std;


int N, result, sum, s1, s2, s3, flag, t;

vector <int>arr;

vector <int> v[2];


void cal(int count, int sss, int start)

{

if (flag == 1) return;

if (count == 3)

{

cout << "#" << t << endl;

for (int i = 0;i < v[0].size();i++)

{

cout << v[0][i];

if (i == v[0].size() - 1) cout << endl;

else cout << " ";

}

for (int i = 0;i < v[1].size();i++)

{

cout << v[1][i];

if (i == v[1].size() - 1) cout << endl;

else cout << " ";

}

for (int i = 0;i < arr.size();i++)

{

cout << arr[i];

if (i == arr.size() - 1) cout << endl;

else cout << " ";

}

flag = 1;

}


if (sss == sum)

{

cal(count + 1, 0, 0);

}


for (int i = start; i < arr.size(); i++)

{

if (flag == 1) return;

if (sss + arr[i] > sum) return;

int tmp = arr[i];

v[count - 1].push_back(tmp); arr.erase(arr.begin()+i);

cal(count, sss + tmp, i);

v[count - 1].pop_back(); arr.insert(arr.begin()+i, tmp);

}

}


int main()

{

int T;


cin >> T; t = 1;

while (T--)

{

cin >> N; sum = 0; s1 = 0;s2 = 0;s3 = 0; flag = 0; int a;

for (int i = 0; i < N; i++) { cin >> a; arr.push_back(a); sum += a; } sum /= 3;

cal(1, 0, 0);

t++;

v[0].clear();v[1].clear(); arr.clear();

}

return 0;

}