Problem p03078 (C++)

Buggy submission (status: Time Limit Exceeded):
#include <bits/stdc++.h>
using namespace std;
#define ll long long int
#define all(x) (x).begin(), (x).end()
// ** Solution Number 1
// int main()
// {
//    int x,y,z,k;
//    cin >> x >> y >> z >> k;
//    ll a[x],b[y],c[z];
//     for(int i=0;i<x;i++)cin >> a[i];
//     for(int i=0;i<y;i++)cin >> b[i];
//     for(int i=0;i<z;i++)cin >> c[i];

//     sort(a,a+x,greater<ll>());
//     sort(b,b+y,greater<ll>());
//     sort(c,c+z,greater<ll>());

//     vector<ll> ans;

//     for(int i=0;i<x;i++)
//     {
//         for(int j=0;j<y;j++)
//         {
//             for(int t=0;t<z;t++)
//             {
//                 if((i+1)*(j+1)*(t+1)<=k)ans.push_back(a[i]+b[j]+c[t]);
//                 else break;
//             }
//         }
//     }

//     sort(ans.begin(),ans.end(),greater<ll>());
//     //for(int i=0;i<k;i++)cout << ans[i] << endl;
//     //cout << k << "  " << ans.size();

// }

// Solution Number 2

int main() {
  int x, y, z, k;
  cin >> x >> y >> z >> k;
  ll a[x], b[y], c[z];
  for (int i = 0; i < x; i++)
    cin >> a[i];
  for (int i = 0; i < y; i++)
    cin >> b[i];
  for (int i = 0; i < z; i++)
    cin >> c[i];
  vector<ll> xy, xyz;
  for (int i = 0; i < x; i++) {
    for (int j = 0; j < y; j++) {
      xy.push_back(a[i] + b[j]);
    }
  }

  sort(all(xy), greater<ll>());

  for (int i = 0; i < (int)xy.size(); i++) {
    for (int j = 0; j < z; j++) {
      xyz.push_back(xy[i] + c[j]);
    }
  }

  sort(all(xyz), greater<ll>());
  for (int i = 0; i < k; i++)
    cout << xyz[i] << endl;
}


Fixed submission:
#include <bits/stdc++.h>
using namespace std;
#define ll long long int
#define all(x) (x).begin(), (x).end()
// ** Solution Number 1
// int main()
// {
//    int x,y,z,k;
//    cin >> x >> y >> z >> k;
//    ll a[x],b[y],c[z];
//     for(int i=0;i<x;i++)cin >> a[i];
//     for(int i=0;i<y;i++)cin >> b[i];
//     for(int i=0;i<z;i++)cin >> c[i];

//     sort(a,a+x,greater<ll>());
//     sort(b,b+y,greater<ll>());
//     sort(c,c+z,greater<ll>());

//     vector<ll> ans;

//     for(int i=0;i<x;i++)
//     {
//         for(int j=0;j<y;j++)
//         {
//             for(int t=0;t<z;t++)
//             {
//                 if((i+1)*(j+1)*(t+1)<=k)ans.push_back(a[i]+b[j]+c[t]);
//                 else break;
//             }
//         }
//     }

//     sort(ans.begin(),ans.end(),greater<ll>());
//     //for(int i=0;i<k;i++)cout << ans[i] << endl;
//     //cout << k << "  " << ans.size();

// }

// Solution Number 2

int main() {
  int x, y, z, k;
  cin >> x >> y >> z >> k;
  ll a[x], b[y], c[z];
  for (int i = 0; i < x; i++)
    cin >> a[i];
  for (int i = 0; i < y; i++)
    cin >> b[i];
  for (int i = 0; i < z; i++)
    cin >> c[i];
  vector<ll> xy, xyz;
  for (int i = 0; i < x; i++) {
    for (int j = 0; j < y; j++) {
      xy.push_back(a[i] + b[j]);
    }
  }

  sort(all(xy), greater<ll>());
  sort(c, c + z, greater<ll>());
  ll cnt = 0;
  bool ok = true;
  for (int i = 0; i < min(k, (int)xy.size()); i++) {
    for (int j = 0; j < z; j++) {
      xyz.push_back(xy[i] + c[j]);
    }
  }

  sort(all(xyz), greater<ll>());
  for (int i = 0; i < k; i++)
    cout << xyz[i] << endl;
}