안녕하세요. 오늘은 미적분을 할 거예요.

문제

https://www.acmicpc.net/problem/14731

아이디어

그냥 a,b를 입력받아서 abpow(2,b-1,mod)를 더해주면 됩니다.

소스코드

#include <iostream>
#define ll long long
using namespace std;

ll pow(ll a, ll b, ll mod)
{
    if (b == 0) return 1;
    if (b == 1) return a;

    ll x = pow(a, b / 2, mod);
    ll y = (x * x) % mod;
    if (b % 2 == 1) y = (y * 2) % mod;
    return y;
}

int main(void)
{
    ios_base::sync_with_stdio(false); cin.tie(NULL);
    ll mod = 1000000007;
    ll N, i, a, b, ans = 0;

    cin >> N;
    for (i = 0; i < N; i++)
    {
        cin >> a >> b;
        ans += ((a * b) % mod * pow(2, b - 1, mod)) % mod;
        ans %= mod;
    }
    cout << ans;
}


감사합니다.

0개의 댓글