题目链接  Broken Clock   中文题面链接

令$cos(xα) = f(x)$

根据三角函数变换公式有

$f(x) = \frac{2d}{l} f(x-1) - f(x-2)$

我们现在要求的是$l * f(t)$,把$f(t)$表示成$\frac{p}{q}$的形式

令$f(x) = \frac{g(x)}{l^{x}}$,那么$g(x) = p, l^{x} = q$

$\frac{g(x)}{l^{x}} = \frac{2d}{l} * \frac{g(x-1)}{l^{x-1}} - \frac{g(x-2)}{l^{x-2}}$

$g(x) = 2dg(x-1) - l^{2}g(x-2)$

那么这就是一个很显然的矩阵加速的套路,用矩阵快速幂求解$g(t)$即可。

  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. #define rep(i, a, b) for (int i(a); i <= (b); ++i)
  6. #define dec(i, a, b) for (int i(a); i >= (b); --i)
  7. #define MP make_pair
  8. #define fi first
  9. #define se second
  10.  
  11. typedef long long LL;
  12.  
  13. const LL mod = 1e9 + 7;
  14.  
  15. struct Matrix{ LL arr[3][3]; } unit, a, c;
  16.  
  17. LL p, q, d, l, t;
  18. int T, n;
  19.  
  20. inline LL Pow(LL a, LL b, LL mod){
  21. LL ret(1);
  22. for (; b; b >>= 1, (a *= a) %= mod) if (b & 1) (ret *= a) %= mod;
  23. return ret;
  24. }
  25.  
  26. Matrix Mul(Matrix a, Matrix b){
  27. Matrix c;
  28. rep(i, 1, n) rep(j, 1, n){
  29. c.arr[i][j] = 0;
  30. rep(k, 1, n) (c.arr[i][j] += (a.arr[i][k] * b.arr[k][j] % mod)) %= mod;
  31. }
  32. return c;
  33. }
  34.  
  35. Matrix Pow(Matrix a, int k){
  36. Matrix ret(unit); for (; k; k >>= 1, a = Mul(a, a)) if (k & 1) ret = Mul(ret, a); return ret;
  37. }
  38.  
  39. int main(){
  40.  
  41. n = 2;
  42. unit.arr[1][1] = unit.arr[2][2] = 1;
  43.  
  44. scanf("%d", &T);
  45. while (T--){
  46. scanf("%lld%lld%lld", &l, &d, &t);
  47. q = Pow(l, t, mod);
  48. c.arr[1][1] = 2 * d % mod;
  49. c.arr[1][2] = -l * l % mod;
  50. c.arr[1][2] += mod;
  51. c.arr[1][2] %= mod;
  52. c.arr[2][1] = 1;
  53. c.arr[2][2] = 0;
  54. --t;
  55. a = unit;
  56. while (t){
  57. if (t & 1) a = Mul(a, c);
  58. t >>= 1;
  59. c = Mul(c, c);
  60. }
  61.  
  62. p = (a.arr[1][1] * d % mod + a.arr[1][2] % mod) % mod;
  63. p %= mod;
  64. printf("%lld\n", l * p % mod * Pow(q, mod - 2, mod) % mod);
  65. }
  66.  
  67. return 0;
  68. }

  

CodeChef February Challenge 2018 Broken Clock (三角函数推导 + 矩阵快速幂)的更多相关文章

  1. 2018.09.26 bzoj5221: [Lydsy2017省队十连测]偏题(数学推导+矩阵快速幂)

    传送门 由于没有考虑n<=1的情况T了很久啊. 这题很有意思啊. 考试的时候根本不会,骗了30分走人. 实际上变一个形就可以了. 推导过程有点繁杂. 直接粘题解上的请谅解. 不得不说这个推导很妙 ...

  2. [ An Ac a Day ^_^ ] hdu 4565 数学推导+矩阵快速幂

    从今天开始就有各站网络赛了 今天是ccpc全国赛的网络赛 希望一切顺利 可以去一次吉大 希望还能去一次大连 题意: 很明确是让你求Sn=[a+sqrt(b)^n]%m 思路: 一开始以为是水题 暴力了 ...

  3. codechef February Challenge 2018 简要题解

    比赛链接:https://www.codechef.com/FEB18,题面和提交记录是公开的,这里就不再贴了 Chef And His Characters 模拟题 Chef And The Pat ...

  4. CodeChef February Challenge 2018 Points Inside A Polygon (鸽笼原理)

    题目链接  Points Inside A Polygon 题意  给定一个$n$个点的凸多边形,求出$[ \frac{n}{10}]\ $个凸多边形内的整点. 把$n$个点分成$4$类: 横坐标奇, ...

  5. HDU6030 Happy Necklace(推导+矩阵快速幂)

    HDU6030 Happy Necklace 推导或者可以找规律有公式:\(f[n] = f[n-1] + f[n-3]\) . 构造矩阵乘法: \[ \begin{pmatrix} f_i \\ f ...

  6. LightOJ 1070 - Algebraic Problem 推导+矩阵快速幂

    http://www.lightoj.com/volume_showproblem.php?problem=1070 思路:\({(a+b)}^n =(a+b){(a+b)}^{n-1} \) \(( ...

  7. CodeChef-----February Challenge 2018---Broken Clock(极坐标+三角函数递推+矩阵快速幂)

    链接:  https://www.codechef.com/FEB18/problems/BROCLK Broken Clock Problem Code: BROCLK Chef has a clo ...

  8. Codechef October Challenge 2018 游记

    Codechef October Challenge 2018 游记 CHSERVE - Chef and Serves 题目大意: 乒乓球比赛中,双方每累计得两分就会交换一次发球权. 不过,大厨和小 ...

  9. Codechef September Challenge 2018 游记

    Codechef September Challenge 2018 游记 Magician versus Chef 题目大意: 有一排\(n(n\le10^5)\)个格子,一开始硬币在第\(x\)个格 ...

随机推荐

  1. CentOS 7.5 部署蓝鲸运维平台

    环境准备 官方建议 准备至少3台 CentOS 7 以上操作系统的机器 最低配置:2核4G 建议配置: 4核12G 以上 部署前关闭待安装主机之间防火墙,保证蓝鲸主机之间通信无碍 部署前关闭SELin ...

  2. windows下vim高亮systemverilog

    主要解决window环境下,vim高亮systemverilog的方法. 第一步:准备材料下载地址:https://files.cnblogs.com/files/aslmer/verilog_sys ...

  3. ImportError: dynamic module does not define module export function (PyInit__caffe)

    使用python3运行caffe,报了该错误. 参考网址:https://stackoverflow.com/questions/34295136/importerror-dynamic-module ...

  4. mac book pro 安装keras (无gpu)

    转自http://www.jianshu.com/p/01dc42595733 注:Macbook pro 13' 没有NVIDIA的显卡,没办法CUDA编程,所以下面都是CPU编程. 1. 安装ho ...

  5. 【转】mysql 计划事件

    转自:http://www.cnblogs.com/c840136/articles/2388512.html MySQL5.1.x版本中引入了一项新特性EVENT,顾名思义就是事件.定时任务机制,在 ...

  6. 01、JAVA开发准备

    一.首先要认识几个名词: 1. JRE(Java Runtime Environment ,JAVA运行环境):它包含Java虚拟机(JVM,Java Virtual Machine)和Java程序所 ...

  7. 华东交通大学2017年ACM双基程序设计大赛题解

    简单题 Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other) Total Submissio ...

  8. POJ 1149 PIGS | 最大流问题

    参考了这个PDF 第一道网络流啊!感动 #include<cstdio> #include<algorithm> #include<cstring> #includ ...

  9. jquery字数限制超出显示...,原有内容在title中显示

    为标签添加class = sliceFont:添加data-num属性为要显示的字数,截取后会在title中显示原有字符串: $('.sliceFont').each(function(index, ...

  10. xdebug使用教程

    http://www.cnblogs.com/xujian2016/p/5548921.html 配置信息 zend_extension="D:\phpStudy\php53n\ext\ph ...