Codeforces 185 A Plant

原创 2016年08月29日 19:23:37
A. Plant
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output

Dwarfs have planted a very interesting plant, which is a triangle directed "upwards". This plant has an amusing feature. After one year a triangle plant directed "upwards" divides into four triangle plants: three of them will point "upwards" and one will point "downwards". After another year, each triangle plant divides into four triangle plants: three of them will be directed in the same direction as the parent plant, and one of them will be directed in the opposite direction. Then each year the process repeats. The figure below illustrates this process.

Help the dwarfs find out how many triangle plants that point "upwards" will be in n years.

Input

The first line contains a single integer n (0 ≤ n ≤ 1018) — the number of full years when the plant grew.

Please do not use the %lld specifier to read or write 64-bit integers in С++. It is preferred to use cincout streams or the %I64dspecifier.

Output

Print a single integer — the remainder of dividing the number of plants that will point "upwards" in n years by 1000000007 (109 + 7).

Examples
input
1
output
3
input
2
output
10
Note

The first test sample corresponds to the second triangle on the figure in the statement. The second test sample corresponds to the third one.

题目模型(和题目内容不同):给出一个三角形,然后再在三角形上增加三角形,输入n,求第n个图形向上三角形的个数。

题目类型:快速幂。

思路:我是用矩阵快速幂做的,方法过程有点复杂。f(n)为第n个图形向上三角形的个数。g(n)为第n个图形三角形 的个数。

向上的三角形:会产生3个向上的三角形

向下的三角形:会产生1个向上的三角形

f(n)=3*f(n-1)+g(n-1)-f(n-1)=2*f(n-1)+g(n-1);

g(n)=4*g(n-1);

#include<stdio.h>
#include<iostream>
#define mod 1000000007
using namespace std;

struct mat
{
    long long int m[2][2];
}base;

mat mulmat(mat a,mat b);
mat fast_mod(mat base,long long int n);

int main()
{
    long long int n;
    while(scanf("%I64d",&n)!=EOF)
    {
        base.m[0][0]=2;
        base.m[0][1]=1;
        base.m[1][0]=0;
        base.m[1][1]=4;

        if(n==0)  printf("1\n");
        else
        {
           
        mat ans;
        ans=fast_mod(base,n-1);
        long long int x=((ans.m[0][0]*3)%mod+(ans.m[0][1]*4)%mod)%mod;
        printf("%I64d\n",x);
        }
    }
    return 0;
}

mat mulmat(mat a,mat b)
{
    int i,j,k;
    mat c;
    for(i=0;i<2;i++)
        for(j=0;j<2;j++)
    {
        c.m[i][j]=0;
        for(k=0;k<2;k++)
            c.m[i][j]=(c.m[i][j]+a.m[i][k]*b.m[k][j]%mod)%mod;
    }
    return c;
}

mat fast_mod(mat base,long long int n)
{
    mat E,p;
    E.m[0][0]=1;
    E.m[0][1]=0;
    E.m[1][0]=0;
    E.m[1][1]=1;
    if(n==0)  return E;
    else if(n%2==1)
        return mulmat(base,fast_mod(base,n-1));
    else
        {
            p=fast_mod(base,n/2);
            return mulmat(p,p);
        }
}

这道题貌似公式推的简单一点可以用裸的快速幂做。百度了一下,公式为f(n)= (1+2n)*2n-1.


版权声明:本文为博主原创文章,未经博主允许不得转载。

codeforce 185 A——Plant

题意:给定一个大三角形,然后每次按照图片分割成4个小三角形,问n次后有多少个向上的三角形。 思路:矩阵快速幂,可以发现,每一个向上的的可以在下一次产生3个向上的,1个向下的,向下的每次可以产生一个...
  • bobodem
  • bobodem
  • 2016年03月24日 09:57
  • 240

codeforces #185 A Plant(矩阵快速幂+递推)

题目地址:http://codeforces.com/problemset/problem/185/A 通过这个题终于找回了点找递推公式的信心。。TAT。。 首先,第n个图形的上方,左下方,右下方的三...
  • u013013910
  • u013013910
  • 2014年09月18日 20:53
  • 773

codeforces - 185 - A - Plant 【经典矩阵快速幂】

A. Planttime limit per test2 seconds memory limit per test256 megabytes inputstandard input outpu...
  • nobleman__
  • nobleman__
  • 2017年10月27日 19:37
  • 41

【Codeforces Round #185 (Div. 1) B】 CodeForces 311B Cats Transport

斜率优化dp
  • sdfzyhx
  • sdfzyhx
  • 2016年07月21日 16:21
  • 382

Codeforces Round #185 (Div. 1) / 311A The Closest Pair (“陷阱”题)

http://codeforces.com/problemset/problem/311/A If we ignore "break", tot will be up to . ...
  • synapse7
  • synapse7
  • 2014年03月15日 13:15
  • 1127

Codeforces Round #185 (Div. 1) E.Biologist 最小割最大流

题目地址:http://codeforces.com/problemset/problem/311/E 思想上有些近似于最大闭权合图,详细参考《最小割模型在信息学竞赛中的应用》。 建图: 对于...
  • Veda_
  • Veda_
  • 2013年10月23日 15:51
  • 639

Codeforces Round #185(div2)

再次泪奔……      题目链接: http://codeforces.com/contest/312 A、B:水题。 C:http://codeforces.com/contest/3...
  • yew1eb
  • yew1eb
  • 2013年05月27日 11:02
  • 1446

[PlantSimulation]User Interface应用(一)

Chart(图)前面我们曾经讲过,仿真分为两个过程:一是建立可视化的模型,二是根据建立的模型,通过多次运行,分析运行所产生的数据,以发现系统存在的问题,并进行改进。而在我看来,第二个过程才是重中之重。...
  • luolandeygy
  • luolandeygy
  • 2017年04月25日 22:01
  • 458

[PlantSimulation]层式结构及其动画设置

在真实的生产场景中,随着公司的不断发展、业务的不断拓展,难免会遇到需要拓展生产线的场景,这时在仿真模型中如何能够快速的复制一条生产线呢?这时我们就会用到层式结构。在产品的设计过程中,顶层设计会忽略一些...
  • luolandeygy
  • luolandeygy
  • 2017年05月01日 10:22
  • 644

【快速幂】 CodeForces 185A Plant

点击打开链接 △-> 3*△ +1*▽ ▽-> 1*△ +3*▽ 所以 a[i][0]=a[i-1][0]*3+a[i-1][1]; a[i][1]=a[i-1][0]+a[i-1][1]*3...
  • u012749539
  • u012749539
  • 2015年04月08日 18:56
  • 366
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Codeforces 185 A Plant
举报原因:
原因补充:

(最多只允许输入30个字)