Rating changes for last rounds are temporarily rolled back. They will be returned soon. ×

 
 
 
 
General
 
 
# Author Problem Lang Verdict Time Memory Sent Judged  
40353105 Practice:
dx24816
1009E - 8 C++14 (GCC 6-32) Accepted 1232 ms 7836 KB 2018-07-14 21:12:52 2018-07-15 08:16:48
→ Source
#include <bits/stdc++.h>
#define ll long long

using namespace std;

const ll MOD = 998244353;
const ll twoInverse = 499122177;

void fast_io(){
    ios_base::sync_with_stdio(0);
    cin.tie(NULL);
    cout.tie(NULL);
}

ll mult(ll a,ll b){
    long long result = 0;
    a %= MOD;
    while (b){
        if (b & 1){
            result = (result + a) % MOD;
        }
        a = (2 * a) % MOD;
        b >>= 1;
    }

    return result;
}
ll pow2(ll exp) {
    ll base = 2;
    base %= MOD;
    ll result = 1;
    while (exp > 0){
        if (exp & 1){
            result = (result * base) % MOD;
        }
        base = (base * base) % MOD;
        exp >>= 1;
    }
    return result;
}

const int MAX = 1000007;
ll prefix [MAX];

int main(){
    fast_io();
    ll n;
    cin >> n;
    for(int i = 0; i<n; i++){
        ll d;
        cin >>d;
        if(i == 0){
            prefix[i+1] = mult(d, pow2(n-1));
        }
        else{
            prefix[i+1] = (prefix[i] + mult(pow2(n-1-i), d))%MOD;
        }
    }
    ll ans = 0;
    for(int i = 0; i<n; i++){
        if(i == 0){
            ans += prefix[n];
            ans  = ans % MOD;
        }
        else if(i == 1){
            ans += mult(prefix[n-1], twoInverse);
            ans  = ans % MOD;
        }
        else{
            ans += (mult(prefix[n-i], twoInverse))% MOD;
            ans = ans%MOD;
        }

    }
    cout << ans << endl;
    return 0;
}
?
Time: ? ms, memory: ? KB
Verdict: ?
Input
?
Participant's output
?
Jury's answer
?
Checker comment
?
Diagnostics
?
Click to see test details