My issue
i don’t understand why my code is giving wrong answer even though its similar to the one shown in solution
My code
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll MOD = 1e9+7;
ll mathpow(ll a, ll n){
if(n<0) return 0;
ll res = 1;
while(n){
if(n%2){
res*=a;
n--;
}else{
a*=a;
n/=2;
}
}
return res;
}
void solve()
{
int n;
cin>>n;
string s;
cin>>s;
vector<ll> pref(n),pref_4(n);
pref[0] = (s[0]=='*');
pref_4[0] = (s[0]=='4');
for(int i=1; i<n; i++){
pref[i] = pref[i-1]+ (s[i]=='*');
pref_4[i] = pref_4[i-1]+ (s[i]=='4');
}
ll ans = 0;
for(int i=1; i<n; i++){
if(s[i]!='4'){
ll left_4 = pref_4[i-1];
ll right_4 = pref_4[n-1]-pref_4[i];
ll left = pref[i-1];
ll right = pref[n-1]-pref[i];
ll lefts = ((mathpow(2,left)*left_4)%MOD+ (left*mathpow(2,left-1))%MOD)%MOD;
ll rights = ((mathpow(2,right)*right_4)%MOD+(right*mathpow(2,right-1))%MOD)%MOD;
ans += (lefts*rights)%MOD;
ans%=MOD;
}
}
cout<<ans<<endl;
}
int main()
{
int t = 1;
cin >> t;
while (t--)
{
solve();
}
return 0;
}
Problem Link: CS2023_404 Problem - CodeChef