摸了两道签到题就润了
D. Big Matrix
先列式子算一下,直接输出答案
可以算出
题目即要求
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
//#define lowbit(x) ((x)&-(x))
const int mod=1e9+7;
int main() {
ios::sync_with_stdio(false);
ll n,a1,a2,b1,b2;
while(cin>>n>>a1>>a2>>b1>>b2)
{
ll ans=(n-1)*n*n*n*(2*n-1)/6%mod*a2%mod*b1%mod;
ans+=(n-1)*(n-1)*n*n*n/4%mod*((a1*b1%mod+a2*b2%mod+a1*b2%mod)%mod)%mod;
ans=(ans+mod)%mod;
cout<<ans<<'\n';
}
return 0;
}
/**********************************************************************
Problem: 1192
User: admin_
Language: C++
Result: AC
Time:1 ms
Memory:2332 kb
**********************************************************************/J. Fibonacci Cane
斐波那契数列有一个性质:
数学归纳法可证,在此不作证明
所以原题就变成找出一部分斐波那契数列的差值
用一定长度的数组存前
熟知斐波那契数列的通项公式是两个
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=7e3+10;
ll f[N];
const ll Max=1e15;
unordered_map<ll,bool>mp;
int main() {
ios::sync_with_stdio(false);
ll n;
ll a=1,b=1;
for(int i=0;i<N;i++)
{
if(b>Max)
break;
f[i]=a;
ll temp=a+b;
a=b,b=temp;
}
for(int i=1;i<N;i++)
{
for(int j=0;j<i;j++)
mp[f[i]-f[j]]=true;
}
while(cin>>n)
{
if(mp[n]==true)
cout<<"YES"<<'\n';
else
cout<<"NO"<<'\n';
}
return 0;
}
/**********************************************************************
Problem: 1198
User: admin_
Language: C++
Result: AC
Time:253 ms
Memory:2524 kb
**********************************************************************/