Advertisement
Fastrail08

Equal Sum K partition

May 10th, 2025
200
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.98 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. int calculateSum(vector<int> &v){
  5.     int sum = 0;
  6.     for(int i : v){
  7.         sum += i;
  8.     }
  9.     return sum;
  10. }
  11.  
  12. void kPartitionEqualSum(int index, int k, vector<int> &v, vector<vector<int> > &result){
  13.     if(index >= v.size()){
  14.         // result is storing all the partitions in the form of vector, so each vector is a partition
  15.         if(k == 0){
  16.             int sum = 0;
  17.             bool allEqualSum = true;
  18.             for(int i = 0; i < result.size(); i++){
  19.                 int partSum = calculateSum(result[i]);
  20.                 if(i == 0){
  21.                     sum = partSum;
  22.                 }
  23.                 else{
  24.                     if(sum != partSum){
  25.                         allEqualSum = false;
  26.                         break;
  27.                     }
  28.                 }
  29.             }
  30.            
  31.             if(allEqualSum){
  32.                     for(int i = 0; i < result.size(); i++){
  33.                     cout << '[';
  34.                     for(int j : result[i]){
  35.                         cout << j << ",";
  36.                     }
  37.                     cout << ']';
  38.                 }
  39.                 cout << '\n';
  40.             }
  41.         }
  42.         return;
  43.     }
  44.    
  45.     // separate partition
  46.     if(k > 0){
  47.         vector<int> newPartition = {v[index]};
  48.         result.push_back(newPartition);
  49.         kPartitionEqualSum(index + 1, k - 1, v, result);
  50.         result.pop_back();
  51.     }
  52.    
  53.     // all the previously created partition
  54.     if(result.size() > 0){
  55.         for(int i = 0; i < result.size(); i++){
  56.             result[i].push_back(v[index]);
  57.             kPartitionEqualSum(index + 1, k, v, result);
  58.             result[i].pop_back();
  59.         }
  60.     }
  61. }
  62.  
  63. int main() {
  64.     // your code goes here
  65.      int n, k;
  66.      cin >> n;
  67.      vector<int> v(n);
  68.      for(int i = 0; i < n; i++){
  69.          cin >> v[i];
  70.      }
  71.      cin >> k;
  72.      vector<vector<int> >  result;
  73.      kPartitionEqualSum(0, k, v, result);
  74. }
  75.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement