964C - Alternating Sum - CodeForces Solution


math matrices number theory *1800

Please click on ads to support us..

C++ Code:

//jiudge: 26520: 1687343940
#include<iostream>
#include<string>
#include<cstring> 
using namespace std;
typedef long long ll;
const long long mod=1e9+9;
string s;
ll qpow(ll x,ll n,ll mod)
{
    ll res=1;
    while(n>0)
    {
        if(n&1)res=res*x%mod;
        x=x*x%mod;
        n>>=1;
    }
    return res;
}
int main()
{
    ll n,a,b,k;
    cin>>n>>a>>b>>k;
    cin>>s;
    ll res=0;
    for(int i=0;i<s.size();++i)
    {
        int flag;
        s[i]=='+'?flag=1:flag=-1;
     res=  ((res+flag*qpow(a, n-i, mod) * qpow(b, i, mod) )% mod  + mod) % mod;
    }

ll t = qpow(b, k, mod) * qpow(a, k * (mod - 2), mod) % mod;
    if (t == 1)
    {
        res = res * ((n + 1) / k) % mod;
    }
    else
    {
        res = res * (qpow(t, (n+1)/k, mod) - 1) % mod * qpow(t-1, mod - 2, mod) % mod;
    }
    cout<<res;
    return 0;
 }


Comments

Submit
0 Comments
More Questions

1671D - Insert a Progression
1671A - String Building
1671B - Consecutive Points Segment
1671C - Dolce Vita
1669G - Fall Down
4D - Mysterious Present
1316B - String Modification
1204A - BowWow and the Timetable
508B - Anton and currency you all know
1672A - Log Chopping
300A - Array
48D - Permutations
677C - Vanya and Label
1583B - Omkar and Heavenly Tree
1703C - Cypher
1511C - Yet Another Card Deck
1698A - XOR Mixup
1702E - Split Into Two Sets
1703B - ICPC Balloons
1702F - Equate Multisets
1700A - Optimal Path
665C - Simple Strings
1708A - Difference Operations
1703E - Mirror Grid
1042A - Benches
1676B - Equal Candies
1705B - Mark the Dust Sweeper
1711A - Perfect Permutation
1701B - Permutation
1692A - Marathon