题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=2817
题意分析:
给数列前3项数字,要么是等差数列,要么是等比数列,然后计算出第K项。通过前3项套入等差数列的中项公式然后判断数列的类型,然后对应计算第K项。等差没什么好说的,等比这里需要用快速幂。
代码:
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <iostream>
using namespace std;
const int mod=200907;
long long quickpow(long long m,long long n)
{
long long ans=1;
while(n)
{
if(n&1)
ans=(ans%mod)*(m%mod)%mod;
n=n>>1;
m=(m*m)%mod;
}
return ans;
}
int main()
{
long long n,a,b,c,d,q,k,ans;
cin>>n;
while(n--)
{
cin>>a>>b>>c>>k;
if(a+c==2*b)
{
d=b-a;
ans=(a+(k-1)*d)%mod;
cout<<ans<<endl;
continue;
}
q=b/a;
ans=a*quickpow(q,k-1)%mod;
cout<<ans<<endl;
}
}