传送门

我在这里!


思路

输入一个序列的前三个数并求出这个序列的第K项,这个数列不是等比序列就是等差数列,等差数列比较好判断,如果序列中\(a_{i+2}-a_{i+1}=a_{i+1}-a_{i}\),那他肯定是等差数列,然后根据通项式\(a_{n}=a_{1}+{n-1}*d就可以求出第N项\)(\(d\)为一个常数,\(d=a_{i}-a_{i-1}\)).至于剩下的就一定是等比数列了,但求第N项的时候,\(a_{n}=a_{1}*q^{n-1}\),求q的n-1次方需要使用快速幂

代码

#include<bits/stdc++.h>
#define ll long long
using namespace std;

ll a,b,c,k,d,res;
ll t;
const ll M=200907;

ll quickpower(ll a,ll b) {
    ll ret=1;
    while(b) {
        if(b&1)ret=(ret*a)%M;
        b>>=1;
        a=a*a%M;
    }
    return ret;
}

int main() {
    scanf("%lld",&t);
    while(t--) {
        cin>>a>>b>>c>>k;
        if((c-b)==(b-a)) {
            d=(b-a)%M;
            res=(a+(k-1)%M*d)%M;
        } else {
            d=(b/a)%M;
            res=a%M*quickpower(d,k-1)%M;
        }
        cout<<res<<"\n";
    }
    return 0;
}