列表

详情


NC50551. 越狱

描述

监狱有连续编号为1到n的n个房间,每个房间关押一个犯人。有m种宗教,每个犯人可能信仰其中一种。如果相邻房间的犯人信仰的宗教相同,就可能发生越狱。求有多少种状态可能发生越狱。

输入描述

输入两个整数m和n。

输出描述

可能越狱的状态数,对100003取余。

示例1

输入:

2 3

输出:

6

说明:

所有可能的6种状态为:{0,0,0 }, {0,0,1 }, {0,1,1 }, {1,0,0 }, {1,1,0 }, {1,1,1 }。

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++14(g++5.4) 解法, 执行用时: 4ms, 内存消耗: 488K, 提交时间: 2019-08-21 09:07:55

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll ksm(ll x,ll y,ll mod){
	ll res=1;
	while(y){
		if(y&1)
			res=res*x%mod;
		x=x*x%mod;
		y>>=1;
	}
	return res;
}
int main(){
	ll n,m;
	scanf("%lld%lld",&m,&n);
	ll t=ksm(m,n,100003);
	t=(t-m*ksm(m-1,n-1,100003)%100003+100003)%100003;
	printf("%lld\n",t);
} 

C++11(clang++ 3.9) 解法, 执行用时: 3ms, 内存消耗: 384K, 提交时间: 2020-10-19 21:54:30

#include<bits/stdc++.h>
#define LL long long
using namespace std;
const LL mod=100003;
LL qpow(LL x,LL y){LL res=1;for(;y;y>>=1,x=x*x%mod)if(y&1)res=res*x%mod;return res;}
int main(){
	LL n,m;scanf("%lld%lld",&m,&n);
	printf("%lld\n",(qpow(m,n)-m*qpow(m-1,n-1)%mod+mod)%mod);
	return 0;
}

pypy3(pypy3.6.1) 解法, 执行用时: 38ms, 内存消耗: 18744K, 提交时间: 2020-09-01 19:42:43

m,n = map(int,input().split())
print((pow(m,n,100003) - m*pow(m-1,n-1,100003)+100003)%100003)

Python3 解法, 执行用时: 44ms, 内存消耗: 6876K, 提交时间: 2021-05-25 20:43:52

m,n=map(int,input().split())
print((pow(m,n,100003)-m*pow(m-1,n-1,100003))%100003)

上一题