牛客网暑期ACM多校训练营(第二场)carpet
传送门:carpet
题意
题解
代码
1 #include<bits/stdc++.h>
2 #define ll long long
3 using namespace std;
4
5 const int maxn=1e6+10;
6 int nt1[maxn];
7 int nt2[maxn];
8 string s[maxn];
9 unordered_map<int,int> mp;
10 deque<int> dq;
11 int val[maxn],v[maxn];
12
13 void getnt1(string s)
14 {
15 int i=0,j=-1;
16 nt1[0]=-1;
17 while(i<s.size()){
18 if(j==-1||s[i]==s[j]) i++,j++,nt1[i]=j;
19 else j=nt1[j];
20 }
21 }
22
23 void getnt2(string s)
24 {
25 int i=0,j=-1;
26 nt2[0]=-1;
27 while(i<s.size()){
28 if(j==-1||s[i]==s[j]) i++,j++,nt2[i]=j;
29 else j=nt2[j];
30 }
31 }
32
33 int main()
34 {
35 ios::sync_with_stdio(false);
36 cin.tie(0);
37 cout.tie(0);
38
39 int n,m;
40 cin>>n>>m;
41 for(int i=0;i<n;i++) cin>>s[i];
42 for(int i=0;i<n;i++){
43 for(int j=0;j<m;j++){
44 cin>>v[i*m+j];
45 }
46 }
47
48 int pp=m,qq=n;
49 for(int i=0;i<n;i++){
50 getnt1(s[i]);
51 int p=nt1[m];
52 while(p!=-1){
53 mp[m-p]++;
54 if(mp[m-p]==n) pp=min(pp,m-p);
55 p=nt1[p];
56 }
57 }
58 mp.clear();
59 for(int i=0;i<m;i++){
60 string t;
61 for(int j=0;j<n;j++){
62 t+=s[j][i];
63 }
64 getnt2(t);
65 int p=nt2[n];
66 while(p!=-1){
67 mp[n-p]++;
68 if(mp[n-p]==m) qq=min(qq,n-p);
69 p=nt2[p];
70 }
71 }
72
73 int ans=1e9;
74 for(int i=0;i<n;i++){
75 while(dq.size()) dq.pop_back();
76 for(int j=0;j<pp-1;j++){
77 while(dq.size()&&v[i*m+dq.back()]<=v[i*m+j]) dq.pop_back();
78 dq.push_back(j);
79 }
80 for(int j=pp-1;j<m;j++){
81 while(dq.size()&&dq.front()+pp<=j) dq.pop_front();
82 while(dq.size()&&v[i*m+dq.back()]<=v[i*m+j]) dq.pop_back();
83 dq.push_back(j);
84 val[i*m+j]=v[i*m+dq.front()];
85 }
86 }
87 for(int i=pp-1;i<m;i++){
88 while(dq.size()) dq.pop_back();
89 for(int j=0;j<qq-1;j++){
90 while(dq.size()&&val[dq.back()*m+i]<=val[j*m+i]) dq.pop_back();
91 dq.push_back(j);
92 }
93 for(int j=qq-1;j<n;j++){
94 while(dq.size()&&dq.front()+qq<=j) dq.pop_front();
95 while(dq.size()&&val[dq.back()*m+i]<=val[j*m+i]) dq.pop_back();
96 dq.push_back(j);
97 ans=min(ans,val[dq.front()*m+i]);
98 }
99 }
100 ll res=(ll)ans*(ll)(pp+1)*(ll)(qq+1);
101 cout<<res<<endl;
102 return 0;
103 }
牛客网暑期ACM多校训练营(第二场)carpet的更多相关文章
- 牛客网暑期ACM多校训练营 第九场
HPrefix Sum study from : https://blog.csdn.net/mitsuha_/article/details/81774727 k较小.分离x和k. 另外的可能:求a ...
- 牛客网暑期ACM多校训练营(第四场):A Ternary String(欧拉降幂)
链接:牛客网暑期ACM多校训练营(第四场):A Ternary String 题意:给出一段数列 s,只包含 0.1.2 三种数.每秒在每个 2 后面会插入一个 1 ,每个 1 后面会插入一个 0,之 ...
- 牛客网暑期ACM多校训练营(第五场):F - take
链接:牛客网暑期ACM多校训练营(第五场):F - take 题意: Kanade有n个盒子,第i个盒子有p [i]概率有一个d [i]大小的钻石. 起初,Kanade有一颗0号钻石.她将从第1到第n ...
- 牛客网 暑期ACM多校训练营(第二场)A.run-动态规划 or 递推?
牛客网暑期ACM多校训练营(第二场) 水博客. A.run 题意就是一个人一秒可以走1步或者跑K步,不能连续跑2秒,他从0开始移动,移动到[L,R]的某一点就可以结束.问一共有多少种移动的方式. 个人 ...
- 牛客网 暑期ACM多校训练营(第一场)A.Monotonic Matrix-矩阵转化为格子路径的非降路径计数,Lindström-Gessel-Viennot引理-组合数学
牛客网暑期ACM多校训练营(第一场) A.Monotonic Matrix 这个题就是给你一个n*m的矩阵,往里面填{0,1,2}这三种数,要求是Ai,j⩽Ai+1,j,Ai,j⩽Ai,j+1 ,问你 ...
- 牛客网暑期ACM多校训练营(第三场)H Diff-prime Pairs (贡献)
牛客网暑期ACM多校训练营(第三场)H Diff-prime Pairs (贡献) 链接:https://ac.nowcoder.com/acm/contest/141/H来源:牛客网 Eddy ha ...
- 2018牛客网暑期ACM多校训练营(第二场)I- car ( 思维)
2018牛客网暑期ACM多校训练营(第二场)I- car 链接:https://ac.nowcoder.com/acm/contest/140/I来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 ...
- 牛客网暑期ACM多校训练营(第七场)Bit Compression
链接:https://www.nowcoder.com/acm/contest/145/C 来源:牛客网 题目描述 A binary string s of length N = 2n is give ...
- 牛客网暑期ACM多校训练营(第一场) - J Different Integers(线段数组or莫队)
链接:https://www.nowcoder.com/acm/contest/139/J来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 524288K,其他语言1048 ...
- 牛客网暑期ACM多校训练营(第九场) A题 FWT
链接:https://www.nowcoder.com/acm/contest/147/A来源:牛客网 Niuniu has recently learned how to use Gaussian ...
随机推荐
- C语言实现九大排序算法
C语言实现九大排序算法 直接插入排序 折半插入排序 希尔排序 冒泡排序 快速排序 直接选择排序 堆排序 归并排序 基数排序 C语言实现九大排序算法 直接插入排序 将数组分为两个部分,一个是有序部分,一 ...
- zabbix 监控的数据
/usr/local/zabbix/bin/zabbix_sender --zabbix-server 192.168.1.10 --port 10051 --input-file /var/log/ ...
- 【Oracle】从删除的recyclebin中查看并恢复数据
如果数据库中用了drop删除表,后面没有加上purge的话,会出现在oracle的回收机制中 dba_recyclebin可以查看当前删除的都是哪些 这个只是部分截图,可以看到删除的对象是什么,删除的 ...
- C#中foreach的实现原理
C#中foreach的实现原理 在探讨foreach如何内部如何实现这个问题之前,我们需要理解两个C#里边的接口,IEnumerable 与 IEnumerator. 在C#里边的遍历集合时用到的相关 ...
- [MRCTF2020]你传你🐎呢之.htaccess
前言 最近,也是遇到了文件上传的文件,自己搭的靶场都不能用,今天,在这里又遇到了这个题.简单总结下,内容来自互联网,若有侵权,联系我. .htaccess简介 .htaccess文件(分布式配置文件) ...
- F4IF_INT_TABLE_VALUE_REQUEST选择屏幕自定义F4帮助
今天在用 F4IF_INT_TABLE_VALUE_REQUEST函数写选择屏幕的自定义帮助的时候,发现了个问题,那就是 F4IF_INT_TABLE_VALUE_REQUEST中参数value_ta ...
- linux串口编程
按照对linux系统的理解,串口编程的顺序无非就是open,read,write,close,而串口有波特率.数据位等重要参数需要设置,因此还应该用到设置函数,那么接下来就带着这几个问题去学习linu ...
- 浅析Linux启动流程
Linux系统启动流程 Linux 系统的启动,从计算机开机通电自检开始,一直到登陆系统,需要经历多个过程.了解 Linux 的启动过程,有助于了解 Linux 系统的结构,也对系统的排错有很大的帮助 ...
- 大数据系列4:Yarn以及MapReduce 2
系列文章: 大数据系列:一文初识Hdfs 大数据系列2:Hdfs的读写操作 大数据谢列3:Hdfs的HA实现 通过前文,我们对Hdfs的已经有了一定的了解,本文将继续之前的内容,介绍Yarn与Yarn ...
- LDAP学习
.top pre { display: block; background: rgba(68, 67, 65, 1); color: rgba(255, 255, 255, 1); margin: 1 ...