题目:https://atcoder.jp/contests/agc013/tasks/agc013_e

边长的平方,可以看做是在该范围内放两个不同的球的方案数。两个球可以重合。

题意变成:给长为 n 的段放若干隔板,最前/后面有隔板,指定位置不能放隔板,相邻隔板间放两个不同球的方案数。

dp[ 0/1/2 ] 表示从上一个隔板至今已经放了几个球。把 “能放隔板” 和 “不能放隔板” 写成两个转移矩阵,就能转移了。

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
int rdn()
{
int ret=;bool fx=;char ch=getchar();
while(ch>''||ch<''){if(ch=='-')fx=;ch=getchar();}
while(ch>=''&&ch<='')ret=ret*+ch-'',ch=getchar();
return fx?ret:-ret;
}
const int N=1e5+,mod=1e9+;
int n,m,x[N];
struct Mtr{
int a[][];
Mtr(){memset(a,,sizeof a);}
Mtr operator* (const Mtr &b)const
{
Mtr c;
for(int i=;i<;i++)
for(int k=;k<;k++)
for(int j=;j<;j++)
c.a[i][j]=(c.a[i][j]+(ll)a[i][k]*b.a[k][j])%mod;
return c;
}
void init()
{
for(int i=;i<;i++)for(int j=;j<;j++)a[i][j]=;
a[][]=a[][]=a[][]=; a[][]=;
}
}ans,b0,b1,tp,one;
void pw(int n)
{
b0=one; tp.init();
while(n)
{ if(n&)b0=b0*tp; tp=tp*tp; n>>=;}
}
int main()
{
n=rdn();m=rdn();
for(int i=;i<=m;i++)x[i]=rdn(); x[++m]=n;
b1.init(); b1.a[][]=b1.a[][]=; b1.a[][]=;
for(int i=;i<;i++)one.a[i][i]=;
ans.a[][]=; pw(x[]); ans=ans*b0;
for(int i=;i<m;i++)
{
ans=ans*b1;
pw(x[i+]-x[i]-); ans=ans*b0;
}
printf("%d\n",ans.a[][]);
return ;
}

AGC013 E Placing Squares——模型转化+矩阵乘法的更多相关文章

  1. C# 矩阵乘法实现

    矩阵乘法是一种高效的算法可以把一些一维递推优化到log( n ),还可以求路径方案等,所以更是是一种应用性极强的算法.矩阵,是线性代数中的基本概念之一.一个m×n的矩阵就是m×n个数排成m行n列的一个 ...

  2. CNN卷积神经网络_深度残差网络 ResNet——解决神经网络过深反而引起误差增加的根本问题,Highway NetWork 则允许保留一定比例的原始输入 x。(这种思想在inception模型也有,例如卷积是concat并行,而不是串行)这样前面一层的信息,有一定比例可以不经过矩阵乘法和非线性变换,直接传输到下一层,仿佛一条信息高速公路,因此得名Highway Network

    from:https://blog.csdn.net/diamonjoy_zone/article/details/70904212 环境:Win8.1 TensorFlow1.0.1 软件:Anac ...

  3. 矩阵乘法&&矩阵快速幂&&最基本的矩阵模型——斐波那契数列

    矩阵,一个神奇又令人崩溃的东西,常常用来优化序列递推 在百度百科中,矩阵的定义: 在数学中,矩阵(Matrix)是一个按照长方阵列排列的复数或实数集合 ,最早来自于方程组的系数及常数所构成的方阵.这一 ...

  4. 学习心得:《十个利用矩阵乘法解决的经典题目》from Matrix67

    本文来自:http://www.matrix67.com/blog/archives/tag/poj大牛的博文学习学习 节选如下部分:矩阵乘法的两个重要性质:一,矩阵乘法不满足交换律:二,矩阵乘法满足 ...

  5. HDU 5895 Mathematician QSC(矩阵乘法+循环节降幂+除法取模小技巧+快速幂)

    传送门:HDU 5895 Mathematician QSC 这是一篇很好的题解,我想讲的他基本都讲了http://blog.csdn.net/queuelovestack/article/detai ...

  6. OpenGL学习进程(12)第九课:矩阵乘法实现3D变换

    本节是OpenGL学习的第九个课时,下面将详细介绍OpenGL的多种3D变换和如何操作矩阵堆栈.     (1)3D变换: OpenGL中绘制3D世界的空间变换包括:模型变换.视图变换.投影变换和视口 ...

  7. 基于OpenMP的矩阵乘法实现及效率提升分析

    一.  矩阵乘法串行实现 例子选择两个1024*1024的矩阵相乘,根据矩阵乘法运算得到运算结果.其中,两个矩阵中的数为double类型,初值由随机数函数产生.代码如下: #include <i ...

  8. [BZOJ 1875] [SDOI 2009] HH去散步【矩阵乘法】

    题目链接:BZOJ - 1875 题目分析: 这道题如果去掉“不会立刻沿着刚刚走来的路走回”的限制,直接用邻接矩阵跑矩阵乘法就可以了.然而现在加了这个限制,建图的方式就要做一些改变.如果我们把每一条边 ...

  9. 【转】Matrix67:十个利用矩阵乘法解决的经典题目

    好像目前还没有这方面题目的总结.这几天连续看到四个问这类题目的人,今天在这里简单写一下.这里我们不介绍其它有关矩阵的知识,只介绍矩阵乘法和相关性质.    不要以为数学中的矩阵也是黑色屏幕上不断变化的 ...

随机推荐

  1. curl的一些常用命令

    在学习nodejs中get到了一项新的技能crul curl 可以给在命令行上面给node服务器发送一些信息,然后得到服务器返回而响应信息,在命令行中打印出来. 下面是我整理的一些常用的命令:

  2. Git014--Rebase

    Git--Rebase 本文来自于:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b00 ...

  3. python操作mysql之增删改查

    [insert] import MySQLdb conn = MySQLdb.connect(","08day5" ) cur = conn.cursor() #把数据放 ...

  4. mybatis多对一

    产品和分类的多对一关系 多个产品属于一个分类 public class Product { private int id; private String name; private float pri ...

  5. 开发中遇到的相关linux问题

    一:java.sql.SQLException: Access denied for user 'root'@'10.150.152.200' (using password: YES) 1:用户名后 ...

  6. [Codeforces 555E]Case of Computer Network(Tarjan求边-双连通分量+树上差分)

    [Codeforces 555E]Case of Computer Network(Tarjan求边-双连通分量+树上差分) 题面 给出一个无向图,以及q条有向路径.问是否存在一种给边定向的方案,使得 ...

  7. ArrayList与List<T>的区别

    ArrayList alist = new ArrayList(); //ArrayList(object value),所以ArrayList可以存储任何类型,如果存储值类型的话会进行装箱操作,在操 ...

  8. NGUI的输入框的校验(input filed script)

    一,我们制作一个输入框,右键添加Sprite ,给Sprite添加一个child的label,然后给Sprite添加一个box collider,接着添加input filed script,将lab ...

  9. C# 值类型与引用类型的详解

    值类型与引用类型分这几种情况: 1.内存分为堆和栈,值类型的数据存储在栈中,引用类型的数据存储在堆中. 2.int numb=10,代码中的10是值类型的数据,numb只是一个指向10的变量而已.其中 ...

  10. sig文件制作

    一 配置环境变量 将link.exe,pcf.exe,sigmake.exe添加进PATH环境变量(选择“我的电脑” >“属性”>“高级” >“环境变量”>将文件地址添加进“p ...