[BZOJ2463] [中山選挙2009]勝つことができますか?

[BZOJ2463] [中山選挙2009]勝つことができますか?

制限時間:1秒メモリ制限:162メガバイト

説明

  連続刑務所が1番... Nの部屋のN、各部屋には、囚人を開催し、Mの宗教があり、それぞれの宗教は、囚人のものであってもよいです。場合は
隣の部屋で同じ宗教囚人が、脱出するために起こる可能性があり、可能な脱出しようとしているどのように多くの州

入力

  入力二つの整数M、N.1 <= M <= 10 ^ 8,1 <= N <= 10 ^ 12

出力

  これは、状態番号、剰余金型100003を逃れること

サンプル入力

2 3

サンプル出力

6

ヒント

  6つの状態(000)(001)(011)(100)(110)(111)

ソース

[ 送信 ]

思考

質問は主に順列と組み合わせ、難しいことではありません。プログラムの1種類 - オプションの第一種のM数が存在する場合、後者は、Mを有しています。このように、スキームは、フルセットを満たしていないマイナスの質問の意味が答えです。

コード

#include <cctype>
#include <cstdio>
#include <iostream>

long long nextInt()
{
    long long num = 0ll;
    char c;
    bool flag = false;
    while ((c = std::getchar()) == ' ' || c == '\r' || c == '\t' || c == '\n');
    if (c == '-')
        flag = true;
    else
        num = c - 48;
    while (std::isdigit(c = std::getchar()))
        num = num * 10 + c - 48;
    return (flag ? -1 : 1) * num;
}

const long long M = 100003ll;

long long qpow(long long x, long long t)
{
    long long ans = 1;
    while (t)
    {
        if (t & 1)
            ans = (ans * x) % M;
        x = (x * x) % M;
        t >>= 1;
    }
    return ans;
}

int main(int argc, char **argv)
{
    long long m = nextInt(), n = nextInt();
    std::cout << (M + qpow(m, n) % M - m * qpow(m - 1, n - 1) % M) % M << std::endl;
#ifdef __EDWARD_EDIT
    std::cin.get();
    std::cin.get();
#endif
    return 0;
}
公開された40元の記事 ウォンの賞賛0 ビュー5157

おすすめ

転載: blog.csdn.net/edward00324258/article/details/73499172