POJ 3150 循环矩阵的应用
思路:
首先 先普及一个性质: 循环矩阵*循环矩阵=循环矩阵
由于此题是距离小于d的都加上一个数。
那么 构造矩阵的时候 我们发现 诶呦 这是个循环矩阵
看看数据范围 n^2log(k)可以过。
那就把这个矩阵改一改。
因为这是个循环矩阵, 所以呢 只用保存一行就可以了。
每回做乘法的时候只做第一行的乘法。
for(i) for(j) temp[i]+=a[j]*b[(i+j)%n];
就这么着 搞搞就能过了。(好像可以用FFT? 表示并不会)
// by SiriusRen
#include <cstdio>
#include <cstring>
#define LL long long
using namespace std;
long long f[666],co[666],c[666];
int n,m,d,k;
void mul(LL *a,LL *b){
    memset(c,0,sizeof(c));
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
            c[i]+=a[j]*b[(i+j)%n];
    for(int i=0;i<n;i++)b[i]=c[i]%m;
}
int main(){
    scanf("%d%d%d%d",&n,&m,&d,&k);
    for(int i=0;i<n;i++)scanf("%lld",&f[i]);
    for(int i=0;i<=d;i++)co[i]=co[n-i]=1;
    while(k){
        if(k&1)mul(co,f);
        mul(co,co),k>>=1;
    }
    for(int i=0;i<n;i++)printf("%lld ",f[i]);
}
// by SiriusRen
#include <cstdio>
#define LL long long
#define f(Q,R) for(int Q=0;Q<R;Q++)
using namespace std;
LL f[666],co[666],c[666];
int n,m,d,k;
void mul(LL *a,LL *b){
    f(i,n)c[i]=0;
    f(i,n)f(j,n)c[(i+j)%n]+=a[i]*b[j];
    f(i,n)b[i]=c[i]%m;
}
int main(){
    scanf("%d%d%d%d",&n,&m,&d,&k);
    f(i,n)scanf("%lld",&f[i]);
    f(i,d+1)co[i]=co[n-i]=1;
    while(k){
        if(k&1)mul(co,f);
        mul(co,co),k>>=1;
    }
    f(i,n)printf("%lld ",f[i]);
}
 
Code length能进前三的存在哈哈哈
POJ 3150 循环矩阵的应用的更多相关文章
- POJ 3150 Cellular Automaton --矩阵快速幂及优化
		
题意:给一个环,环上有n块,每块有个值,每一次操作是对每个点,他的值变为原来与他距离不超过d的位置的和,问k(10^7)次操作后每块的值. 解法:一看就要化为矩阵来做,矩阵很好建立,大白书P157页有 ...
 - POJ 3150 Cellular Automaton(矩阵快速幂)
		
Cellular Automaton Time Limit: 12000MS Memory Limit: 65536K Total Submissions: 3504 Accepted: 1421 C ...
 - BZOJ 4204 && BZOJ 2510 循环矩阵
		
n^3logn非常显然.所以要用一种因为这个矩阵是一个循环矩阵,所以只要知道第一行就可以知道所有行了. C[i][j]=C[i-1][j-1]; #include <iostream> # ...
 - POJ3150—Cellular Automaton(循环矩阵)
		
题目链接:http://poj.org/problem?id=3150 题目意思:有n个数围成一个环,现在有一种变换,将所有距离第i(1<=i<=n)个数小于等于d的数加起来,对m取余,现 ...
 - LA 3704 (矩阵快速幂 循环矩阵) Cellular Automaton
		
将这n个格子看做一个向量,每次操作都是一次线性组合,即vn+1 = Avn,所求答案为Akv0 A是一个n*n的矩阵,比如当n=5,d=1的时候: 不难发现,A是个循环矩阵,也就是将某一行所有元素统一 ...
 - bzoj 2510: 弱题 循环矩阵
		
2510: 弱题 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 124 Solved: 61[Submit][Status][Discuss] De ...
 - UVA 1386 - Cellular Automaton(循环矩阵)
		
UVA 1386 - Cellular Automaton option=com_onlinejudge&Itemid=8&page=show_problem&category ...
 - hihocoder 1388 fft循环矩阵
		
#1388 : Periodic Signal 时间限制:5000ms 单点时限:5000ms 内存限制:256MB 描述 Profess X is an expert in signal proce ...
 - UVaLive 3704 Cellular Automaton (循环矩阵 + 矩阵快速幂)
		
题意:一个细胞自动机包含 n 个格子,每个格子取值是 0 ~ m-1,给定距离,则每次操作后每个格子的值将变成到它距离不超过 d 的所有格子在操作之前的值之和取模 m 后的值,其中 i 和 j 的距离 ...
 
随机推荐
- It Started With A Kiss
 - 全能VIP音乐在线解析
			
浏览器安装暴力猴扩展即可使用 // ==UserScript== // @name 全能VIP音乐在线解析 // @version 0.0.10 // @homepage https://greasy ...
 - Ubuntu安装配置Python.pyDev
			
一:安装ECLipse Eclipse官网下载软件tar包: 使用解压命令: sudo tar xzvf xxxxx.tar.gz -c /opt/ 创建快捷方式到桌面. 二:安装python-Num ...
 - 位姿检索PoseRecognition:LSH算法.p稳定哈希
			
位姿检索使用了LSH方法,而不使用PNP方法,是有一定的来由的.主要的工作会转移到特征提取和检索的算法上面来,有得必有失.因此,放弃了解析的方法之后,又放弃了优化的方法,最后陷入了检索的汪洋大海. 0 ...
 - PIC  EEPROM问题
			
1.通过export出来的Hex烧录,EEPROM内容会根据Hex中关于EEPROM的定义而改变. 2.通过编译源文件烧录,如果没有勾选Preserve EEPROM on program则EEPRO ...
 - 创建一个dynamics CRM workflow (二) - Build in Workflows
			
这里我们不着重讲解build in workflow. 但是, 如果要上手custom workflow, 我们必须要了解 build in workflow. build-in workflow 在 ...
 - Spring cloud父项目的建立
			
1.建立一个maven项目 注意建立项目的时候.选择pom的包 2.添加架包 <project xmlns="http://maven.apache.org/POM/4.0.0&quo ...
 - VMware ESXi定制版(OEM ISO)资源下载
			
一.VMware ESXi 5.1.0 update03 链接: https://pan.baidu.com/s/1nvQ4CGD 密码: acc1 1.VMware-ESXi-5.1.0-Updat ...
 - velocity.ui2.0所有的内置动画名称
			
velocity升级到2.0后api发生了变化,按照原来的名称已经不能调用原来的动画效果,新的名称如下:velocity.ui2.0所有的内置动画名称 bounce flash headShake j ...
 - nginx获取经过层层代理后的客户端真实IP(使用正则匹配)
			
今天帮兄弟项目搞了一个获取客户端真实IP的问题,网上这种问题很多,但是对于我们的场景都不太合用,现把我的解决方案share给大家,如有问题,请及时指出. 场景: 在请求到达后端服务之前,会经过层层代理 ...