题目链接:点击打开链接
题意:问你第n个大三角形中有几个小三角形是朝上的。
思路:每个朝上的小三角形下一年会变成三个朝上一个朝下,每个向下的小三角下年会变成三个朝下一个朝上。
我们可以设第i年朝上的是ai个朝下的是bi个,因此可以得到递推式:ai = 3*ai-1 + bi-1,
bi = 3*b*-1 + ai-1, 可以看到这个式子很像,两者做差得到ai-bi = 2*(ai-1 - bi-1),可得到
第i年两者之差的公式,又可知每年有4^i个三角,即ai + bi = 4^i, ai - bi = 2^n 两者作和
除2即为答案,快速幂即可解决。
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod = 1e9+7;
ll n;
ll p(ll a, ll k)
{
a %= mod;
ll ans = 1;
while(k)
{
if(k&1) ans = ans*a%mod;
a = a*a%mod;
k /= 2;
}
return ans;
}
int main(void)
{
while(cin >> n)
{
if(!n) puts("1");
else printf("%I64d\n", (p(2, n-1)+p(2, 2*n-1))%mod);
}
return 0;
}

本文介绍了一种计算经过n年后朝上指向的三角形植物数量的方法。通过建立数学模型,利用递推公式和快速幂运算,实现了高效求解。文章提供了完整的C++代码实现。
1355

被折叠的 条评论
为什么被折叠?



