【HDU4565】So Easy!
【HDU4565】So Easy!
题面
要你求
\]
其中\(0<a,m<2^{15},(a-1)^2<b<a^2,0<b,n<2^{31}\)
题解
这个向上取整放在这里很丑对吧,我们化一下柿子。
\therefore a-\sqrt b
\]
因为\((a-\sqrt b)^n\)是个很小的小数且\(a-\sqrt b\)与\(a+\sqrt b\)共轭,所以
\]
设\(C_n=(a-\sqrt b)^n+(a+\sqrt b)^n\)
则
= (a+\sqrt b)^{n+1}+(a-\sqrt b)^{n+1}+(a^2-b)*(a-\sqrt b)^{n-1}+(a^2-b)*(a+\sqrt b)^{n-1}\\
= C_{n+1}+(a^2-b)C_{n-1}\\
\Leftrightarrow C_{n+1}=2a*C_n+(b-a^2)C_{n-1}
\]
然后构一个矩阵,就可以快速幂了:
\begin{matrix}
2a & b-a^2\\
1 & 0\\
\end{matrix}
\right]
*
\left[
\begin{matrix}
C_{n} \\
C_{n-1} \\
\end{matrix}
\right]
=
\left[
\begin{matrix}
C_{n+1} \\
C_n \\
\end{matrix}
\right]
\]
代码
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
typedef long long ll;
ll A, B, N, Mod;
struct Matrix {
ll m[2][2];
void clear() { memset(m, 0, sizeof(m)); }
void init() { for (int i = 0; i < 2; i++) m[i][i] = 1; }
ll *operator [] (int id) { return m[id]; }
Matrix operator * (const Matrix &b) {
Matrix res; res.clear();
for (int i = 0; i < 2; i++)
for (int j = 0; j < 2; j++)
for (int k = 0; k < 2; k++)
res[i][j] = (res[i][j] + m[i][k] * b.m[k][j] % Mod) % Mod;
return res;
}
} S, T;
int main () {
while (~scanf("%lld%lld%lld%lld", &A, &B, &N, &Mod)) {
S.clear(), T.clear();
S[0][0] = (A * 2) % Mod, S[1][0] = 2;
T[0][0] = (A * 2) % Mod, T[0][1] = ((B - A * A % Mod) % Mod + Mod) % Mod;
T[1][0] = 1, T[1][1] = 0;
Matrix res; res.clear(); res.init();
while (N) { if (N & 1) res = res * T; N >>= 1; T = T * T; }
S = res * S;
printf("%lld\n", (S[1][0] % Mod + Mod) % Mod);
}
return 0;
}
【HDU4565】So Easy!的更多相关文章
- 【BZOJ3450】Tyvj1952 Easy 期望DP
[BZOJ3450]Tyvj1952 Easy Description 某一天WJMZBMR在打osu~~~但是他太弱逼了,有些地方完全靠运气:(我们来简化一下这个游戏的规则有n次点击要做,成功了就是 ...
- 【bzoj3450】Tyvj1952 Easy
题目描述 某一天WJMZBMR在打osu~~~但是他太弱逼了,有些地方完全靠运气:(我们来简化一下这个游戏的规则有n次点击要做,成功了就是o,失败了就是x,分数是按comb计算的,连续a个comb就有 ...
- 【AGC005F】Many Easy Problems FFT 容斥原理
题目大意 给你一棵树,有\(n\)个点.还给你了一个整数\(k\). 设\(S\)为树上某些点的集合,定义\(f(S)\)为最小的包含\(S\)的联通子图的大小. \(n\)个点选\(k\)个点一共有 ...
- 【AGC005F】Many Easy Problems (NTT)
Description 给你一棵\(~n~\)个点的树和一个整数\(~k~\).设为\(~S~\)为树上某些点的集合,定义\(~f(S)~\)为最小的包含\(~S~\)的联通子图的大小.\(~n~ ...
- 【AGC005F】Many Easy Problems
Description 题目链接 对于每个\(k\),统计任选\(k\)个点作为关键点的"最小生成树"的大小之和 Solution 正向想法是枚举或者计算大小为\(x\).叶子数目 ...
- 【题解】An Easy Problem
题目描述 给定一个正整数N,求最小的.比N大的正整数M,使得M与N的二进制表示中有相同数目的1. 举个例子,假如给定的N为78,其二进制表示为1001110,包含4个1,那么最小的比N大的并且二进制表 ...
- 【模拟】NEERC15 E Easy Problemset (2015-2016 ACM-ICPC)(Codeforces GYM 100851)
题目链接: http://codeforces.com/gym/100851 题目大意: N个人,每个人有pi个物品,每个物品价值为0~49.每次从1~n顺序选当前这个人的物品,如果这个物品的价值&g ...
- 【AtCoder】AGC005 F - Many Easy Problems 排列组合+NTT
[题目]F - Many Easy Problems [题意]给定n个点的树,定义S为大小为k的点集,则f(S)为最小的包含点集S的连通块大小,求k=1~n时的所有点集f(S)的和取模92484403 ...
- 【CodeForces】913 D. Too Easy Problems
[题目]D. Too Easy Problems [题意]给定n个问题和总时限T,每个问题给定时间ti和限制ai,当解决的问题数k<=ai时问题有效,求在时限T内选择一些问题解决的最大有效问题数 ...
随机推荐
- 【LGP5108】仰望半月的夜空
题目 我还会写\(SA\)和 \(ST\)表真是令人感动 发现这是一个思博题 我们开一个指针,标记一下当前合法的字典序最小的后缀排名在哪里,刚开始自然是\(1\) 我们发现这个后缀不能为我们提供\(i ...
- [USACO09MAR]Sand Castle
嘟嘟嘟 太水了,大佬们就绕道吧…… 就是m, b数组分别排个序,然后更改对应位置的m[i]和b[i],就行了. 因为如果m[i]不改为b[i]而是b[i + 1]的话,那么必定要将m[j] (j &g ...
- mvc數據遷移
在本节中,我们将使用Entity Framework Code First 数据迁移功能将模型类的改变应用到数据库中. 默 认情况下,当我们使用Entity Framework Code First ...
- python 怎样构造字典格式的数据
#dict()函数的使用 第一种方法l=[('name','xueli'),('age',12)]dd1=dict(l)print dd1#{'age': 12, 'name': 'xueli'} 第 ...
- 将本地已经存在的非git项目提交到github上的空仓库
一.本地项目执行操作 1.在本地项目目录下初始化git仓库 git init 2.将本地项目下工作区的所有文件添加到git版本库的暂存区中 git add . (可以创建.gitignore文件忽略不 ...
- disconf实践(二)基于XML的分布式配置文件管理,不会自动reload
上一篇博文介绍了disconf web的搭建流程,这一篇就介绍disconf client通过配置xml文件来获取disconf管理端的配置信息. 1. 登录管理端,并新建APP,然后上传配置文件 2 ...
- PAT——1021. 个位数统计
给定一个k位整数N = dk-1*10k-1 + ... + d1*101 + d0 (0<=di<=9, i=0,...,k-1, dk-1>0),请编写程序统计每种不同的个位数字 ...
- 【luogu P1156 垃圾陷阱】 题解
题目链接:https://www.luogu.org/problemnew/show/P1156 设\(dp[i][j]\)表示前i堆到达高度j时的所活最长时间 那么一旦到当前状态能到达满足的时间和高 ...
- ASP.NET Core MVC中Controller的Action如何直接使用Response.Body的Stream流输出数据
在ASP.NET Core MVC中,我们有时候需要在Controller的Action中直接输出数据到Response.Body这个Stream流中,例如如果我们要输出一个很大的文件到客户端浏览器让 ...
- 精准测试白皮书v3.0-2019最新版
现代社会是建立在各种以计算机为基石的软件技术基础之上的.随着日新月异的需求变化,软件系统越来越复杂.很多人觉得软件开发才是重要环节,但实际上,无法对大型软件进行有效的质量把控,就无法真正构建与维护大型 ...