1.介绍
原题链接(回去补上,教练把锣鼓禁了qwq+谴责这种行为!!!)
一句话题意:房间1到房间n中,求存在相邻两个房间的宗教相同的可能性总和
就这?省选?哪个省的?湖南的?我想去
2.分析
稍稍有点思维能力的都没有问题吧······
(逆序思维):求相同不太好求,求不同较为好求
∵相同的可能性+不同的可能性=总可能性
∴相同的可能性=总可能性-不同的可能性
问题来了
不同的怎么求?
假设我们先选1号房间
1号房间就有m种可能
然后选2号房间
就有种可能(去掉1号房间)
接着是3号
仍然是种(去掉2号房间,不去一号房间)
···
最后是n号房间
是m-1种(去掉n-1号房间)
∴不同的总数就是 m*(m-1)*(m-1)* ··· *(m-1) (共n-1个m-1)
即 (乘法原理)
而总和则是 (乘法原理)
相同的个数就是
如果你直接这么写,那恭喜你:你会WA
康康数据范围: ,
标准快速幂呀!
(不会快速幂的请自查)
ll q(ll a,ll p)
{ll res=1;while(p){if(p&1) res=(res*a)%mod;p>>=1;a=(a*a)%mod;}return res;
}
所以总代码就是
3.总代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;const int N=1e4+10,mod=1e5+3;
ll q(ll a,ll p)
{ll res=1;while(p){if(p&1) res=(res*a)%mod;p>>=1;a=(a*a)%mod;}return res;
}
long long n,m;int main()
{cin>>m>>n;m%=mod;ll ans;ans=(q(m,n)-m*q(m-1,n-1))%mod;cout<<((ans+mod)%mod);return 0;
}
(这么详细了,点个赞呗!)