/ Randle /

记录详情

Accepted


  
# 状态 耗时 内存占用
#1 Accepted 3ms 380.0 KiB
#2 Accepted 3ms 376.0 KiB
#3 Accepted 3ms 340.0 KiB
#4 Accepted 3ms 344.0 KiB
#5 Accepted 3ms 356.0 KiB
#6 Accepted 4ms 348.0 KiB
#7 Accepted 3ms 368.0 KiB
#8 Accepted 3ms 372.0 KiB
#9 Accepted 4ms 340.0 KiB
#10 Accepted 4ms 356.0 KiB

代码

#include<bits/stdc++.h>
const long long maxn=2,mod=1e9+7;
inline const void read(long long &a)
{
	a=0;char c=getchar();
	while(c<'0'||c>'9')c=getchar();
	while(c>='0'&&c<='9')
	{
		a=(a<<1)+(a<<3)+c-'0';
		c=getchar();
	}
}
inline const void write(long long a)
{
	if(a>9)write(a/10);
	putchar(a%10+'0');
}
long long n;
struct square
{
	long long a[2][2];
	inline const void init(long long i,long long j,long long l,long long k)
	{
		a[0][0]=i;a[0][1]=j;
		a[1][0]=l;a[1][1]=k;
	}
	inline const void operator=(const square&b)
	{
		a[0][0]=b.a[0][0];
		a[0][1]=b.a[0][1];
		a[1][0]=b.a[1][0];
		a[1][1]=b.a[1][1];
	}
	inline const square operator*(square b)
	{
		square c;
		c.a[0][0]=(a[0][0]*b.a[0][0]%mod+a[0][1]*b.a[1][0]%mod)%mod;
		c.a[0][1]=(a[0][0]*b.a[0][1]%mod+a[0][1]*b.a[1][1]%mod)%mod;
		c.a[1][0]=(a[1][0]*b.a[0][0]%mod+a[1][1]*b.a[1][0]%mod)%mod;
		c.a[1][1]=(a[1][0]*b.a[0][1]%mod+a[1][1]*b.a[1][1]%mod)%mod;
		return c;
	}
	inline const void print()
	{
		write(a[0][0]);putchar(' ');write(a[0][1]);printf("\n");
		write(a[1][0]);putchar(' ');write(a[1][1]);printf("\n");
	}
}f,p;
const square fast_pow(square p,long long k)
{
	square base,ans;
	base=p;
	ans.init(1,0,0,1);
	while(k)
	{
		if(k&1)ans=ans*base;
		k>>=1;
		base=base*base;
	}
	return ans;
}
int main()
{
	read(n);
	f.init(1,2,0,0);p.init(0,1,1,1);
	f=f*fast_pow(p,n-2);
	write(f.a[0][1]%mod);
	return 0;
}

信息

递交者
类型
递交
题目
上楼梯(数据原创)
题目数据
下载
语言
C++
递交时间
2017-10-20 21:10:03
评测时间
2017-10-20 21:14:16
评测机
分数
100
总耗时
36ms
峰值内存
380.0 KiB