UVA - 12183 :Top Secret(N^2的循环矩阵乘法)
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的循环矩阵乘法)的更多相关文章
- 【BZOJ2510】弱题 期望DP+循环矩阵乘法
[BZOJ2510]弱题 Description 有M个球,一开始每个球均有一个初始标号,标号范围为1-N且为整数,标号为i的球有ai个,并保证Σai = M. 每次操作等概率取出一个球(即取出每个球 ...
- POJ3150—Cellular Automaton(循环矩阵)
题目链接:http://poj.org/problem?id=3150 题目意思:有n个数围成一个环,现在有一种变换,将所有距离第i(1<=i<=n)个数小于等于d的数加起来,对m取余,现 ...
- Codeforces 555D Case of a Top Secret
Case of a Top Secret 感觉除了两个点在那循环的部分, 其他时候绳子的长度每次变为一半一下, 就变成了Log(l)步.. 然后就暴力找就好啦, 循环的部分取个模. #include& ...
- 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 ...
- UVA 1386 - Cellular Automaton(循环矩阵)
UVA 1386 - Cellular Automaton option=com_onlinejudge&Itemid=8&page=show_problem&category ...
- Codeforces 590D Top Secret Task
D. Top Secret Task time limit per test 3 seconds memory limit per test 256 megabytes input standard ...
- BZOJ 4204 && BZOJ 2510 循环矩阵
n^3logn非常显然.所以要用一种因为这个矩阵是一个循环矩阵,所以只要知道第一行就可以知道所有行了. C[i][j]=C[i-1][j-1]; #include <iostream> # ...
- HDU 5895 Mathematician QSC(矩阵乘法+循环节降幂+除法取模小技巧+快速幂)
传送门:HDU 5895 Mathematician QSC 这是一篇很好的题解,我想讲的他基本都讲了http://blog.csdn.net/queuelovestack/article/detai ...
- LA 3704 (矩阵快速幂 循环矩阵) Cellular Automaton
将这n个格子看做一个向量,每次操作都是一次线性组合,即vn+1 = Avn,所求答案为Akv0 A是一个n*n的矩阵,比如当n=5,d=1的时候: 不难发现,A是个循环矩阵,也就是将某一行所有元素统一 ...
随机推荐
- 阿里云 安装docker
转 https://www.jianshu.com/p/f02d63ee98e0
- CentOS7-Docker 搭建Maven私服
使用Docker搭建Maven私服 前言本文主要介绍,使用Docker创建一个nexus私服,然后编写一个Library,上传到私服,然后使用demo工程依赖. 本文不对Maven.Nexus.私服等 ...
- 031 SSM综合练习07--数据后台管理系统--用户详情查询
1.用户详情查询流程分析 2.代码实现 (1)user-list.jsp页面部分代码 点击jsp页面中的详情按钮,发送请求到UserController.java <!--数据列表--> ...
- 图像变化之Laplacian()函数 and Schaar()滤波及综合例子
先来 Laplacian()函数 #include<math.h> #include<opencv2/opencv.hpp> #include<string.h> ...
- cloudera cdh6.3 离线安装 经典大数据平台视频教程(含网盘下载地址)
cdh6.3企业级大数据视频教程 链接:https://pan.baidu.com/s/1bLGrIwzpFQB-pQRb6KOmNg 提取码:i8h8 系统和软件版本1,操作系统:Centos7.6 ...
- 【翻译】REST framework JWT Auth(django rest framework-jwt)
JWT认证的REST框架 原文链接 概述 这个包提供对Django REST framework的JSON Web Token 认证支持. 需要满足条件 Python (2.7, 3.3, 3.4, ...
- Spark实战电影点评系统(二)
二.通过DataFrame实战电影点评系统 DataFrameAPI是从Spark 1.3开始就有的,它是一种以RDD为基础的分布式无类型数据集,它的出现大幅度降低了普通Spark用户的学习门槛. D ...
- H5页面跳转与传值
页面之间的跳转经常使用a标签,使用mvc框架的都是通过访问controller的请求方法,返回请求页面.但本次开发,前端与后台完全分离,前端APP使用HBuider来开发,后台数据就无法使用mvc框架 ...
- 架构 MVC MVP MVVM 简介 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- 2019 用友网络java面试笔试题 (含面试题解析)
本人3年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条. 用友网络等公司offer,岗位是Java后端开发,最终选择去了 用友网络. 面试了很多家公司,感觉大部分公司考察 ...