当前位置: 首页 > news >正文

HDU-4686 Arc of Dream(推公式+矩阵快速幂)

function:

where
a 0 = A0 
a i = a i-1*AX+AY 
b 0 = B0 
b i = b i-1*BX+BY 
What is the value of AoD(N) modulo 1,000,000,007?
Input

A0 AX AY 
B0 BX BY

N <= 1e18, other integers <= 2e9

思路:

将an*bn = (an-1 * AX + AY) * (bn-1 * BX + BY) 展开得
(an-1 * bn-1) * AX * BX +
an-1 * AX * BY +
bn-1 * BX * AY +
AY * BY 
所以便得到了an*bn的递推公式,然后再新加一行来求前n项和即可。如图5*5矩阵,然后利用矩阵快速幂求解即可。


代码:

#include <algorithm>
#include <string.h>
#include <cstdio> 
#define LL long long
using namespace std;
const LL mod = 1e9+7;
struct node
{
	LL m[5][5];
	node(){memset(m, 0, sizeof m);}
} base, ans;
LL N, A0, AX, AY, B0, BX, BY;
LL AB, A, B, S;
inline void init()
{
	base.m[0][0] = AX*BX%mod, base.m[0][1] = AX*BY%mod;
	base.m[0][2] = AY*BX%mod, base.m[0][3] = AY*BY%mod;
	base.m[0][4] = 0, base.m[1][0] = 0;
	base.m[1][1] = AX, base.m[1][2] = 0;
	base.m[1][3] = AY, base.m[1][4] = 0;
	base.m[2][0] = 0, base.m[2][1] = 0;
	base.m[2][2] = BX, base.m[2][3] = BY;
	base.m[2][4] = 0, base.m[3][0] = 0;
	base.m[3][1] = 0, base.m[3][2] = 0;
	base.m[3][3] = 1, base.m[3][4] = 0;
	base.m[4][0] = AX*BX%mod, base.m[4][1] = AX*BY%mod;
	base.m[4][2] = AY*BX%mod, base.m[4][3] = AY*BY%mod;
	base.m[4][4] = 1;
	ans.m[0][0] = 1, ans.m[0][1] = 0;
	ans.m[0][2] = 0, ans.m[0][3] = 0;
	ans.m[0][4] = 0, ans.m[1][0] = 0;
	ans.m[1][1] = 1, ans.m[1][2] = 0;
	ans.m[1][3] = 0, ans.m[1][4] = 0;
	ans.m[2][0] = 0, ans.m[2][1] = 0;
	ans.m[2][2] = 1, ans.m[2][3] = 0;
	ans.m[2][4] = 0, ans.m[3][0] = 0;
	ans.m[3][1] = 0, ans.m[3][2] = 0;
	ans.m[3][3] = 1, ans.m[3][4] = 0;
	ans.m[4][0] = 0, ans.m[4][1] = 0;
	ans.m[4][2] = 0, ans.m[4][3] = 0;
	ans.m[4][4] = 1;
}
node mul(node a, node b)
{
	node ans1;
	for(int i = 0; i < 5; ++i)
	for(int j = 0; j < 5; ++j)
	for(int k = 0; k < 5; ++k)
	{
		ans1.m[i][j] += a.m[i][k]*b.m[k][j]%mod;
		ans1.m[i][j] %= mod;
	}
	return ans1;
}
node qpow(LL b)
{
	init();
	while(b)
	{
		if(b&1) ans = mul(ans, base);
		base = mul(base, base);
		b >>= 1;
	}
	return ans;
}
int main()
{
	while(~scanf("%lld", &N))
	{
		scanf("%lld %lld %lld", &A0, &AX, &AY);
		scanf("%lld %lld %lld", &B0, &BX, &BY);
		if(!N){puts("0"); continue;}
		A0 %= mod, AX %= mod, AY %= mod;
		B0 %= mod, BX %= mod, BY %= mod;
		AB = A0*B0%mod;
		A = A0, B = B0, S = AB; 
		node res = qpow(N-1);
		LL final = res.m[4][0]*AB%mod;
		final += res.m[4][1]*A%mod; final %= mod;
		final += res.m[4][2]*B%mod; final %= mod;
		final += res.m[4][3]; final %= mod;
		final += res.m[4][4]*S%mod; final %= mod;
		printf("%lld\n", final);
	}
	return 0;
}

继续加油~

相关文章:

  • python之测试
  • Codeforces-557D Vitaly and Cycle(二分图染色)
  • POJ-1019 Number Sequence(思维题)
  • 【吾日三省吾身】2015.6.13-涅槃行动第二十六天
  • Codeforces Round #427 (Div. 2)-C. Star sky(二维前缀和)
  • sequioadb源码分析2
  • HDU-6058 Kanade's sum - 2017 Multi-University Training Contest - Team 3(思维+模拟链表)
  • PowerShell获取特定“描述”的虚拟机IP地址
  • HDU-6060 RXD and dividing - 2017 Multi-University Training Contest - Team 3(思维+最小斯坦纳树)
  • error while loading shared libraries错误处理
  • POJ-3270 Cow Sorting(贪心+置换)
  • php对gzip文件或者字符串解压实例参考
  • POJ-1637 Sightseeing tour(通过网络流判定混合图的欧拉回路)
  • 哈密顿图和欧拉图知识小结
  • POJ-2689 Prime Distance(区间素数筛--经典题)
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • javascript 总结(常用工具类的封装)
  • Laravel Telescope:优雅的应用调试工具
  • Less 日常用法
  • mysql常用命令汇总
  • MySQL-事务管理(基础)
  • Netty 框架总结「ChannelHandler 及 EventLoop」
  • Python 使用 Tornado 框架实现 WebHook 自动部署 Git 项目
  • SOFAMosn配置模型
  • text-decoration与color属性
  • unity如何实现一个固定宽度的orthagraphic相机
  • Vultr 教程目录
  • windows下使用nginx调试简介
  • 使用 Docker 部署 Spring Boot项目
  • 我从编程教室毕业
  • 由插件封装引出的一丢丢思考
  • 再次简单明了总结flex布局,一看就懂...
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • 长三角G60科创走廊智能驾驶产业联盟揭牌成立,近80家企业助力智能驾驶行业发展 ...
  • (1)Android开发优化---------UI优化
  • (39)STM32——FLASH闪存
  • (8)Linux使用C语言读取proc/stat等cpu使用数据
  • (NSDate) 时间 (time )比较
  • (十七)Flask之大型项目目录结构示例【二扣蓝图】
  • (终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测
  • (转)GCC在C语言中内嵌汇编 asm __volatile__
  • .net CHARTING图表控件下载地址
  • .NET Core中的去虚
  • .Net 访问电子邮箱-LumiSoft.Net,好用
  • .NET 依赖注入和配置系统
  • .NET 中的轻量级线程安全
  • .NET 中使用 Mutex 进行跨越进程边界的同步
  • .net中调用windows performance记录性能信息
  • /boot 内存空间不够
  • @RequestMapping 的作用是什么?
  • [ vulhub漏洞复现篇 ] Apache Flink目录遍历(CVE-2020-17519)
  • [@Controller]4 详解@ModelAttribute
  • [100天算法】-实现 strStr()(day 52)
  • [20150629]简单的加密连接.txt