AT2371 Placing Squares
题解
考虑\(dp\)
\]
我们可以设\((i-j)\)为\(x\),那么随着\(i\)向右移动一格,每个\(x\)都是会增长\(1\)的。
\]
\]
为了转移,我们需要将这三段分开维护。
注意,当没有障碍点的时候,转移需要再加上一个\(dp[i]\)。
转移的时候构造矩阵就可以了。
代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod=1e9+7;
int n,m;
inline ll rd(){
ll x=0;char c=getchar();bool f=0;
while(!isdigit(c)){if(c=='-')f=1;c=getchar();}
while(isdigit(c)){x=(x<<1)+(x<<3)+(c^48);c=getchar();}
return f?-x:x;
}
inline void MOD(ll &x){x=x>=mod?x-mod:x;}
struct matrix{
ll a[3][3];
matrix(){memset(a,0,sizeof(a));}
inline matrix operator *(const matrix &b)const{
matrix c;
for(int i=0;i<3;++i)
for(int j=0;j<3;++j){
c.a[i][j]=0;
for(int k=0;k<3;++k)
MOD(c.a[i][j]+=a[i][k]*b.a[k][j]%mod);
}
return c;
}
inline void print(){
for(int i=0;i<3;++i){
for(int j=0;j<3;++j)cout<<a[i][j]<<" ";puts("");
}
puts("");
}
}a1,a2,ans;
inline matrix solve(matrix a,matrix b,int c){
while(c){
if(c&1)a=a*b;
b=b*b;
c>>=1;
}
return a;
}
int main(){
n=rd();m=rd();
a1.a[0][0]=1;a1.a[1][0]=1;a1.a[1][1]=1;a1.a[2][0]=1;a1.a[2][1]=2;a1.a[2][2]=1;
a2=a1;a2.a[0][2]++;a2.a[1][2]++;a2.a[2][2]++;
ans.a[0][2]=1;
int x=0,pre=1;
for(int i=1;i<=m;++i){
x=rd();
ans=solve(ans,a2,x-pre);
ans=ans*a1;
pre=x+1;
}
ans=solve(ans,a2,n-pre);
cout<<(ans.a[0][0]+ans.a[0][1]+ans.a[0][2])%mod;
return 0;
}
AT2371 Placing Squares的更多相关文章
- AtCoder Grand Contest 013 E - Placing Squares
题目传送门:https://agc013.contest.atcoder.jp/tasks/agc013_e 题目大意: 给定一个长度为\(n\)的木板,木板上有\(m\)个标记点,距离木板左端点的距 ...
- AGC013 E Placing Squares——模型转化+矩阵乘法
题目:https://atcoder.jp/contests/agc013/tasks/agc013_e 边长的平方,可以看做是在该范围内放两个不同的球的方案数.两个球可以重合. 题意变成:给长为 n ...
- Atcoder Grand Contest 013 E - Placing Squares(组合意义转化+矩阵快速幂/代数推导,思维题)
Atcoder 题面传送门 & 洛谷题面传送门 这是一道难度 Cu 的 AGC E,碰到这种思维题我只能说:not for me,thx 然鹅似乎 ycx 把题看错了? 首先这个平方与乘法比较 ...
- Solution -「AGC 013E」「AT 2371」Placing Squares
\(\mathcal{Description}\) Link. 给定一个长度为 \(n\) 的木板,木板上有 \(m\) 个标记点,第 \(i\) 个标记点距离木板左端点的距离为 \(x_i\ ...
- 【AtCoder】AGC013
AGC013 A - Sorted Arrays 直接分就行 #include <bits/stdc++.h> #define fi first #define se second #de ...
- A#G/C013
A#G/C013 A Sorted Arrays 不会/kk B Hamiltonish Path 我是傻逼 如果一条路径不合法,那么把不合法的端点向没出现过的相邻点连过去救星了 C Ants on ...
- 一个小 Trick
平方变两次 一个状态 \(S\) 有一个贡献,所有状态 \(S\) 组成集合 \(U\) . 然后我们要统计下面这个东西 \[ans=\sum_{S\in U}f^2(S) \] 然后我们就可以看作是 ...
- [LeetCode] Word Squares 单词平方
Given a set of words (without duplicates), find all word squares you can build from them. A sequence ...
- 卡通图像变形算法(Moving Least Squares)附源码
本文介绍一种利用移动最小二乘法来实现图像变形的方法,该方法由用户指定图像中的控制点,并通过拖拽控制点来驱动图像变形.假设p为原图像中控制点的位置,q为拖拽后控制点的位置,我们利用移动最小二乘法来为原图 ...
随机推荐
- 【Qt开发】状态栏设置
1.在Qt 里面,状态栏显示的信息有三种类型:临时信息.一般信息和永久信息. 其中,临时信息指临时显示的信息,比如QAction 的提示等,也可以设置自己的 临时信息,比如程序启动之后显示Read ...
- django中的一对一的关系
在django中一对一的关系其实就是在后面加上了unique=True 唯一的操作 源码就是这样的 其余的操作跟多对一的操作一样
- JSP总结(jsp/EL表达式/核心标签)
1.概念 jsp,即java Server Pages,java服务器页面. 2.简单介绍 小示例 <%@ page language="java" contentType= ...
- 2019JS必看面试题
2019JS必看面试题:https://www.jianshu.com/p/f1f39d5b2a2e 1. javascript的typeof返回哪些数据类型. 答案:string,boolean,n ...
- laravel5.5结合bootstrap上传插件fileinput 上传图片
引入相关js <script src="{{ asset('bootstrap-fileinput/js/fileinput.js') }}"></script& ...
- linux:服务器代理squid安装配置
国内上往外的网站太慢,配了个香港代理服务器.如下:当前环境: centos系统.香港服务器IP(假设:59.188.71.11)检查squid是否安装:[root@localhost ~]# rpm ...
- STL 之 queue
默认容器为双端队列deque 常用的函数有: empty Test whether container is empty (public member function ) size Return s ...
- 下载zip
- web框架-(一)初识web框架
一.web框架本质 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. #!/usr/bin/env python #coding:ut ...
- spring boot filter -Autowired
需求:在SpringBoot实现拦截器,并且需要自定义的filter类型自动装配一些对象 自定义的过滤器类 public class SessionExpireFilter implements Fi ...