Guest User

Untitled

a guest
Apr 6th, 2020
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.34 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. #define mod 1000000007
  3. #define modc 998244353
  4. using namespace std;
  5. typedef long long ll;
  6. ll compute(string &s)
  7. {
  8. ll prod = 1;
  9. ll sum = 0;
  10. int i,j;
  11. reverse(s.begin(),s.end());
  12. for(i=0;i<s.length();i++)
  13. {
  14. sum+=(s[i]-'0')*prod;
  15. sum%=mod;
  16. prod*=2;
  17. prod%=mod;
  18. }
  19. reverse(s.begin(),s.end());
  20. return sum;
  21. }
  22. void solve()
  23. {
  24. int n,i,j;
  25. ll prod = 1;
  26. ll sum = 0;
  27. cin >> n;
  28. string a,b,c,d;
  29. cin >> a;
  30. if(a[n-1]=='1')
  31. {
  32. for(i=0;i<n;i++)
  33. if(a[i] == '0')
  34. break;
  35. if(i==n)
  36. {
  37. cout << compute(a) << endl;
  38. return;
  39. }
  40. b = a.substr(0,i+1);
  41. c = a.substr(i+1,n-i-1);
  42. a = c+b;
  43. }
  44. int index[n] = {0};
  45. for(i=0;i<n;i++)
  46. {
  47. sum = 0;
  48. if(a[i] == '1')
  49. {
  50. sum++;
  51. j = i+1;
  52. while(a[j]=='1'&& j<n)
  53. {
  54. sum++;
  55. j++;
  56. }
  57. index[i] = sum;
  58. i = j-1;
  59. }
  60. }
  61. int maxx = *max_element(index,index+n);
  62. int ayush[n];
  63. int gupta = 0;
  64. for(i=0;i<n;i++)
  65. {
  66. if(index[i] == maxx)
  67. ayush[gupta++] = i;
  68. }
  69. string max_str;
  70. max_str = a;
  71. for(i=0;i<gupta;i++)
  72. {
  73. b = a.substr(0,ayush[i]);
  74. c = a.substr(ayush[i],n-ayush[i]);
  75. b = c+b;
  76. if(b>max_str)
  77. max_str = b;
  78. }
  79. cout << compute(max_str) << endl;
  80. }
  81. int main()
  82. {
  83. ios_base::sync_with_stdio(false);
  84. cin.tie(NULL);
  85. cout.tie(NULL);
  86. int t = 1;
  87. // cin >> t;
  88. while(t--)
  89. solve();
  90. }
Add Comment
Please, Sign In to add comment