Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <cmath>
- using namespace std;
- vector<int> getExponents(vector<int> arr) {
- std::vector<int> ret;
- std::vector<int> group; // indexes to be added
- group.reserve(arr.size());
- for (int length=1; length <= arr.size(); ++length) {
- group.resize(length);
- for (int i=0; i < group.size(); ++i) { // initialize group
- group[i] = i;
- }
- bool stop = false;
- while (!stop) {// until list is exhausted
- // add sum ()
- ret.push_back(0);
- for (int i=0; i < group.size(); ++i) {
- ret.back() += arr[group[i]];
- }
- // iterate group
- group.back()++; // increase back
- if (group.back() >= arr.size()) { // if back index points too far
- // move first index up and re-init
- group[0]++;
- if (group[0] >= arr.size()) // if first index is invalid, goto length loop (b/c size should be 1)
- break;
- // re-init
- for (int n=1; n < group.size(); ++n) { // adjust past first
- group[n] = group[n-1] + 1;
- if (group[n] >= arr.size()) { // if index is invalid (size is too big), goto length loop (b/c group.size() may be < arr.size())
- stop = true;
- break;
- }
- }
- }
- }
- }
- return ret;
- }
- int main () {
- unsigned T;
- cin >> T;
- vector<int> arr;
- arr.resize(T);
- for (int i=0; i < T; ++i)
- cin >> arr[i];
- vector<int> exponents = getExponents(arr);
- int sum =0;
- for (int& n : exponents) {
- sum += fmod(exp2(n), (pow(10,9) + 7));
- }
- std::cout << sum;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement