hdu 2817 A sequence of numbers
hdu 2817 A sequence of numbers
- 题意:
- 题解
- 源代码
传送门
题意:
现在有个序列,已知为等差数列,等比数列
给定4个数,a,b,c,k,前面3个数代码序列的首3项a,b,c,求第k项
题解
根据等差数列的性质,b - a = c-b,(由于在本题过程中a,b,c的范围较大,即使long long a+c == 2*b
判断会溢出),根据公式ak = (k-1)*d+a;其中d=b-a
求等比数列的时候,题目告诉,序列非递减,并且a,b,c为整数,所以公比q=b/c为整数
由于k较大,所以需要利用到快速幂
源代码
#include<cstdio>
using namespace std;
typedef long long ll;
const ll mod = 200907;
ll quick(ll a,ll b){
a%=mod;
ll ans = 1;
while(b){
if(b&1)ans=ans*a%mod;
a=a*a%mod;
b>>=1;
}
return ans;
}
int main(){
ll t,a,b,c,k;
scanf("%lld",&t);
while(t--){
scanf("%lld%lld%lld%lld",&a,&b,&c,&k);
if(b-a==c-b){
printf("%lld\n",(((k-1)%mod*(b-a)%mod)%mod+a%mod)%mod);
}else {
printf("%lld\n",((a%mod)*quick(b/a,k-1))%mod);
}
}
}
还没有评论,来说两句吧...