P3197fwx - FanWenxuan

题目描述

监狱有n个房间,每个房间关押一个犯人,有m种宗教,每个犯人会信仰其中一种。如果相邻房间的犯人的宗教相同,就可能发生越狱,求有多少种状态可能发生越狱。
答案对100,003取模。

输入格式

输入只有一行两个整数,分别代表宗教数 m和房间数n。

输出格式

输出一行一个整数代表答案。

样例 #1

样例输入 #1

2 3

样例输出 #1

6

提示

样例输入输出 1 解释

状态编号 1 号房间 2 号房间 3 号房间
1 信仰 1 信仰 1 信仰 1
2 信仰 1 信仰 1 信仰 2
3 信仰 1 信仰 2 信仰 2
4 信仰 2 信仰 1 信仰 1
5 信仰 2 信仰 2 信仰 2
6 信仰 2 信仰 2 信仰 1

数据规模与约定

对于 100%的数据,保证 1≤ m ≤10^8, 1 ≤n ≤10^{12}, 0 < k < {10}^9。

错误代码

#include<bits/stdc++.h>
#define int long long 
using namespace std;
int m,n;
int f(int a,int b){if(b==0) return 1;if(b==1) return a;int t=f(a,b/2)%100003;t=t*t%100003;return t*f(a,b%2)%100003;
}
signed main() {cin >> m >> n;cout<<(f(m,n)-m*f((m-1),(n-1)))%100003;		return 0;
}

代码

#include<bits/stdc++.h>
#define int long long 
using namespace std;
int m,n;
int f(int a,int b){if(b==0) return 1;if(b==1) return a%100003;int t=f(a,b/2)%100003;t=t*t%100003;return t*f(a,b%2)%100003;
}
signed main() {cin >> m >> n;cout<<(f(m,n)-m*f(m-1,n-1)%100003+100003)%100003;		return 0;
}