Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions 3_dp/Counting Towers.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1e9 + 7;

int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);

int t;
cin >> t;
const int MAXN = 1e6;
vector<long long> dpA(MAXN + 1), dpB(MAXN + 1);
dpA[1] = dpB[1] = 1;

for (int i = 2; i <= MAXN; i++) {
dpA[i] = (2 * dpA[i - 1] + dpB[i - 1]) % MOD;
dpB[i] = (dpA[i - 1] + 4 * dpB[i - 1]) % MOD;
}

while (t--) {
int n;
cin >> n;
cout << (dpA[n] + dpB[n]) % MOD << "\n";
}
}
31 changes: 31 additions & 0 deletions Counting bits.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
#include <bits/stdc++.h>
using namespace std;

long long countOnes(long long n) {
long long count = 0;
for (long long i = 0; (1LL << i) <= n; i++) {
long long cycle_len = 1LL << (i + 1);
long long full_cycles = (n + 1) / cycle_len;
count += full_cycles * (1LL << i);

```
long long remainder = (n + 1) % cycle_len;
count += max(0LL, remainder - (1LL << i));
}
return count;
```

}

int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);

```
long long n;
cin >> n;
cout << countOnes(n) << "\n";
return 0;
```

}