前言:为什么我要刷这道水题呢?因为我一看见题面就被吸引然后点进来了。
我也想量产loli啊啊啊
题目传送门:http://tyvj.cn/p/4620
题目分析:如果某个时刻有一个LO跑掉了,那么LO的总数就会是k的倍数,就再也不会有LO跑掉了。由于这个时刻不会超过k,我们将前k个时刻LO的数量模k的值暴力计算,并同时维护其模p的值,然后剩下的部分快速幂即可。
CODE:
#include<iostream>
#include<string>
#include<cstring>
#include<cmath>
#include<cstdio>
#include<cstdlib>
#include<stdio.h>
#include<algorithm>
using namespace std;
int n,k,p;
int Fast_power(int x)
{
if (x<=0) return 1%p;
long long temp=Fast_power(x>>1);
temp=temp*temp%(long long)p;
if (x&1) temp=temp*2LL%(long long)p;
return temp;
}
int main()
{
freopen("4620.in","r",stdin);
freopen("4620.out","w",stdout);
scanf("%d%d%d",&n,&k,&p);
int v1=2%k,v2=2%p;
for (int i=1; i<=min(n,k); i++)
{
v1=(v1<<1)%k;
v2=(v2<<1)%p;
if (v1==1) v1--,v2=(v2-1+p)%p;
}
long long ans=v2;
ans=ans*(long long)Fast_power(n-k)%(long long)p;
printf("%lld\n",ans);
return 0;
}