参考了某大佬的

我们可以根据(s[n-2], a[n-1]^2, a[n-1]*a[n-2], a[n-2]^2) * A = (s[n-1], a[n]^2, a[n]*a[n-1], a[n-1]^2)

能够求出关系矩阵

|1     0      0     0 |
A =   |1   x^2    x     1 |
        |0  2*x*y  y     0 |
        |0   y^2    0     0 |

这样就A了!

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; typedef long long ll;
const ll Mod = 10007;
const int N = 5;
int msize; struct Mat
{
ll mat[N][N];
}; Mat operator *(Mat a, Mat b)
{
Mat c;
memset(c.mat, 0, sizeof(c.mat));
for(int k = 0; k < msize; ++k)
for(int i = 0; i < msize; ++i)
if(a.mat[i][k])
for(int j = 0; j < msize; ++j)
if(b.mat[k][j])
c.mat[i][j] = (a.mat[i][k] * b.mat[k][j] + c.mat[i][j])%Mod;
return c;
} Mat operator ^(Mat a, ll k)
{
Mat c;
memset(c.mat,0,sizeof(c.mat));
for(int i = 0; i < msize; ++i)
c.mat[i][i]=1;
for(; k; k >>= 1)
{
if(k&1) c = c*a;
a = a*a;
}
return c;
} int main()
{
ll n,x,y;
msize = 4;
while(~scanf("%I64d%I64d%I64d",&n,&x,&y))
{
Mat A;
A.mat[0][0] = 1, A.mat[0][1] = 1, A.mat[0][2] = 0, A.mat[0][3] = 0;
A.mat[1][0] = 0, A.mat[1][1] = x*x%Mod, A.mat[1][2] = 2*x*y%Mod, A.mat[1][3] = y*y%Mod;
A.mat[2][0] = 0, A.mat[2][1] = x, A.mat[2][2] = y, A.mat[2][3] = 0;
A.mat[3][0] = 0, A.mat[3][1] = 1, A.mat[3][2] = 0, A.mat[3][3] = 0;
A = A^n;
printf("%I64d\n", (A.mat[0][0] + A.mat[0][1] + A.mat[0][2] + A.mat[0][3])%Mod);
}
return 0;
}

最新文章

  1. Struts 笔记 内部资料 请勿转载 谢谢合作
  2. EntityFrameWork使用MySql数据库分页的BUG
  3. 基于EasyUi ComBotree树修改 父节点选择问题
  4. PowerDesigner中Table视图怎样同时显示Code和Name
  5. Fitbit Flex 智能手环佩戴心得 主要说说过敏
  6. 在tp中使用mongo数据库并建立连接的实例
  7. .net 开发的奇淫巧计
  8. Android 设置进度条背景
  9. P142-1
  10. 创建指定日期java Date对象
  11. CentOS增加硬盘
  12. eclipse中servers(服务器)的配置
  13. 用javascript获取屏幕高度和宽度等信息
  14. 一些.net开源项目
  15. ThinkPHP 3 的CURD管理用户信息 修改和删除
  16. php Redis函数使用总结(string,hash,list, set , sort set )
  17. FJOI2017 RP++
  18. Element-ui表格选中回显
  19. 第五篇 - Selenium突破反爬获取qq邮件标题
  20. 记一次autofac+dapper+mvc的框架搭建实践

热门文章

  1. Windows10查看电脑的USB接口是2.0还是3.0
  2. maven build和push image中遇到的坑(学习过程记录)
  3. 基于Centos7.4搭建prometheus+grafana+altertManger监控Spring Boot微服务(docker版)
  4. 如何在idea中将项目生成API文档(超详细)(Day_32)
  5. Day029 JDK8中新日期和时间API (二)
  6. Git 分支基本命令
  7. 根据swagger.json生成flutter model,暂无空安全支持
  8. Spring Mvc Long类型精度丢失
  9. 向Relay添加算子
  10. Python API vs C++ API of TensorRT