hdu2817
959 ワード
/*
分析:
1つの記号WAを1回間違えて、壁にぶつかって行ったほうがいい...
2点でしょう、等比数列の場合です.くどくど言わないで、
ご飯を食べに行きました...囧~
2013-02-26
*/
分析:
1つの記号WAを1回間違えて、壁にぶつかって行ったほうがいい...
2点でしょう、等比数列の場合です.くどくど言わないで、
ご飯を食べに行きました...囧~
2013-02-26
*/
#include"stdio.h"
#include"string.h"
#include"stdlib.h"
#define e 200907
__int64 a,b,c,k;
void solve1()
{
__int64 dir,ans;
dir=(c-b)%e;
k=(k-1)%e;
a%=e;
ans=(a+k*dir)%e;
printf("%I64d
",ans);
}
void solve2()
{
if(k==1) printf("%I64d
",a%e);
__int64 q,ans;
q=(c/b)%e;
a%=e;
k--;
__int64 t,tt,temp;
t=k;tt=2;
temp=q;
ans=a;
while(0<t)
{
while(tt<t)
{
temp=(temp*temp)%e;
tt*=2;
}
ans=(ans*temp)%e;
t-=tt/2;
tt=2;
temp=q;
}
printf("%I64d
",ans);
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
scanf("%I64d%I64d%I64d%I64d",&a,&b,&c,&k);
if(c-b==b-a) solve1();
else solve2();
}
return 0;
}