/ Randle /

记录详情

Accepted


  
# 状态 耗时 内存占用
#1 Accepted 3ms 328.0 KiB
#2 Accepted 3ms 332.0 KiB
#3 Accepted 2ms 324.0 KiB
#4 Accepted 2ms 320.0 KiB
#5 Accepted 2ms 336.0 KiB
#6 Accepted 2ms 324.0 KiB
#7 Accepted 2ms 324.0 KiB
#8 Accepted 2ms 332.0 KiB
#9 Accepted 2ms 328.0 KiB
#10 Accepted 1ms 324.0 KiB

代码

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod=1000000007;
struct square
{
	ll a[2][2];
	inline 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;
	}
	inline 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];
	}
	inline 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 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:36:07
评测时间
2017-10-21 15:36:07
评测机
分数
100
总耗时
24ms
峰值内存
336.0 KiB