Coloring Game
思路:每列格子至少选一个,选法三种,第一列与最后一列选法各只有两种,所以结果只需输出3^(N-2)*4。卡了很久的原因是普通的幂运算会超时,这里学习到了快速幂的使用。假如用一般的幂运算,复杂度是O(n),假如用了快速幂,复杂度会变成O(logn)。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll m = 1e9+7;
ll N;
ll ppow(ll a,ll b){
ll ans=1;
ll rec=a;
while(b){
if(b&1)
ans=ans*rec%m;
rec=rec*rec%m;
b>>=1;
}
return ans;
}
int main()
{
scanf("%lld",&N);
if(N==1)
printf("1\n");
else printf("%lld\n",ppow(3,N-2)*4%m);
return 0;
}
在用了快速幂之后还是报超时,发现是少了判断N等于1的时候,但是这明显并不是超时错误吧,所以以后要是发现超时错误其实也有可能是逻辑错误。以后卡题一定一定要注意考虑数据边界情况。