[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;
}