http://zju.acmclub.com/index.php?app=problem_title&id=1&problem_id=5712
需要注意的有:
1.数很大,用long long存
2.二分求幂,power(a,n)复杂度log(n)
3.充分利用模的性质,例如power(a,b)%MOD=power(a%MOD,b)
4.在求power(a,b)的过程中,只要累计的结果ans或乘子a任何一个超过了MOD,马上取模把数降下来
5.输出结果时嵌套取模,保证在MOD内
例如:(a+(k-1)*d)%MOD
=(a%MOD+((k-1)*d)%MOD)%MOD
=(a%MOD+(((k-1)%MOD)*(d%MOD))%MOD)%MOD
cpp代码:
#include
#define MOD 200907
using namespace std;
long long power(long long a,long long b){
long long ans=1;
a%=MOD;
while(b!=0){
if(b%2) ans=(ans*a)%MOD;
b/=2;
a=(a*a)%MOD;
}
return ans;
}
int main()
{
long long k,a,b,c;
int n;
cin>>n;
while (n--){
cin>>a>>b>>c>>k;
if (a+c==2*b){
long long d = b-a;
cout<<(a%MOD+(((k-1)%MOD)*(d%MOD))%MOD)%MOD<