fork download
  1. #include <cstdio>
  2. #include <cstring>
  3. #include <algorithm>
  4. using namespace std;
  5.  
  6. typedef long long LL;
  7. const int MOD = 1000000007;
  8.  
  9. void mul(int a[2][2], int b[2][2], int u[2][2]){
  10. for(int i=0;i<2;i++) for(int j=0;j<2;j++){
  11. LL tmp=0;
  12. for(int k=0;k<2;k++) tmp+=LL(a[i][k])*b[k][j];
  13. u[i][j]=tmp%MOD;
  14. }
  15. }
  16.  
  17. void pow(int a[2][2], int n){
  18. if(n==1) return;
  19. int u[2][2],r[2][2];
  20. memcpy(u,a,sizeof(u));
  21. pow(u,n/2);
  22. if(n%2){
  23. mul(u,a,r);
  24. mul(u,r,a);
  25. }else{
  26. mul(u,u,a);
  27. }
  28. }
  29.  
  30. int main(){
  31. int n,m,k;
  32. while(scanf("%d%d%d",&n,&m,&k)==3){
  33. int a[2][2]={
  34. {k-1,k},
  35. {m-k,m-k}
  36. };
  37. pow(a,n);
  38. int ans=(a[0][1]+a[1][1])%MOD;
  39. printf("%d\n",ans);
  40. }
  41. }
  42.  
Not running #stdin #stdout 0s 0KB
stdin
Standard input is empty
stdout
Standard output is empty