题目链接:点击打开链接
题意:问你第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即为答案,快速幂即可解决。
代码:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27#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内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复