/******************************************************************************
Online C++ Compiler.
Code, Compile, Run and Debug C++ program online.
Write your code in this editor and press "Run" button to compile and execute it.
*******************************************************************************/
#include <iostream>
#include <vector>
#include <sstream>
#include <cassert>
void Rec(std::vector<int>& arr, int k, int start, int depth, std::vector<int>& indices) {
int n = arr.size();
if (depth == k) {
int sum = 0;
for (int idx : indices) {
sum += arr[idx];
}
if (sum == 0) {
for (int idx : indices) {
std::cout << idx << " ";
}
std::cout << std::endl;
}
return;
}
for (int i = start; i < n; ++i) {
indices.push_back(i);
Rec(arr, k, i + 1, depth + 1, indices);
indices.pop_back();
}
}
void findSubarrays(std::vector<int>& arr, int k) {
std::vector<int> indices;
Rec(arr, k, 0, 0, indices);
}
std::string captureOutput(std::vector<int> arr, int k) {
std::ostringstream buffer;
std::streambuf* prevcoutbuf = std::cout.rdbuf(buffer.rdbuf());
//buffer — строковый поток, куда будет направляться вывод вместо std::cout.
//prevcoutbuf сохраняет стандартный поток вывода, чтобы потом его вернуть.
findSubarrays(arr, k);
std::cout.rdbuf(prevcoutbuf);
return buffer.str();
}
void runTests() {
// Все нули
{
std::vector<int> arr = {0, 0, 0};
int k = 2;
std::string output = captureOutput(arr, k);
assert(!output.empty() && "Test 1 failed");
}
// Нет подмножеств с суммой 0
{
std::vector<int> arr = {1, 2, 3};
int k = 2;
std::string output = captureOutput(arr, k);
assert(output.empty() && "Test 2 failed");
}
// Есть подмножество с суммой 0
{
std::vector<int> arr = {1, -1, 2, -2};
int k = 2;
std::string output = captureOutput(arr, k);
assert(!output.empty() && "Test 3 failed");
}
// Один элемент 0
{
std::vector<int> arr = {0};
int k = 1;
std::string output = captureOutput(arr, k);
assert(!output.empty() && "Test 4 failed");
}
// Большие значения
{
std::vector<int> arr = {1000000, -1000000, 500000, -500000};
int k = 2;
std::string output = captureOutput(arr, k);
assert(!output.empty() && "Test 5 failed");
}
// Пустой массив
{
std::vector<int> arr = {};
int k = 1;
std::string output = captureOutput(arr, k);
assert(output.empty() && "Test 6 failed");
}
// k больше, чем размер массива
{
std::vector<int> arr = {1, -1};
int k = 3;
std::string output = captureOutput(arr, k);
assert(output.empty() && "Test 7 failed");
}
std::cout << "All tests passed!\n";
}
int main() {
runTests();
int n, k;
std::cin >> n;
std::cin >> k;
std::vector<int> arr(n);
for (int i = 0; i < n; ++i) {
std::cin >> arr[i];
}
findSubarrays(arr, k);
}
LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT25saW5lIEMrKyBDb21waWxlci4KICAgICAgICAgICAgICAgQ29kZSwgQ29tcGlsZSwgUnVuIGFuZCBEZWJ1ZyBDKysgcHJvZ3JhbSBvbmxpbmUuCldyaXRlIHlvdXIgY29kZSBpbiB0aGlzIGVkaXRvciBhbmQgcHJlc3MgIlJ1biIgYnV0dG9uIHRvIGNvbXBpbGUgYW5kIGV4ZWN1dGUgaXQuCgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPHNzdHJlYW0+CiNpbmNsdWRlIDxjYXNzZXJ0PgoKdm9pZCBSZWMoc3RkOjp2ZWN0b3I8aW50PiYgYXJyLCBpbnQgaywgaW50IHN0YXJ0LCBpbnQgZGVwdGgsIHN0ZDo6dmVjdG9yPGludD4mIGluZGljZXMpIHsKICAgIGludCBuID0gYXJyLnNpemUoKTsKICAgIGlmIChkZXB0aCA9PSBrKSB7CiAgICAgICAgaW50IHN1bSA9IDA7CiAgICAgICAgZm9yIChpbnQgaWR4IDogaW5kaWNlcykgewogICAgICAgICAgICBzdW0gKz0gYXJyW2lkeF07CiAgICAgICAgfQogICAgICAgIGlmIChzdW0gPT0gMCkgewogICAgICAgICAgICBmb3IgKGludCBpZHggOiBpbmRpY2VzKSB7CiAgICAgICAgICAgICAgICBzdGQ6OmNvdXQgPDwgaWR4IDw8ICIgIjsKICAgICAgICAgICAgfQogICAgICAgICAgICBzdGQ6OmNvdXQgPDwgc3RkOjplbmRsOwogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICB9CiAgICBmb3IgKGludCBpID0gc3RhcnQ7IGkgPCBuOyArK2kpIHsKICAgICAgICBpbmRpY2VzLnB1c2hfYmFjayhpKTsKICAgICAgICBSZWMoYXJyLCBrLCBpICsgMSwgZGVwdGggKyAxLCBpbmRpY2VzKTsKICAgICAgICBpbmRpY2VzLnBvcF9iYWNrKCk7CiAgICB9Cn0KCnZvaWQgZmluZFN1YmFycmF5cyhzdGQ6OnZlY3RvcjxpbnQ+JiBhcnIsIGludCBrKSB7CiAgICBzdGQ6OnZlY3RvcjxpbnQ+IGluZGljZXM7CiAgICBSZWMoYXJyLCBrLCAwLCAwLCBpbmRpY2VzKTsKfQoKc3RkOjpzdHJpbmcgY2FwdHVyZU91dHB1dChzdGQ6OnZlY3RvcjxpbnQ+IGFyciwgaW50IGspIHsKICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBidWZmZXI7CiAgICBzdGQ6OnN0cmVhbWJ1ZiogcHJldmNvdXRidWYgPSBzdGQ6OmNvdXQucmRidWYoYnVmZmVyLnJkYnVmKCkpOwogICAgLy9idWZmZXIg4oCUINGB0YLRgNC+0LrQvtCy0YvQuSDQv9C+0YLQvtC6LCDQutGD0LTQsCDQsdGD0LTQtdGCINC90LDQv9GA0LDQstC70Y/RgtGM0YHRjyDQstGL0LLQvtC0INCy0LzQtdGB0YLQviBzdGQ6OmNvdXQuCiAgICAvL3ByZXZjb3V0YnVmINGB0L7RhdGA0LDQvdGP0LXRgiDRgdGC0LDQvdC00LDRgNGC0L3Ri9C5INC/0L7RgtC+0Log0LLRi9Cy0L7QtNCwLCDRh9GC0L7QsdGLINC/0L7RgtC+0Lwg0LXQs9C+INCy0LXRgNC90YPRgtGMLgogICAgZmluZFN1YmFycmF5cyhhcnIsIGspOwogICAgc3RkOjpjb3V0LnJkYnVmKHByZXZjb3V0YnVmKTsKICAgIHJldHVybiBidWZmZXIuc3RyKCk7Cn0KCnZvaWQgcnVuVGVzdHMoKSB7CiAgICAvLyDQktGB0LUg0L3Rg9C70LgKICAgIHsKICAgICAgICBzdGQ6OnZlY3RvcjxpbnQ+IGFyciA9IHswLCAwLCAwfTsKICAgICAgICBpbnQgayA9IDI7CiAgICAgICAgc3RkOjpzdHJpbmcgb3V0cHV0ID0gY2FwdHVyZU91dHB1dChhcnIsIGspOwogICAgICAgIGFzc2VydCghb3V0cHV0LmVtcHR5KCkgJiYgIlRlc3QgMSBmYWlsZWQiKTsKICAgIH0KICAgIAogICAgLy8g0J3QtdGCINC/0L7QtNC80L3QvtC20LXRgdGC0LIg0YEg0YHRg9C80LzQvtC5IDAKICAgIHsKICAgICAgICBzdGQ6OnZlY3RvcjxpbnQ+IGFyciA9IHsxLCAyLCAzfTsKICAgICAgICBpbnQgayA9IDI7CiAgICAgICAgc3RkOjpzdHJpbmcgb3V0cHV0ID0gY2FwdHVyZU91dHB1dChhcnIsIGspOwogICAgICAgIGFzc2VydChvdXRwdXQuZW1wdHkoKSAmJiAiVGVzdCAyIGZhaWxlZCIpOwogICAgfQogICAgCiAgICAvLyDQldGB0YLRjCDQv9C+0LTQvNC90L7QttC10YHRgtCy0L4g0YEg0YHRg9C80LzQvtC5IDAKICAgIHsKICAgICAgICBzdGQ6OnZlY3RvcjxpbnQ+IGFyciA9IHsxLCAtMSwgMiwgLTJ9OwogICAgICAgIGludCBrID0gMjsKICAgICAgICBzdGQ6OnN0cmluZyBvdXRwdXQgPSBjYXB0dXJlT3V0cHV0KGFyciwgayk7CiAgICAgICAgYXNzZXJ0KCFvdXRwdXQuZW1wdHkoKSAmJiAiVGVzdCAzIGZhaWxlZCIpOwogICAgfQogICAgCiAgICAvLyDQntC00LjQvSDRjdC70LXQvNC10L3RgiAwCiAgICB7CiAgICAgICAgc3RkOjp2ZWN0b3I8aW50PiBhcnIgPSB7MH07CiAgICAgICAgaW50IGsgPSAxOwogICAgICAgIHN0ZDo6c3RyaW5nIG91dHB1dCA9IGNhcHR1cmVPdXRwdXQoYXJyLCBrKTsKICAgICAgICBhc3NlcnQoIW91dHB1dC5lbXB0eSgpICYmICJUZXN0IDQgZmFpbGVkIik7CiAgICB9CiAgICAKICAgIC8vICDQkdC+0LvRjNGI0LjQtSDQt9C90LDRh9C10L3QuNGPCiAgICB7CiAgICAgICAgc3RkOjp2ZWN0b3I8aW50PiBhcnIgPSB7MTAwMDAwMCwgLTEwMDAwMDAsIDUwMDAwMCwgLTUwMDAwMH07CiAgICAgICAgaW50IGsgPSAyOwogICAgICAgIHN0ZDo6c3RyaW5nIG91dHB1dCA9IGNhcHR1cmVPdXRwdXQoYXJyLCBrKTsKICAgICAgICBhc3NlcnQoIW91dHB1dC5lbXB0eSgpICYmICJUZXN0IDUgZmFpbGVkIik7CiAgICB9CiAgICAKICAgIC8vINCf0YPRgdGC0L7QuSDQvNCw0YHRgdC40LIKICAgIHsKICAgICAgICBzdGQ6OnZlY3RvcjxpbnQ+IGFyciA9IHt9OwogICAgICAgIGludCBrID0gMTsKICAgICAgICBzdGQ6OnN0cmluZyBvdXRwdXQgPSBjYXB0dXJlT3V0cHV0KGFyciwgayk7CiAgICAgICAgYXNzZXJ0KG91dHB1dC5lbXB0eSgpICYmICJUZXN0IDYgZmFpbGVkIik7CiAgICB9CiAgICAKICAgIC8vIGsg0LHQvtC70YzRiNC1LCDRh9C10Lwg0YDQsNC30LzQtdGAINC80LDRgdGB0LjQstCwCiAgICB7CiAgICAgICAgc3RkOjp2ZWN0b3I8aW50PiBhcnIgPSB7MSwgLTF9OwogICAgICAgIGludCBrID0gMzsKICAgICAgICBzdGQ6OnN0cmluZyBvdXRwdXQgPSBjYXB0dXJlT3V0cHV0KGFyciwgayk7CiAgICAgICAgYXNzZXJ0KG91dHB1dC5lbXB0eSgpICYmICJUZXN0IDcgZmFpbGVkIik7CiAgICB9CiAgICAKICAgIHN0ZDo6Y291dCA8PCAiQWxsIHRlc3RzIHBhc3NlZCFcbiI7Cn0KCmludCBtYWluKCkgewogICAgcnVuVGVzdHMoKTsKCiAgICBpbnQgbiwgazsKICAgIHN0ZDo6Y2luID4+IG47CiAgICBzdGQ6OmNpbiA+PiBrOwoKICAgIHN0ZDo6dmVjdG9yPGludD4gYXJyKG4pOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyArK2kpIHsKICAgICAgICBzdGQ6OmNpbiA+PiBhcnJbaV07CiAgICB9CiAgICBmaW5kU3ViYXJyYXlzKGFyciwgayk7Cn0K