嘟嘟嘟

应该算一道结论题吧。

首先很明显的一点,就是对于ai,j,我们只用求出ai,1就行了,剩下的就是斐波那契和矩阵快速幂的事。

至于如何求ai,1,用两种方法,但是哪一个我都不懂为啥,网上也没有解释。

F1:斐波那契最小拆分。对于 i,拆分 i - 1:每一次选择小于i - 1且最大的斐波那契数相减,然后用二进制表示每一个斐波那契数取没取到。于是的到一个01序列,然后再后面再加一个01,对应到新的取数序列,代入斐波那契,就得到了ai,1

举个例子:i = 5,于是拆分4:4 = 3 + 1,则序列为101,加上01:10101,对应到斐波那契序列为1 + 3 + 8 = 12,就是ai,1

F2:解法就更迷了:把ai,1序列输到OEIS上,直接得到了这么个公式:ai,1 = i * (1 + √5) / 2 + i - 1。代入求值……

知道了ai,1和ai,2,剩下的就是矩阵快速幂水过了。

 #include<cstdio>
#include<iostream>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<cstdlib>
#include<cctype>
#include<vector>
#include<stack>
#include<queue>
using namespace std;
#define enter puts("")
#define space putchar(' ')
#define Mem(a, x) memset(a, x, sizeof(a))
#define rg register
typedef long long ll;
typedef double db;
const int INF = 0x3f3f3f3f;
const db eps = 1e-;
//const int maxn = ;
inline ll read()
{
ll ans = ;
char ch = getchar(), last = ' ';
while(!isdigit(ch)) {last = ch; ch = getchar();}
while(isdigit(ch)) {ans = ans * + ch - ''; ch = getchar();}
if(last == '-') ans = -ans;
return ans;
}
inline void write(ll x)
{
if(x < ) x = -x, putchar('-');
if(x >= ) write(x / );
putchar(x % + '');
} ll n, m, mod;
ll c[];
const int ha[] = {, , , , , }; const int N = ;
struct Mat
{
ll a[N][N];
Mat operator * (const Mat& oth)const
{
Mat ret; Mem(ret.a, );
for(int i = ; i < N; ++i)
for(int j = ; j < N; ++j)
for(int k = ; k < N; ++k)
ret.a[i][j] += a[i][k] * oth.a[k][j], ret.a[i][j] %= mod;
return ret;
}
}f; void init()
{
Mem(f.a, );
f.a[][] = f.a[][] = f.a[][] = ;
} Mat quickpow(Mat A, ll b)
{
Mat ret; Mem(ret.a, );
ret.a[][] = ret.a[][] = ;
for(; b; b >>= , A = A * A)
if(b & ) ret = ret * A;
return ret;
} int main()
{
n = read(); m = read(); mod = read();
c[] = ((ll)(n * ( + sqrt())) / + n - ) % mod;
c[] = ((c[] * - n + ) % mod + mod) % mod;
init();
if(m < ) {write(c[m]), enter; return ;}
m -= ;
Mat A = quickpow(f, m);
ll ans = A.a[][] * c[] % mod + A.a[][] * c[] % mod;
write(ans % mod), enter;
return ;
}

[AHOI2004]数字迷阵的更多相关文章

  1. C语言 · 判定数字

    编写函数,判断某个给定字符是否为数字. 样例输入 9 样例输出 yes #include<stdio.h> int main(){ char c; scanf("%c" ...

  2. excel 日期/数字格式不生效需要但双击才会生效的解决办法

    原因: Excel2007设置过单元格格式后,并不能立即生效必须挨个双击单元格,才能生效.数据行很多.效率太低. 原因:主要是一些从网上拷贝过来的日期或数字excel默认为文本格式或特殊-中文数字格式 ...

  3. JavaScript求两个数字之间所有数字的和

    这是在fcc上的中级算法中的第一题,拉出来的原因并不是因为有什么好说的,而是我刚看时以为是求两个数字的和, 很显然错了.我感觉自己的文字理解能力被严重鄙视了- -.故拉出来折腾折腾. 要求: 给你一个 ...

  4. Xamarin Android 应用程序内图标上数字提示

    最近在用 Xamarin 做一个 Android 应用,打开应用时,如果有新消息,需要在应用内的 Toolbar 或者首页的图标上显示数字提示.在这里和大家分享一下实现方法,如果你有更新好的实现方法, ...

  5. C# WinForm使用乐器数字接口

    继续,前面已经实现了C#调用Windows API实现了弹出对话框功能.使用了User32.dll文件,主要代码如下: [DllImport("User32.dll")]publi ...

  6. 04实现累加和计算功能并且实现textbox不允许输入数字以外的字符但不包括退格键同时不允许第一个数值为0

    private void button1_Click(object sender, EventArgs e) { double number1, number2; if (double.TryPars ...

  7. js验证输入的是否是数字,小数保留几位小数

    1.验证方法 validationNumber(e, num)  e代表标签对象,num代表保留小数位数 function validationNumber(e, num) { -]+\.?[-]*$ ...

  8. 原生js可爱糖果数字时间特效

    效果展示:http://hovertree.com/texiao/js/35/ 数字采用漂亮的糖果皮肤设计 效果图: 代码如下: <!DOCTYPE html> <html> ...

  9. php实现中文转数字,实现方式很智能很php

    分享一个辅助函数,使用php尽可能识别出字符串中的数字,实现效果如下. 1 2 3 4 5 6 7 8 9 echo checkNatInt('九百六十万'); //普通中文数字,9600000 ec ...

随机推荐

  1. Entity Framework6 with Visual Studio 2013 update3 for Oracle 11g

    2014年7月的时候,写了一篇关于EF5 with visual studio 2010 for oracle 11g的博文 原文地址 :http://www.cnblogs.com/HouZhiHo ...

  2. Java - 避免使用finalizer

    Finalizers are unpredictable ,often dangerous ,and generally unnecessary. 在Java中,GC会自动回收不可达对象相关的空间,而 ...

  3. 解决github无法访问的问题

     gitbub是外网,经常会遇到访问不了的问题,并且有时能访问也网速好慢. 解决这个问题的方法是 更改hosts文件,地址: C:\Windows\System32\Drivers\etc 我在hos ...

  4. Java基础(9)——数组

    难点儿的已经过去啦,现在又开始基础了哈~ 之前讲变量的时候,变量是一个个的呀~,那我要搞一串变量该啷个办呢?Java给我们出了个好东西叫数组(*^▽^*) 数组呢,就是将变量一组一组的存起来,这个也是 ...

  5. IDEA创建Maven项目和子模块

    一.新建Project a. 新建项目,点击Create New Project b. 选择使用maven来新建项目 选择新建Maven模块(对IDEA来说是项目) 如果Project SDK那里没有 ...

  6. 2018-12-25 课堂笔记&面试题

    面试题一.Java中,八大基本数据类型有哪些?答:数值型:整型(byte.short.int.long)浮点型(float.double)非数值型:布尔类型(boolean)字符型(char).注意: ...

  7. orderby与groupby同时使用

    两个同时使用:要求排序其他字段 select c1,max(c2) as a from table group by c1 order by a; in查询按照排序结果: ,,,....)

  8. 微服务-分布式日志系统Logstash部署

    参考资料: 1 .Logstash中文官网 2. 阿里云Elasticsearch> 最佳实践 > logstash部署 3. logstash.elasticsearch.kibana搭 ...

  9. PAT 1082. Read Number in Chinese

    #include <cstdio> #include <cstdlib> #include <string> #include <vector> #in ...

  10. AngularJs 延时器、计时器

    1.$timeout延时器 apptest.controller("main",function($scope,$timeout){ $scope.pink="pink& ...