浙江理工校赛 -4391 赛车在哪里

4391: 赛车在哪里

Time Limit: 5 Sec   Memory Limit: 128 MB
Submit: 581   Solved: 171

Description

仓鼠家里有一个周长为L的顺时针圆环形赛车轨道,赛车第i秒的平均速度是第i-1秒平均速度的2倍多5,即vi=2*vi-1+5,已知第一秒的平均速度是整数a,求第n秒结束那一刻后赛车所在位置的坐标。

圆形轨道的坐标从起点开始顺时针标为0,1,2,3…L-1

Input

第一行有一个整数T,代表接下来将有T组数据。

每组数据占一行,有三个整数a,n,L(0<=a<=100,0<=n<=10^9,1<=L<=10^5)

Output

输出一个整数,代表粒子在第n秒结束那一刻所在的位置

Sample Input

3
10 1 1000
10 2 100
2 6 10

Sample Output

10
35
1

HINT

T <= 1e5


0<=a<=100


0<=n<=10^9


1<=L<=10^5


Source

#include<iostream>
#include<cstdio>
#define LL long long
using namespace std;
LL a,b,c;
LL qpow(LL x,LL k)
{
    LL tem=1LL;
    while(k)
    {
        if(k&1)
            tem=(tem*x)%c;
        x=(x*x)%c;
        k>>=1;
    }
    return tem;
}
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%lld%lld%lld",&a,&b,&c);
        LL ans=(((a+5)*((qpow(2,b)%c-1)))%c-(5*b)%c)%c;
        printf("%lld\n",(ans+c)%c);
    }
}
一开始看到n很大,就想到用矩阵快速幂求,结果走上了一天不归路...
后来也往等比数列上想了,无奈退出来的还是一个sn=2*sn-1+5n+..之类的

后来问了一下学长 ,的确是等比数列

an+5 = 2(an-1+5)

所以

设 sn = a1+ a2 +...+an

则 sn= (a1+5)*(2^n-1)-5*n

于是直接用快速幂就可以求解了

猜你喜欢

转载自blog.csdn.net/weixin_40894017/article/details/80730431