fork download
  1. /* Don't try to hack it :|
  2.  
  3.   _/﹋\_
  4.   (҂`_´)
  5.   <,︻╦╤─҉- - - - - - - - - - - - - - -
  6.   _/﹋\_
  7. */
  8. //@Yuvraj Garg
  9.  
  10. #include <bits/stdc++.h>
  11.  
  12. #define ull unsigned long long int
  13. #define ll long long int
  14. #define vi vector<int>
  15. #define vll vector<ll>
  16. #define vvi vector < vi >
  17. #define pii pair<int,int>
  18. #define pll pair<long long, long long>
  19. #define itr vi::iterator
  20. #define vpll vector < pair<long long,long long> >
  21. #define mod 1000000007
  22. #define inf 1000000000000000001
  23. #define all(c) c.begin(),c.end()
  24. #define mp make_pair
  25. #define pb push_back
  26. #define eb emplace_back
  27. #define f first
  28. #define s second
  29. #define pdd pair<double, double>
  30. #define foo() cout << "Err\n"
  31.  
  32. #define rep(i, n) for(ll i = 0; i < (n); ++i)
  33. #define repA(i, a, n) for(ll i = a; i <= (n); ++i)
  34. #define repD(i, a, n) for(ll i = a; i >= (n); --i)
  35.  
  36. using namespace std;
  37.  
  38. ll min(ll a, ll b){
  39. if(a > b) return b;
  40. else return a;
  41. }
  42.  
  43. void solve(int t){
  44. ll n, a, b;
  45. cin >> n >> a >> b;
  46. string s;
  47. cin >> s;
  48. vll idx;
  49. rep(i, s.length()) if(s[i]-'0') idx.pb(i);
  50. ll cost = 0;
  51. rep(i, idx.size()-1){
  52. if(idx[i+1]-idx[i] > 2) cost += min((a+2*b)*(idx[i+1]-idx[i]), (a+b)*(idx[i+1]-idx[i]+2));
  53. else cost += (a+b)*(idx[i+1]-idx[i]);
  54. }
  55. ll mn = idx.size()-1;
  56. cost += a*(n+2+idx[0]-idx[mn])+b*(n+3+idx[0]-idx[mn]);
  57. cout << cost;
  58. }
  59.  
  60. int main(){
  61.  
  62. ios::sync_with_stdio(0);
  63. cin.tie(0); cout.tie(0);
  64. #ifndef ONLINE_JUDGE
  65. freopen("input.txt", "r", stdin);
  66. freopen("output.txt", "w", stdout);
  67. #endif
  68. int t, tmp = 0;
  69. cin >> t;
  70. // t = 1;
  71. while(tmp++ < t){
  72. // cout << "Case #" << tmp << ": ";
  73. solve(tmp-1);
  74. // free();
  75. if(t-tmp) cout << "\n";
  76. }
  77. cerr << "Time : " << (double)clock() / (double)CLOCKS_PER_SEC << "s\n";
  78. return 0;
  79. }
  80.  
Success #stdin #stdout #stderr 0s 4480KB
stdin
3
8 2 5
00110010
8 1 1
00110010
9 100000000 100000000
010101010
stdout
89
24
2300000000
stderr
Time : 0.003236s