4.28 省选模拟赛模拟赛 最佳农场 二维卷积 NTT


第一次遇到二维卷积 不太清楚是怎么做的。
40分暴力比对即可。
对于行为或者列为1时 容易想到NTT做快速匹配.然后找答案即可。
考虑这是一个二维的比对过程。
设\(f_{i,j}\)表示以i,j为右下角的答案。
那么我们把询问矩阵给上下翻转 左右翻转。设初始矩阵为a 询问矩阵为b 且询问矩阵大小为x,y.
那么显然有 \(f_{i,j}=\sum_{l=1}^x\sum_{r=1}^y[b_{l,r}==a_{i-l+1,j-r+1}]\)
这是一个二维卷积的形式 还是考虑转换成一维卷积的形式。
一种构造方法 将询问矩阵扩展成原来矩阵大小的矩阵 那么空位补0.
然后把矩阵按照 i*m+j的编号放下来 做卷积即是\(f_{i,j}\)的答案。
容易发现是正确。
const int MAXN=510,N=600000,G=3;
int g[N],f[N],rev[N],g1[N],f1[N],w[N];
char a[MAXN][MAXN];
int n,m,lim=1,Q;
inline int ksm(int b,int p)
{
int cnt=1;
while(p)
{
if(p&1)cnt=(ll)cnt*b%mod;
b=(ll)b*b%mod;p=p>>1;
}
return cnt;
}
inline void NTT(int *a,int op)
{
rep(1,lim-1,i)if(i<rev[i])swap(a[i],a[rev[i]]);
for(int len=2;len<=lim;len=len<<1)
{
int mid=len>>1;
int wn=ksm(G,op==1?(mod-1)/len:mod-1-(mod-1)/len);
for(int j=0;j<lim;j+=len)
{
int d=1;
for(int i=0;i<mid;++i)
{
int x=a[i+j],y=(ll)a[i+j+mid]*d%mod;
a[i+j]=(x+y)%mod;a[i+j+mid]=(x-y+mod)%mod;
d=(ll)d*wn%mod;
}
}
}
if(op==-1)
{
int INV=ksm(lim,mod-2);
rep(0,lim-1,i)a[i]=(ll)a[i]*INV%mod;
}
}
inline void prepare(int *g,int *f)
{
rep(1,n,i)rep(0,m-1,j)
g[(i-1)*m+j]=(a[i][j]=='G'),f[(i-1)*m+j]=(a[i][j]=='L');
NTT(g,1);NTT(f,1);
}
inline void calc()
{
rep(0,lim-1,i)w[i]=((ll)g[i]*g1[i]+(ll)f[i]*f1[i])%mod;
NTT(w,-1);
}
int main()
{
freopen("best.in","r",stdin);
freopen("best.out","w",stdout);
gt(n);gt(m);
rep(1,n,i)gc(a[i]);
int ww=n*(m-1);
while(lim<ww+ww)lim=lim<<1;
rep(0,lim-1,i)rev[i]=rev[i>>1]>>1|((i&1)?lim>>1:0);
prepare(g,f);gt(Q);
rep(1,Q,cc)
{
int x,y;
gt(x);gt(y);
memset(a,0,sizeof(a));
memset(f1,0,sizeof(f1));
memset(g1,0,sizeof(g1));
rep(1,x,j)gc(a[j]),reverse(a[j],a[j]+y);
//rep(1,x,j)printf("%s\n",a[j]);
rep(1,x/2,j)rep(0,y-1,k)swap(a[j][k],a[x-j+1][k]);
//rep(1,x,j)printf("%s\n",a[j]);
prepare(g1,f1);
calc();
//rep(0,ww,j)put(w[j]);
int ans=0,ansl=1,ansr=1;
rep(x,n,i)
{
rep(y-1,m-1,j)
{
if(ans<w[(i-1)*m+j])
{
ans=w[(i-1)*m+j];
ansl=i-x+1;ansr=j+1-y+1;
}
}
}
printf("%d %d\n",ansl,ansr);
}
return 0;
}
4.28 省选模拟赛模拟赛 最佳农场 二维卷积 NTT的更多相关文章
- 2019ICPC 上海网络赛 L. Digit sum(二维树状数组+区间求和)
https://nanti.jisuanke.com/t/41422 题目大意: 给出n和b,求1到n,各数在b进制下各位数之和的总和. 直接暴力模拟,TLE.. 没想到是要打表...还是太菜了. # ...
- [CSP-S模拟测试]:回文(hash+二维前缀和)
题目描述 闲着无聊的$YGH$秒掉上面两道题之后,开始思考有趣的回文串问题了. 他面前就有一个漂浮着的字符串.显然$YGH$是会$manacher$的,于是他随手求出了这个字符串的回文子串个数.但是他 ...
- 2019.03.28 bzoj3594: [Scoi2014]方伯伯的玉米田(二维bit优化dp)
传送门 题意咕咕咕 思路:直接上二维bitbitbit优化dpdpdp即可. 代码: #include<bits/stdc++.h> #define N 10005 #define K 5 ...
- 【NOIP模拟赛】Drink 二维链表+模拟
我觉得这道题的主旨应该是模拟,但是如果说他是二维链表的話也不為過.這道題的主體思路就是把原來旋轉點的O(n^2)變成了旋轉邊界的O(n).怎麼旋轉邊界呢,就好像是把原來的那些點都於上下左右四個點連線, ...
- PAT团体程序设计天梯赛 - 模拟赛
由于本人愚笨,最后一题实在无力AC,于是只有前14题的题解Orz 总的来说,这次模拟赛的题目不算难,前14题基本上一眼就有思路,但是某些题写起来确实不太容易,编码复杂度有点高~ L1-1 N个数求和 ...
- 2018SCin tsyzDay1 模拟赛-模拟
预计得分:70+0+0+100+100+100+100=470 实际得分:70+0+0+30+100+0+40=240 第一天就被模拟虐爆qwq T1 https://www.luogu.org/pr ...
- 清北学堂 NOIP2017模拟赛 越赛越心塞
连续考了一个星期发现自己真的是手感型选手,成绩全靠天意.手感好了码出200+也没什么问题,推出式子并且打出自己都不信的操作也有过.手感差了......就一个呵呵二字. 然后开始是T总让我们休息了一个星 ...
- ACdream区域赛指导赛之专题赛系列(1)の数学专场
Contest : ACdream区域赛指导赛之专题赛系列(1)の数学专场 A:EOF女神的相反数 题意:n(<=10^18)的数转化成2进制.翻转后(去掉前导零)输出十进制 思路:water ...
- 36th成都区域赛网络赛 hdoj4039 The Social Network(建图+字符串处理)
这题是某年成都区域赛网络赛的一题. 这题思路非常easy,可是从时间上考虑,不妨不要用矩阵存储,我用的链式前向星. 採用线上查询.利用map对字符串编号,由于非常方便.要推荐的朋友,事实上就是朋友的朋 ...
随机推荐
- less的使用几个技巧
1.层级关系 让这个box范围内的全部包进来,这样的话就完美的进行调节,再也不用到处找第几行第几个,我刚才在哪个位置给覆盖了.一看便知! .box{ width: 100%; height: 300p ...
- (一)ansible 安装配置
CentOS 7.5 一,安装 yum -y install ansible 二,配置hosts文件 /etc/ansible/hosts s1 ansible_ssh_port= ansible_s ...
- 核心知识点:python入门
目录 一.python入门day1-day24 day01-03 编程语言 day04 变量 day05 垃圾回收机制(GC机制) 1 引用计数 2 标记清除 3 分代回收 day05 程序交互与基本 ...
- 浅析Python垃圾回收机制!
Python垃圾回收机制 目录 Python垃圾回收机制 1. 内存泄露 2. Python什么时候启动垃圾回收机制? 2.1 计数引用 2.2 循环引用 问题:引用计数是0是启动垃圾回收的充要条件吗 ...
- Scala 面向对象(八):特质(接口) 一
1 Scala接口的介绍 从面向对象来看,接口并不属于面向对象的范畴,Scala是纯面向对象的语言,在Scala中,没有接口. Scala语言中,采用特质trait(特征)来代替接口的概念,也就是说, ...
- 机器学习实战基础(二十二):sklearn中的降维算法PCA和SVD(三) PCA与SVD 之 重要参数n_components
重要参数n_components n_components是我们降维后需要的维度,即降维后需要保留的特征数量,降维流程中第二步里需要确认的k值,一般输入[0, min(X.shape)]范围中的整数. ...
- 数据可视化实例(八): 边缘直方图(matplotlib,pandas)
https://datawhalechina.github.io/pms50/#/chapter6/chapter6 边缘直方图 (Marginal Histogram) 边缘直方图具有沿 X 和 Y ...
- 3个月不发工资,拖延转正?2天跳槽软件测试成功,9.5k他不香吗!
今天聊到的小哥哥很悲催又很神奇,身处武汉的他,正好赶上了疫情,不仅长达3个月没有发工资,拖延转正,还要降薪,三重打击,实名悲催. 不破不立,试用期80%再打8折,怎么跳槽工资都得比这高,果然,仅仅两天 ...
- P1866 编号
大致题意: 求太郎的n只兔子的编号的排列种数 基本思路: 每只兔子都有一个范围,那么每只兔子的范围就是这只兔子选择编号的种数. 以5 8为例,第一只兔子有5种,第二只兔子有8种,而第一只兔子选择后,第 ...
- vue : rem自适应的应用
我们知道,rem是一个css单位,指的是HTML根节点的字体大小. MDN:css单位 而我们在用rem布局的时候必然会遇到一个问题:我们需要根据用户的屏幕大小去计算rem. 以下是代码. (在VUE ...