HDU 2817 多校联赛1

  这个题的意思是给你N个序列, 每个序列可能是等比数列也可能是等差数列, 求出数列的第k项, 代码如下:

#include <cstdio>
#include <algorithm>
#include <cstring>
#include <iostream>

using namespace std;
typedef unsigned long long ULL;
ULL a, b, c, k;
const ULL mod = 200907;

ULL pow_mod(ULL A, ULL B)
{
    ULL res = 1;
    A = A%mod;
    while(B > 0)
    {
        if(B&1)
            res = (res*A)%mod;
        B = B>>1;
        A = (A*A)%mod;
    }
    return res;
}

int main()
{
    int N;
    scanf("%d", &N);
    while(N--)
    {
        cin>>a>>b>>c>>k;
        ULL res;
        if(a+c == 2*b)   //等差数列
        {
            ULL d = c-b;
            res = (a%mod + ((k-1)%mod)*(d%mod))%mod;
        }
        else     //等比数列
        {
            ULL q = c/b;
            res = a*pow_mod(q, k-1)%mod;
        }
        cout<<res%mod<<endl;
    }
    return 0;
}

 

posted @ 2016-03-11 20:13  xing-xing  阅读(100)  评论(0编辑  收藏  举报