**链接:****传送门 **

题意:

  • n个小朋友围成一个环( 2 <= n <= 100 )然后进行m次的游戏。

    一开始,第 i 个小朋友有 Ai 个苹果。

    定义游戏的规则为:每一次游戏处于 i 位置的小朋友获得( L* A(i+n-1)%n+R * A(i+1)%n )个苹果( 题目有误 )

    求 m 次游戏后每个小朋友的苹果数量。

思路:

  • 一开始没有看到获得这两个字,gg,,也就是说 A(i) = L* A(i+n-1)%n+R * A(i+1)+A(i)那这道题与HDU 2276 Kiki & Little Kiki 2( <-戳前面链接 )就基本一模一样了,但是这道题如果不用循环矩阵优化就直接T掉了!

/*************************************************************************
> File Name: fzu1692t3.cpp
> Author: WArobot
> Blog: http://www.cnblogs.com/WArobot/
> Created Time: 2017年05月04日 星期四 19时23分56秒
************************************************************************/ #include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std; int MOD;
const int maxn = 110;
#define ll long long
#define mod(x) ((x)%MOD)
#define cls(x) memset(x,0,sizeof(x)) struct mat{
int m[maxn][maxn];
}unit;
int t,n,m,L,R; void init_unit(){
for(int i=0;i<maxn;i++) unit.m[i][i] = 1;
}
// 利用循环矩阵降低复杂度
mat operator *(mat a,mat b){
mat ret;
cls(ret.m); // 初始化一下以防出错
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
ret.m[0][i] = mod( ret.m[0][i] + mod(a.m[0][j]*b.m[j][i]) ); for(int i=1;i<n;i++)
for(int j=0;j<n;j++)
ret.m[i][j] = ret.m[i-1][(j-1+n)%n];
return ret;
}
mat pow_mat(mat a,int x){
mat ret = unit;
while(x){
if(x&1) ret = ret*a;
a = a*a;
x >>= 1;
}
return ret;
} mat a,b;
void init(){
cls(a.m);
for(int i=0;i<n;i++){
a.m[i][ (i-1+n)%n ] = R;
a.m[i][ i+1 ] = L;
a.m[i][i] = 1;
}
}
int main(){
init_unit();
int aa[maxn];
cin>>t;
while(t--){
cin>>n>>m>>L>>R>>MOD;
for(int i=0;i<n;i++) scanf("%d",aa+i); init();
mat ans = pow_mat(a,m);
for(int i=0;i<n;i++){
ll tmp = 0;
for(int j=0;j<n;j++)
tmp = mod(tmp + mod(ans.m[i][j]*aa[j]));
ans.m[i][0] = tmp;
} for(int i=0;i<n-1;i++) printf("%d ",ans.m[i][0]);
printf("%d\n",ans.m[n-1][0]);
}
return 0;
}

FZU 1692 Key problem( 循环矩阵优化 + 矩阵快速幂)的更多相关文章

  1. fuzhou 1692 Key problem ***

    Problem 1692 Key problem Accept: 103    Submit: 553 Time Limit: 1000 mSec    Memory Limit : 32768 KB ...

  2. Luogu T7152 细胞(递推,矩阵乘法,快速幂)

    Luogu T7152 细胞(递推,矩阵乘法,快速幂) Description 小 X 在上完生物课后对细胞的分裂产生了浓厚的兴趣.于是他决定做实验并 观察细胞分裂的规律. 他选取了一种特别的细胞,每 ...

  3. Luogu 3390 【模板】矩阵快速幂 (矩阵乘法,快速幂)

    Luogu 3390 [模板]矩阵快速幂 (矩阵乘法,快速幂) Description 给定n*n的矩阵A,求A^k Input 第一行,n,k 第2至n+1行,每行n个数,第i+1行第j个数表示矩阵 ...

  4. bzoj 3240: [Noi2013]矩阵游戏 矩阵乘法+十进制快速幂+常数优化

    3240: [Noi2013]矩阵游戏 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 613  Solved: 256[Submit][Status] ...

  5. poj3613:Cow Relays(倍增优化+矩阵乘法floyd+快速幂)

    Cow Relays Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7825   Accepted: 3068 Descri ...

  6. bzoj 3240 矩阵乘法+十进制快速幂

    首先,构造出从f[][i]->f[][i+1]的转移矩阵a,和从f[i][m]->f[i+1][1]的转移矩阵b, 那么从f[1][1]转移到f[n][m]就是init*(a^(m-1)* ...

  7. HDU4965 Fast Matrix Calculation —— 矩阵乘法、快速幂

    题目链接:https://vjudge.net/problem/HDU-4965 Fast Matrix Calculation Time Limit: 2000/1000 MS (Java/Othe ...

  8. HDU1575Tr A(矩阵相乘与快速幂)

    Tr A hdu1575 就是一个快速幂的应用: 只要知道怎么求矩阵相乘!!(比赛就知道会超时,就是没想到快速幂!!!) #include<iostream> #include<st ...

  9. BZOJ-3231 递归数列 矩阵连乘+快速幂

    题不是很难,但是啊,人很傻啊...机子也很鬼畜啊... 3231: [Sdoi2008]递归数列 Time Limit: 1 Sec Memory Limit: 256 MB Submit: 569 ...

随机推荐

  1. python爬网页中文乱码问题

    再用python爬取网页时,用模拟浏览器登陆,得到的中文字符出现乱码,该怎么解决呢? url = “http://newhouse.hfhouse.com/” req = urllib2.Reques ...

  2. 四种ASP网页跳转代码

    时间:2012-06-12 21:12来源:未知 输入:铜都风尘 点击: 32987 次 如果你要在服务器端跳转,可以这样: Response.Redirect(http://blog.163.com ...

  3. LVM man帮助

    > man lvm LVM(8) System Manager's Manual LVM(8) NAME lvm — LVM2 tools SYNOPSIS lvm [command|file] ...

  4. vncserve安装与使用

    vncserver安装与配置 1.1.Centos安装 yum install tigervnc-server yum groupinstall "X Window System" ...

  5. 启动 Appium 自带模拟器

    1.先在sclipse中新建并打开一个设备 2.启动appium 3.安装apk 打开cmd  并在sdk安装目录的tools文件夹下输入安装命令adb install xxx.apk(在这之前需要把 ...

  6. Could not publish server configuration for Tomcat v7.0 Server at localhost. Multiple Contexts have a path of "/ezoutdoor".

    Could not publish server configuration for Tomcat v7.0 Server at localhost. Multiple Contexts have a ...

  7. MySQL 触发器 -1

    MySQL包含对触发器的支持.触发器是一种与表操作有关的数据库对象,当触发器所在表上出现指定事件时,将调用该对象,即表的操作事件触发表上的触发器的执行. 创建触发器 在MySQL中,创建触发器语法如下 ...

  8. 第一篇、Android Supersu 权限管理定制,隐藏过滤权限,指定APP最高权限

    近期有个需求,在预装ROM的时候,须要权限,可是又不同意全部的应用都有权限,仅仅同意自己的应用有最高的权限(当然没有系统签名情况下). 所以.编译了CM 提取了supersu进行了二次定制,让他进行权 ...

  9. php面向对象之__isset和__unset

    php面向对象之__isset和__unset 一.简介 __isset和__unset都是对不可访问属性的操作,前者是检验的时候自动调用,后者是销毁的时候自动调用. 比如说在类外访问private的 ...

  10. php如何判断两个时间戳是一天

    $date1 = getdate(strtotime('2013-12-31')); $date11 = getdate(strtotime('2014-01-01')); $date2 = getd ...