[Luogu] P4910 帕秋莉的手环
题目背景
帕秋莉是蕾米莉亚很早结识的朋友,现在住在红魔馆地下的大图书馆里。不仅擅长许多魔法,还每天都会开发出新的魔法。只是身体比较弱,因为哮喘,会在咏唱符卡时遇到麻烦。
她所用的属性魔法,主要是生命和觉醒的“木”,变化和活动的“火”,基础和不动的“土”,果实和丰收的“金”,寂静和净化的“水”,机动和攻击的“日”,被动和防御的“月”七种属性
没有窗户的图书馆或许充满了灰尘,不过她认为在书旁边才是自己,所以她不能从书的旁边离开。这样已经一百年了。
题目描述
经过数年魔法的沉淀,帕秋莉将她那浩瀚无边的魔法的一部分浓缩到了一些特质的珠子中。
由于帕秋莉爱好和平,她只把象征生命和觉醒的木属性魔法和果实和丰收的金属性魔法放入了珠子中。
她认为光要这些珠子没有什么用处,于是她想将这些珠子串成魔法手环,这样就好看多了。于是,她拿出来用来串这些珠子的线 - 雾雨灵径。
她将这些珠子串到一起之后发现了一些性质:一段雾雨灵径的颜色是由两边的珠子的属性决定的,当一段雾雨灵径连接的两个珠子中只要有一个是金属性的,那么这段雾雨灵径的颜色就为金色
帕秋莉想要一个全都是金色的手环,而且她还想知道一共有多少种方案。由于她还要研究新的魔法,她就把这件事交给了你。由于她的魔法浩瀚无边,她有无穷的珠子
她并不想看着好几十位的数字,于是你需要对1000000007进行取模
题目解析
一眼不可做系列
首先理解一下题,一段线是金色的仅当它的两个端点至少有一个金属球。
然后…
没有高大上算法,只有手玩小数据得到的规律:
| n |
答案 |
| 1 | 1 |
| 2 | 3 |
| 3 | 4 |
| 4 | 7 |
| 5 | 10 |
规律就是ans[i] = ans[1-1] + ans[i-2]
鉴于数据范围矩阵乘法
Code
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std; const long long MAXN = 1e18;
const long long p = ; struct Matrix {
long long m[][];
int sx,sy;
} str,pro; long long n; inline void init() {
str.m[][] = ;
str.m[][] = ;
str.sx = , str.sy = ;
pro.m[][] = ;
pro.m[][] = pro.m[][] = pro.m[][] = ;
pro.sx = pro.sy = ;
return;
} inline Matrix mul(Matrix x,Matrix y) {
Matrix res;
memset(res.m,,sizeof(res.m));
res.sx = x.sx, res.sy = y.sy;
for(register int i = ;i <= x.sx;i++) {
for(register int j = ;j <= y.sy;j++) {
for(register int k = ;k <= x.sy;k++) {
res.m[i][j] += x.m[i][k] * y.m[k][j] % p;
res.m[i][j] %= p;
}
}
}
return res;
} inline Matrix quick_pow(Matrix x,long long y) {
Matrix res;
res.sx = x.sx, res.sy = x.sy;
for(register int i = ;i <= res.sx;i++) {
for(register int j = ;j <= res.sy;j++) {
if(i == j) res.m[i][j] = ;
else res.m[i][j] = ;
}
}
while(y) {
if(y & ) res = mul(res,x);
x = mul(x,x);
y >>= ;
}
return res;
} int main() {
int T;
scanf("%d",&T);
init();
str = mul(str,pro);
while(T--) {
scanf("%lld",&n);
init();
Matrix ans = mul(str,quick_pow(pro,n-));
printf("%lld\n",ans.m[][] % p);
}
return ;
}
[Luogu] P4910 帕秋莉的手环的更多相关文章
- 【题解】Luogu P4910 帕秋莉的手环
原题传送门 "连续的两个中至少有1个金的"珂以理解为"不能有两个木相连" 我们考虑一个一个将元素加入手环 设f\([i][0/1]\)表示长度为\(i\)手环末 ...
- P4910 帕秋莉的手环
题目背景 帕秋莉是蕾米莉亚很早结识的朋友,现在住在红魔馆地下的大图书馆里.不仅擅长许多魔法,还每天都会开发出新的魔法.只是身体比较弱,因为哮喘,会在咏唱符卡时遇到麻烦. 她所用的属性魔法,主要是生命和 ...
- 洛谷 P4910 帕秋莉的手环 矩阵乘法+快速幂详解
矩阵快速幂解法: 这是一个类似斐波那契数列的矩乘快速幂,所以推荐大家先做一下下列题目:(会了,差不多就是多倍经验题了) 注:如果你不会矩阵乘法,可以了解一下P3390的题解 P1939 [模板]矩阵加 ...
- [洛谷P4910]帕秋莉的手环
题目大意:有一个$n(n\leqslant10^{18})$个点的环,每个点可以是$0$或$1$,要求相邻点中至少一个$1$,问方案数,多组询问. 题解:先考虑是一条链的情况,令$f_{i,j}$表示 ...
- 洛谷 P4910 帕秋莉的手环
题意 多组数据,给出一个环,要求不能有连续的\(1\),求出满足条件的方案数 \(1\le T \le 10, 1\le n \le 10^{18}\) 思路 20pts 暴力枚举(不会写 60pts ...
- 【Cogs2187】帕秋莉的超级多项式(多项式运算)
[Cogs2187]帕秋莉的超级多项式(多项式运算) 题面 Cogs 题解 多项式运算模板题 只提供代码了.. #include<iostream> #include<cstdio& ...
- cogs 998. [東方S2] 帕秋莉·诺蕾姬
二次联通门 : cogs 998. [東方S2] 帕秋莉·诺蕾姬 交上去后发现自己没上榜 就想着加点黑科技 把循环展开一下 结果WA了.. 万恶的姆Q /* cogs 998. [東方S2] 帕秋莉· ...
- P4915 帕秋莉的魔导书(动态开点线段树)
题目背景 帕秋莉有一个巨大的图书馆,里面有数以万计的书,其中大部分为魔导书. 题目描述 魔导书是一种需要钥匙才能看得懂的书,然而只有和书写者同等或更高熟练度的人才能看得见钥匙.因此,每本魔导书都有它自 ...
- COGS2187 [HZOI 2015] 帕秋莉的超级多项式
什么都别说了,咱心态已经炸了... question 题目戳这里的说... 其实就是叫你求下面这个式子的导函数: noteskey 其实是道板子题呢~ 刚好给我们弄个多项式合集的说... 各种板子粘贴 ...
随机推荐
- UI: 网易新闻实现
#pragma mark-(AppDelegate.H文件)-------------------------------------------------------------------- ...
- WEB开发框架系列教程 (三)页面功能开发(2)
上一节介绍了,基础资料币别信息的开发,只通过辅助开发工具,创建及资料表,填写 表名,程序就完全好了. 最后也说到,可能我们也会面对另外一些基础资料信息的维护,但是不是简单到只有代码 和名称,可能还有另 ...
- javascript前端面试题及答案整理
Part1 手写代码 现场手写代码是现在面试中很常见的一类面试题,考察基础的数据结构与算法能力. 1 数组去重的实现 基本数组去重 Array.prototype.unique = function( ...
- bzoj 3196 Tyvj 1730 二逼平衡树【线段树 套 splay】
四舍五入就是个暴力. 对于线段树的每个区间都开一棵按权值排序的splay 对于第二个操作,二分一下,每次查询mid的排名,复杂度 $ O(nlog(n)^{3}) $ 其余的操作都是$ O(nlog( ...
- bzoj 3527: [Zjoi2014]力【FFT】
大力推公式,目标是转成卷积形式:\( C_i=\sum_{j=1}^{i}a_jb_{i-j} \) 首先下标从0开始存,n-- \[ F_i=\frac{\sum_{j<i}\frac{q_j ...
- spoj 287 NETADMIN - Smart Network Administrator【二分+最大流】
在spoj上用题号找题就已经是手动二分了吧 把1作为汇点,k个要入网的向t连流量为1的边,因为最小颜色数等于最大边流量,所以对于题目所给出的边(u,v),连接(u,v,c),二分一个流量c,根据最大流 ...
- C# Web页面打印网页
<style media=print type="text/css"> .noprint{display:none} </style> 在打印时 ...
- Hihocoder [Offer收割]编程练习赛70 解题报告 By cellur925
并没有第四题.(还不会矩阵乘法加速线性数列) 题目1 : 数位翻转 时间限制:20000ms 单点时限:1000ms 内存限制:256MB 描述 给定一个数 n,你可以进行若干次操作,每次操作可以翻转 ...
- bitset优化背包问题
https://blog.csdn.net/HowardEmily/article/details/77340566 留坑待填
- android开发学习——关于activity 和 fragment在toolbar上设置menu菜单
在做一个项目,用的是Android Studio 系统的抽屉源码,但是随着页面的跳转,toolbar的title需要改变,toolbar上的menu菜单也需要改变,在网上找了好久,也尝试了很多,推荐给 ...