fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define pll pair<ll,ll>
  4. #define pii pair<int,int>
  5. #define mll map<ll,ll>
  6. #define mii map<int,int>
  7. #define mp make_pair
  8. #define pb push_back
  9. #define f(i,b) for(ll i=0;i<(int)b;i++)
  10. #define all(c) (c).begin(), (c).end()
  11. #define F first
  12. #define S second
  13. #define CLR(p) memset(p, 0, sizeof(p))
  14. #define SET(p) memset(p, -1, sizeof(p))
  15. //#define reset(a,0) memset(a,0,sizeof a);
  16. #define boost ios_base::sync_with_stdio(false);cin.tie(NULL);
  17. typedef long long int ll;
  18. const int MAX=1e6+5;
  19. #define MOD 1000000007
  20. /*std::cout << std::fixed;
  21. std::cout << std::setprecision(6);*/
  22.  
  23.  
  24.  
  25. /************************************
  26.  
  27.  
  28.  
  29. *************************************/
  30.  
  31.  
  32. int main(){
  33. boost;
  34. ll n;
  35. cin>>n;
  36. string s;
  37. cin>>s;
  38. ll ar[n];
  39. for(ll i=0;i<n;i++)
  40. cin>>ar[i];
  41.  
  42. ll dp[4];
  43. CLR(dp);
  44. ll h=0,a=0,r=0,d=0,h1=0;
  45. ll sum=0;
  46. ll mini=INT_MAX,id=-1;
  47. for(ll i=0;i<n;i++){
  48. if(s[i]=='h'){
  49. dp[3]+=d;
  50. for(ll i=0;i<4;i++){
  51. if(dp[i]<mini){
  52. mini=dp[i];
  53. id=i;
  54. }
  55. }
  56. sum+=mini;
  57. mini=INT_MAX;
  58. d=0;
  59. for(ll i=id;i<4;i++)
  60. dp[i]=0;
  61. h+=ar[i];
  62. }
  63. if(s[i]=='a'){
  64. // dp[0]+=h;
  65. // h=0;
  66. h1=h;
  67. h=0;
  68. a+=ar[i];
  69. }
  70. if(s[i]=='r'){
  71. dp[1]+=a;
  72. dp[0]+=h1;
  73. h1=0;
  74. a=0;
  75. r+=ar[i];
  76. }
  77. if(s[i]=='d'){
  78. dp[2]+=r;
  79. r=0;
  80. d+=ar[i];
  81. }
  82. // for(ll x:dp)
  83. // cout<<x<<" ";
  84. // cout<<endl;
  85. }
  86. dp[3]+=d;
  87. // a
  88. for(ll i=0;i<4;i++){
  89. if(dp[i]<mini){
  90. mini = dp[i];
  91. id = i;
  92. }
  93. }
  94. sum+=mini;
  95. cout<<sum<<endl;
  96. return 0;
  97. }
Success #stdin #stdout 0s 4396KB
stdin
6
hardhd
2 2 2 1 1 1
stdout
2