Description

Solution

因为后面的矩阵总会包含前面的矩阵,所以对于每个(x,y)(x,y)(x,y)的变换是由一段后缀操作实现的。
同时每个操作都是线性变换,即满足(x,y)(x,y)(x,y)经过变换后会到达(ax+by+c,dx+ey+f)(ax+by+c,dx+ey+f)(ax+by+c,dx+ey+f)。那么只要复合后缀的变换即可。
还有一种做法是四向链表,1操作就是交换左右指针,2操作就是交换上下指针,3操作交换左上和右下指针。

Code

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#define fo(i,j,k) for(int i=j;i<=k;++i)
#define fd(i,j,k) for(int i=j;i>=k;--i)
using namespace std;
typedef unsigned int uint;
const int N=4050,M=2e5+10;
uint F[N][N];
int op[M];
struct P{int x,y;P(int _x=0,int _y=0) {x=_x,y=_y;}
}r1[M],r2[M];
struct node{int a,b,c,d,e,f;node(int _a=1,int _b=0,int _c=0,int _d=0,int _e=1,int _f=0){a=_a,b=_b,c=_c,d=_d,e=_e,f=_f;}friend node operator+(node x,node y){node z(y.a*x.a+y.b*x.d,y.a*x.b+y.b*x.e,y.a*x.c+y.b*x.f+y.c,y.d*x.a+y.e*x.d,y.d*x.b+y.e*x.e,y.d*x.c+y.e*x.f+y.f);return z;}P get(int x,int y){return P(a*x+b*y+c,d*x+e*y+f);}
};
node solve(int now){int tp=op[now];P p=r1[now],q=r2[now];node z;if(tp==1) z=node(1,0,0,0,-1,p.y+q.y);else if(tp==2) z=node(-1,0,p.x+q.x,0,1,0);else z=node(0,1,p.x-p.y,1,0,p.y-p.x);return z;
}
uint calc(int x,int y,node z){P p=z.get(x,y);return F[x][y]*F[p.x][p.y];
}
int main()
{int tp,n,m,q;scanf("%d %d %d %d",&tp,&n,&m,&q);uint A,B,C;scanf("%u %u %u",&A,&B,&C);fo(i,1,n)fo(j,1,m) C=A*C+B,F[i][j]=C;fo(i,1,q) scanf("%d %d %d %d %d",&op[i],&r1[i].x,&r1[i].y,&r2[i].x,&r2[i].y);node t;int u=1,d=n,l=1,r=m;uint ans=0;fd(i,q,1){for(;u<r1[i].x;++u) fo(j,l,r) ans+=calc(u,j,t);for(;d>r2[i].x;--d) fo(j,l,r) ans+=calc(d,j,t);for(;l<r1[i].y;++l) fo(j,u,d) ans+=calc(j,l,t);for(;r>r2[i].y;--r) fo(j,u,d) ans+=calc(j,r,t);t=solve(i)+t;}fo(i,u,d)fo(j,l,r) ans+=calc(i,j,t);printf("%u",ans);
}

【JZOJ6091】唐时月夜相关推荐

  1. NOI2019省选模拟赛 第六场

    传送门 又炸了-- \(A\) 唐时月夜 不知道改了什么东西之后就\(A\)掉了\(.jpg\) 首先,题目保证"如果一片子水域曾经被操作过,那么在之后的施法中,这片子水域也一定会被操作&q ...

  2. 读唐诗,学唐史-《六神磊磊读唐诗》读书小结

    1.唐史 唐朝历史从618年唐高祖李渊称帝建立唐朝开始,到907年后梁太祖朱温篡唐为止,共289年.分为几期,中间以安史之乱为界. 以唐诗论,一般认为分初唐,盛唐,中唐和晚唐四个时期. 宋代人曾经展开 ...

  3. 人一生要读的100首古诗

    人一生要读的100首古诗 归园田居五首 人生卷 归园田居五首 陶渊明(晋) 月下独酌 李白(唐) 将进酒 李白(唐) 登高 杜甫(唐) 旅夜书怀 杜甫(唐) 清明 杜牧(唐) 定风波 苏轼(宋) 蝶恋 ...

  4. python作者的诗_《全唐诗》Python文本分析

    背景概述 诗歌是构筑唐代文化史高峰的一座巨大丰碑,唐代的诗歌空前繁荣,达到完美的艺术境界,成为大唐王朝时代的文化标志.本人热爱唐诗,希望从文本挖掘的角度去探索全唐诗,挑战不同场景下文本处理和分析的过程 ...

  5. 中国古代十大名曲背后的掌故(转载)

    中华古韵,向有十大名曲一说.这十大古代名曲分别为<高山流水>.<广陵散>.<平沙落雁>.<梅花三弄>.<十面埋伏>.<夕阳箫鼓> ...

  6. 画论39 李衎《画竹谱》

    [中国历代画论目录] 目录 ○竹谱原序 ○竹谱详录 ○竹谱 ○墨竹谱 ○竹态谱 ○竹根二种 ○竹品谱 ○竹谱原序 黄太史有言:"竹虽有谱汜之者,然略而不精,吾欲作竹史末暇也."太史 ...

  7. 画论59 邹一桂《小山画谱》

    [中国历代画论目录] 目录 提要 卷上 八法四知 各花分别 取用颜色 卷下 末附 洋菊谱(有序) 花名三十六种 提要 <小山画谱>二卷,国朝邹一桂撰.一桂字小山,号让乡,无锡人.雍正丁未进 ...

  8. 如果你想专升本那就一定要看的文学常识完整版(一)

    感激相遇 你好 我是阿ken 你要做一个不动声色的大人了, 不准情绪化,不准偷偷想念,不准回头看. --村上春树 一. 诸子百家(熟记前四个就行) 孔子.荀子.孟子的思想核心是"仁" ...

  9. 游遍中国 —— 大街小巷、秘境与远方

    老街 北京南锣鼓巷.上海田子坊 重庆磁器口 厦门曾厝垵,福州三坊七巷 南京夫子庙,苏州观前街,扬州东关街: 1. 中国十大名街 拉萨八廓街,苏州平江路:青州昭德古街: 猫的天空之城总店就在平江路: 平 ...

  10. 非常恶俗地分享一首歌曲(子陵·周郎顾)

    歌词 [hjp3]hjptype=song&player=5&file=http://file.hjbbs.com/ayi/share/mp3/zhoulanggu.mp3&b ...

最新文章

  1. sort函数pythonreverse_Python基础 7 ---- Python内置sort和sorted函数
  2. 获取socket对应的接收缓冲区中的可读数据量
  3. WPF 列表虚拟化时的滚动方式
  4. python py2exe_转:py2exe 生成 python 可执行文件
  5. Linux学习-07-vim编辑器
  6. power bi可视化表_在Power BI报表视图中创建可视化
  7. Android Stuido 快速设置成eclipse的快捷键习惯
  8. 数据分析工具具备什么功能
  9. WinZip 6 for Mac(压缩压解工具)附注册码 v6.5.4149破解版
  10. java限制输入字符长度_input限制输入长度
  11. 怎么搜索代码里的所有中文汉字
  12. matlab 表示希腊字母yita,数学罗马符号_常用数学的罗马符号和拉丁符号有什么哪些_淘题吧...
  13. 苹果App卡审怎么办?
  14. 模拟电子经典200问
  15. WinSCP下载安装及使用
  16. 部署和访问HTTP接口
  17. 三维扫描、三维建模在数字展厅中的应用
  18. 换了爸爸,推特用户坐不住了……
  19. 第三回 无处不在的计算
  20. 线性模型之二:线性回归模型性能的评估(残差图、MSE与R2)

热门文章

  1. 微创新:粉丝电子商务及微博的9种盈利模式
  2. 佰落暑期java自学记录-9
  3. 小火狐进化_神奇宝贝:最强和最弱的御三家属于哪个世代?当然是这两代
  4. 怎么下载jQuery文件
  5. three.js 实现露珠滴落动画
  6. TODA EMS(设备管理系统)简介
  7. pod容器发生OOM错误(by quqi99)
  8. 马云关于计算机的名人名言,马云名人名言
  9. pgsql timestamp without time zone > character varying解决方案
  10. 【蓝桥杯】基础练习十六进制转十进制