Click Here to go back to the homepage.

Mancala Solution:


#include <bits/stdc++.h>

using namespace std;

#define MAX 2000

int main(){
    // #ifndef TESTING
    // freopen("input.txt", "r", stdin);
    // freopen("output.txt", "w", stdout);
    // #endif

    vector<int> memo[2001];
    memo[1] = {1};

    for(int i = 2; i <= MAX; i++){
        copy(memo[i-1].begin(), memo[i-1].end(), back_inserter(memo[i]));
        auto it = find(memo[i].begin(), memo[i].end(), 0);

        for(auto ptr = memo[i].begin(); ptr < it; ptr++){
            (*ptr)--;
        }
        if(it == memo[i].end()){
            memo[i].push_back(distance(memo[i].begin(), it) + 1);
        } else {
            (*it) = distance(memo[i].begin(), it) + 1;
        }
    }


    int cases;
    cin >> cases;
    for(int i = 1; i <= cases; i++){
        int total;
        cin.ignore(256,' ');
        cin >> total;
        cout << i << " " << memo[total].size() << endl;
        bool lineEnd;
        for(int index = 0; index < memo[total].size(); index++){
            lineEnd = false;
            cout << memo[total][index] << " ";
            if(index > 2 && (index + 1) % 10 == 0){
                cout << endl;
                lineEnd = true;
            }
        }
        if(!lineEnd){
            cout << endl;
        }
    }

    return 0;
}