题意看不懂加题目想不通,很菜。

n<=500个数围城环,每次操作对每个数Ai把与i在环上相距不超过d<n/2(包括Ai)的数加起来取模m<=1e6,求K<=1e7次操作后的环。

存在递推关系,构造矩阵吧!比如样例一很丑。

于是矩阵快速幂,n*n*n*logK,很慢。

这个矩阵比较奇怪,每一行都是上一行右移一位,而且每一行和每一列长得一样。也就是说我们只保存第一行就能知道整个矩阵长什么样。

而我们的时间主要浪费在a的相乘上,所以a只维护一行,计算答案时把a还原,更新一行的“a”时亦然,具体见代码。

 #include<stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h>
//#include<iostream>
using namespace std; int n,mod,d,K;
#define maxn 511
int a[maxn],b[maxn];
void mul(int *a,int *b,int *ans)
{
int t[maxn];
memset(t,,sizeof(t));
for (int i=;i<=n;i++)
for (int j=;j<=n;j++)
t[i]=(t[i]+1ll*a[j-i++(j-i>=?:n)]*b[j]%mod)%mod;
for (int i=;i<=n;i++) ans[i]=t[i];
}
int main()
{
scanf("%d%d%d%d",&n,&mod,&d,&K);
for (int i=;i<=n;i++) scanf("%d",&b[i]);
memset(a,,sizeof(a));
for (int i=;i<=d+;i++) a[i]=;
for (int i=n;i>n-d;i--) a[i]=;
while (K)
{
if (K&) mul(a,b,b);
mul(a,a,a);
K>>=;
}
for (int i=;i<=n;i++) printf("%d ",b[i]);
return ;
}

最新文章

  1. Solr学习总结(一)Solr介绍
  2. golang mgo的mongo连接池设置:必须手动加上maxPoolSize
  3. Linux_权限
  4. JSON上
  5. zabbix使用sendEmail发送邮件报警
  6. linux C gcc -lm
  7. centOS安装openoffice
  8. [FileStream] 使用
  9. iOS键盘遮挡输入框,输入区域自动上移
  10. 尝试向树莓派3B引入Drbian 9 arm64-PART 1
  11. Django ORM详解
  12. mysql进阶(二十九)常用函数
  13. java对象深复制、浅复制(深拷贝、浅拷贝)的理解
  14. A计划 HDU - 2102
  15. mysql与mysqli的区别
  16. 转: Ogre实现无缝地图要改的地方 记下来 用的时候可以看
  17. Spring学习之路
  18. JDBC--数据库链接及相关方法的封装
  19. 菜鸟的Xamarin.Forms前行之路——从新建项目到APP上架各种报错问题解决方法合集(不定时更新)
  20. 配置nginx,Tomcat日志记录请求耗时

热门文章

  1. [BZOJ2761][JLOI2011]不重复数字 暴力
  2. jQuery选择器之表单对象属性筛选选择器
  3. 计算1至n的k次方的和
  4. Entity Framework + MySQL 使用笔记
  5. 创建线程的三种方式_Callable和Runnable的区别
  6. packet capture
  7. 优化UITableView
  8. vue 点击按钮弹窗,点击关闭按钮关闭弹窗。
  9. spring注解开发-容器创建全过程(源码)
  10. [LUOGU] P2920 [USACO08NOV]时间管理Time Management