pro:N个数排成一圈。一次操作为,每个位置的数+=L*左+R*右,保留x为整数。 问S轮操作后每个位置的值。 N<=1000,S<=2^30,x<=9 。

sol:不难想到矩阵乘法,但是N为1000,显然普通的N^3矩阵乘法的复杂度不能AC。 不难发现这是经典的循环矩阵(第二行为第一行右移一格....依次),所以我们只需要求第一行的矩阵,其他每一行都可以在第一行找到对应的值。

(我的代码1500ms,VJ有神仙150ms,暂时不知道怎么搞的。

#include<bits/stdc++.h>
#define ll unsigned long long
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
const int maxn=;
int Mod;
int p[]={,,,,,,,
,,};
int tt[maxn][],res[maxn][];
void read(int &x){
x=; char c=getchar();
while(c>''||c<'') c=getchar();
while(c>=''&&c<='') {
x=x*+c-''; c=getchar();
}
}
void MOD(int &x){
if(x>=Mod) x-=Mod;
}
struct mat{
int mp[][maxn],C;
mat(){}
mat(int c){ rep(i,,) rep(j,,c) mp[i][j]=; C=c; }
mat friend operator *(mat a,mat b){
mat res(a.C);
rep(k,,a.C)
rep(i,,) //循环矩阵,求第一行即可
if(a.mp[i][k])
rep(j,,a.C){
int t=(j-k+a.C+)%a.C; if(t==) t=a.C;
MOD(res.mp[i][j]+=1LL*a.mp[i][k]*b.mp[][t]%Mod);
}
return res;
}
mat friend operator ^(mat a,int x){
mat res(a.C); rep(i,,) res.mp[i][i]=;
while(x){
if(x&) res=res*a;
a=a*a; x>>=;
}
return res;
}
};
int main()
{
int T,N,L,R,S,X;
scanf("%d",&T);
while(T--){
read(N); read(S); read(L);
read(R); read(X);
Mod=p[X];
mat a(N),base(N);
rep(i,,N) read(tt[i][]),res[i][]=;
rep(i,,) {
base.mp[i][i-==?N:i-]=L;
base.mp[i][i+==N+?:i+]=R;
base.mp[i][i]=;
}
base=(base^S);
rep(k,,N)
rep(i,,N)
rep(j,,){
int t=(k-i+N+)%N; if(t==) t=N;
MOD(res[i][j]+=1LL*base.mp[][t]*tt[k][j]%Mod);
}
rep(i,,N-) printf("%d ",res[i][]);
printf("%d\n",res[N][]);
}
return ;
}

UVA - 12183 :Top Secret(N^2的循环矩阵乘法)的更多相关文章

  1. 【BZOJ2510】弱题 期望DP+循环矩阵乘法

    [BZOJ2510]弱题 Description 有M个球,一开始每个球均有一个初始标号,标号范围为1-N且为整数,标号为i的球有ai个,并保证Σai = M. 每次操作等概率取出一个球(即取出每个球 ...

  2. POJ3150—Cellular Automaton(循环矩阵)

    题目链接:http://poj.org/problem?id=3150 题目意思:有n个数围成一个环,现在有一种变换,将所有距离第i(1<=i<=n)个数小于等于d的数加起来,对m取余,现 ...

  3. Codeforces 555D Case of a Top Secret

    Case of a Top Secret 感觉除了两个点在那循环的部分, 其他时候绳子的长度每次变为一半一下, 就变成了Log(l)步.. 然后就暴力找就好啦, 循环的部分取个模. #include& ...

  4. Codeforces Round #327 (Div. 1) D. Top Secret Task

    D. Top Secret Task time limit per test 3 seconds memory limit per test 256 megabytes input standard ...

  5. UVA 1386 - Cellular Automaton(循环矩阵)

    UVA 1386 - Cellular Automaton option=com_onlinejudge&Itemid=8&page=show_problem&category ...

  6. Codeforces 590D Top Secret Task

    D. Top Secret Task time limit per test 3 seconds memory limit per test 256 megabytes input standard ...

  7. BZOJ 4204 && BZOJ 2510 循环矩阵

    n^3logn非常显然.所以要用一种因为这个矩阵是一个循环矩阵,所以只要知道第一行就可以知道所有行了. C[i][j]=C[i-1][j-1]; #include <iostream> # ...

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

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

  9. LA 3704 (矩阵快速幂 循环矩阵) Cellular Automaton

    将这n个格子看做一个向量,每次操作都是一次线性组合,即vn+1 = Avn,所求答案为Akv0 A是一个n*n的矩阵,比如当n=5,d=1的时候: 不难发现,A是个循环矩阵,也就是将某一行所有元素统一 ...

随机推荐

  1. centos7 替换为 aliyun 源

    1.打开centos的yum文件夹 输入命令cd  /etc/yum.repos.d/ 2.用wget下载repo文件 输入命令wget  http://mirrors.aliyun.com/repo ...

  2. 瀚云平台kafka简单原理

    客户端利用kafka 硬件 创建 productkey,cmd-productkey,conn-productkey为主题,代表设备数据,设备命令,设备事件. 客户端去订阅这三个主题 数据推送模拟器, ...

  3. WEUI Search Input回车键无法跳转解决

    现象:回车键依然当前页面, window.location.href 设置无法起作用 增加 window.event.returnValue = false; 解决问题

  4. golang函数式编程

  5. AX 2012 Computed column IIF语句使用

    涉及Dynamics ax 行业已经好几年了,准备总结一些有用的处理方法供大家来参考 首先先介绍下Computed column技术,该技术是微软在AX2012版本中提供的新技术,可以让SQL语句在A ...

  6. 论文笔记: Deep Learning based Recommender System: A Survey and New Perspectives

    (聊两句,突然记起来以前一个学长说的看论文要能够把论文的亮点挖掘出来,合理的进行概括23333) 传统的推荐系统方法获取的user-item关系并不能获取其中非线性以及非平凡的信息,获取非线性以及非平 ...

  7. 【代码优化】C#遍历所有控件(Control方法)

    直接上代码: /// <summary> /// 判断价格是否可以购买技能的方法 /// </summary> /// <param name="btnBuyA ...

  8. spring Boot 学习(一、Spring Boot与缓存)

    JSR-107.Spring缓存抽象.整合Redis Java Caching定义了5个核心接口,分别是CachingProvider, CacheManager, Cache, Entry 和 Ex ...

  9. linux搭建GitLab

    GitLab CentOS6 1. 安装VMware和CentOS 2. 安装必备Linux插件 3. 准备安装GitLab 4. 开始安装GitLab 5. 配置GitLab 6. 启动GitLab ...

  10. 【转载】C#中float.TryParse方法和float.Parse方法的异同之处

    在C#编程过程中,float.TryParse方法和float.Parse方法都可以将字符串string转换为单精度浮点类型float,但两者还是有区别,最重要的区别在于float.TryParse方 ...