Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdafx.h"
- #include "math.h"
- #include <stdio.h>
- #include <iostream>
- #include <vector>
- #include <time.h>
- #include <algorithm>
- using namespace std;
- int main()
- {
- int t = clock();
- unsigned short int k;
- unsigned short int N;
- cin >> k;
- cin >> N;
- vector < pair < int, int > > SecVec(N);
- vector < vector < int > > FirVec(3);
- FirVec[0].resize(1);
- FirVec[1].resize(1);
- FirVec[0] = { 1 };
- FirVec[1] = { 1 };
- unsigned int X = pow(k, 5);
- vector < unsigned int > S(X);
- for (unsigned int i = 0, l = 0; i < X; i++, l++)
- {
- int sum = 0;
- while (l > 0)
- {
- sum += l % k;
- l /= k;
- }
- S[l] = (unsigned int)sum;
- }
- for (unsigned short int i = 0; i < N; i++)
- {
- unsigned int sum = 0;
- if (i < N - 2)
- {
- unsigned short int length = FirVec[1].size();
- FirVec[2].resize(length);
- for (unsigned short int j = 0; j < FirVec[0].size(); j++)
- {
- FirVec[2][j] = FirVec[0][j] + FirVec[1][j];
- sum += FirVec[0][j];
- }
- if (length > FirVec[0].size())
- {
- FirVec[2][length - 1] = FirVec[1][length - 1];
- }
- for (unsigned int j = 0; j < length - 1; j++)
- {
- if ((unsigned short int)FirVec[2][j] >= k)
- {
- FirVec[2][j] = FirVec[2][j] - k;
- FirVec[2][j + 1] = (FirVec[2][j + 1] + 1);
- }
- }
- if ((unsigned short)FirVec[2][length - 1] >= k)
- {
- FirVec[2][(length - 1)] = FirVec[2][length - 1] - k;
- FirVec[2].push_back(1);
- }
- SecVec[i] = make_pair(sum, i);
- FirVec[0] = FirVec[1];
- FirVec[1] = FirVec[2];
- }
- else
- {
- if (i == N - 2)
- {
- for (unsigned int j = 0; j < FirVec[0].size(); j++)
- {
- sum += FirVec[0][j];
- }
- SecVec[i] = make_pair(sum, i);
- }
- else
- {
- for (unsigned int j = 0; j < FirVec[1].size(); j++)
- {
- sum += FirVec[1][j];
- }
- SecVec[i] = make_pair(sum, i);
- }
- }
- }
- FirVec.clear();
- FirVec.shrink_to_fit();
- for (unsigned short int i = 0; i < N; i++)
- {
- cout << SecVec[i].first << " ";
- }
- sort(SecVec.begin(), SecVec.end());
- for (unsigned short int i = 0; i < N - 1; i++)
- {
- cout << (SecVec[i].second + 1) << " ";
- }
- cout << (SecVec[N - 1].second + 1);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement