salt_n_ice's blog

By salt_n_ice, history, 4 years ago, In English

here is the problem. At first, I couldn't solve it on my own so I took help from the editorial and this is what I came up with:

#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;
using ll=long long;
int main()
{
    ll n;
    cin>>n;
    vector<ll> c;
    for(ll i=0; i<n; ++i)
    {
        ll x;
        cin>>x;
        c.push_back(x);
    }
    vector<string> vec;
    for(ll i=0; i<n; ++i)
    {
        string f;
        cin>>f;
        vec.push_back(f);
    }
    ll dp[n][2];
    for(ll i=0; i<=n; ++i)
    {
        for(ll j=0; j<2; ++j)
        {
            dp[i][j] = numeric_limits<ll>::max()/2;
        }
    }
    dp[0][0]=0;
    dp[0][1]=c[0];
    ll n1 = 0, n2 = 0;
    for(ll i=1; i<n; ++i)
    {
        n1 = 0;
        n2 = 0;
        if(vec[i]>=vec[i-1])
            dp[i][0]=min(dp[i][0],dp[i-1][0]);
        else n1++;
        reverse(vec[i-1].begin(), vec[i-1].end());
        if(vec[i]>=vec[i-1])
            dp[i][0]=min(dp[i][0], dp[i-1][1]);
        else n1++;
        reverse(vec[i-1].begin(), vec[i-1].end());
        reverse(vec[i].begin(), vec[i].end());
        if(vec[i]>=vec[i-1])
            dp[i][1]=min(dp[i][1],dp[i-1][0]+c[i]);
        else n2++;
        reverse(vec[i-1].begin(), vec[i-1].end());
        if(vec[i]>vec[i-1])
            dp[i][1]=min(dp[i][1], dp[i-1][1]+c[i]);
        else n2++;
        reverse(vec[i-1].begin(), vec[i-1].end());
        reverse(vec[i].begin(), vec[i].end());
        if(n1==2 && n2==2)
            break;

    }
    if(n1==2 && n2==2)
        cout<<-1;
    else cout<<min(dp[n-1][0], dp[n-1][1]);
}

but it's giving me wrong answer.Can anyone help with whats wrong?

  • Vote: I like it
  • -2
  • Vote: I do not like it

»
4 years ago, # |
  Vote: I like it 0 Vote: I do not like it

vec[i]>=vec[i-1] in last condition