我是靠谱客的博主 魔幻音响,最近开发中收集的这篇文章主要介绍Codeforces Round #118 (Div. 2) C. Plant (找规律),觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
题目链接:点击打开链接
题意:问你第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("%I64dn", (p(2, n-1)+p(2, 2*n-1))%mod);
}
return 0;
}
最后
以上就是魔幻音响为你收集整理的Codeforces Round #118 (Div. 2) C. Plant (找规律)的全部内容,希望文章能够帮你解决Codeforces Round #118 (Div. 2) C. Plant (找规律)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复