Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- using namespace std;
- struct BigInt {
- static const int MX = 1000;
- int v[MX]{};
- BigInt operator + (const BigInt &b) {
- BigInt c;
- for (int i = 0; i < MX; ++i) c.v[i] = v[i] + b.v[i];
- for (int i = MX-2; i >= 0; --i) {
- c.v[i] += c.v[i+1] / 10;
- c.v[i+1] %= 10;
- }
- return c;
- }
- BigInt (int x) { // x is a digit
- v[MX-1] = x;
- }
- BigInt () {}
- void print() {
- bool seen = false;
- for (int i = 0; i < MX; ++i) {
- if (v[i]) seen = true;
- if (seen) cout << v[i];
- }
- if (!seen) cout << 0;
- cout << endl;
- }
- };
- int main() {
- int n; cin >> n;
- vector<int> a(n);
- for (int &x : a) cin >> x;
- vector<bool> change(n);
- for (int i = n-1; i >= 0; --i) {
- if (a[i] == 1) {
- change[i] = true;
- if (i) a[i-1] = 1-a[i-1];
- }
- }
- BigInt sum, pow2(1);
- for (int i = 0; i < n; ++i) {
- if (change[i]) sum = sum + pow2;
- pow2 = pow2 + pow2;
- }
- sum.print();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement