/ Randle /

记录详情

Accepted


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

代码

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod=1000000007;
struct square
{
	ll a[2][2];
	void scan(ll i,ll j,ll k,ll l)
	{
		a[0][0]=i,a[0][1]=j;
		a[1][0]=k,a[1][1]=l;
	}
	void operator = (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];
	}
	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;
	}
	void print()
	{
		cout<<a[0][0]<<" "<<a[0][1]<<endl;
		cout<<a[1][0]<<" "<<a[1][1]<<endl;
	}
};
square ans,b,f;
int main()
{
	ll n;
	cin>>n;
	n-=2;
	f.scan(1,2,0,0);
	b.scan(0,1,1,1);
	ans.scan(1,0,0,1);
	while(n)
	{
		if(n&1) ans=ans*b;
		n>>=1;
		b=b*b;
	}
	f=f*ans;
	cout<<f.a[0][1];
}

信息

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