Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- #define mod 1000000007
- #define modc 998244353
- using namespace std;
- typedef long long ll;
- ll compute(string &s)
- {
- ll prod = 1;
- ll sum = 0;
- int i,j;
- reverse(s.begin(),s.end());
- for(i=0;i<s.length();i++)
- {
- sum+=(s[i]-'0')*prod;
- sum%=mod;
- prod*=2;
- prod%=mod;
- }
- reverse(s.begin(),s.end());
- return sum;
- }
- void solve()
- {
- int n,i,j;
- ll prod = 1;
- ll sum = 0;
- cin >> n;
- string a,b,c,d;
- cin >> a;
- if(a[n-1]=='1')
- {
- for(i=0;i<n;i++)
- if(a[i] == '0')
- break;
- if(i==n)
- {
- cout << compute(a) << endl;
- return;
- }
- b = a.substr(0,i+1);
- c = a.substr(i+1,n-i-1);
- a = c+b;
- }
- int index[n] = {0};
- for(i=0;i<n;i++)
- {
- sum = 0;
- if(a[i] == '1')
- {
- sum++;
- j = i+1;
- while(a[j]=='1'&& j<n)
- {
- sum++;
- j++;
- }
- index[i] = sum;
- i = j-1;
- }
- }
- int maxx = *max_element(index,index+n);
- int ayush[n];
- int gupta = 0;
- for(i=0;i<n;i++)
- {
- if(index[i] == maxx)
- ayush[gupta++] = i;
- }
- string max_str;
- max_str = a;
- for(i=0;i<gupta;i++)
- {
- b = a.substr(0,ayush[i]);
- c = a.substr(ayush[i],n-ayush[i]);
- b = c+b;
- if(b>max_str)
- max_str = b;
- }
- cout << compute(max_str) << endl;
- }
- int main()
- {
- ios_base::sync_with_stdio(false);
- cin.tie(NULL);
- cout.tie(NULL);
- int t = 1;
- // cin >> t;
- while(t--)
- solve();
- }
Add Comment
Please, Sign In to add comment