2018.08.17 洛谷P3135 [USACO16JAN]堡哞(前缀和处理)
传送门
有趣的前缀和。
数据范围中的n≤200" role="presentation" style="position: relative;">n≤200n≤200提示我需要写出来一个O(n3)" role="presentation" style="position: relative;">O(n3)O(n3)的算法,思来想去感觉前缀和挺靠谱的于是写了写发现只有84,检查后发现把m打成了n(造数据的真善良。。。)。
所以说这道题怎么用前缀和呢?
我们先用O(n)" role="presentation" style="position: relative;">O(n)O(n)的时间枚举矩形的竖直的那条边的长度,然后O(n)" role="presentation" style="position: relative;">O(n)O(n)选取矩形的左上角点(默认都从最左边一列开始,在右边开始的情况会在跳双指针的时候纳入统计范围),最后上一波双指针就行了。
这题之所以能用双指针将O(n2)" role="presentation" style="position: relative;">O(n2)O(n2)优化成O(n)" role="presentation" style="position: relative;">O(n)O(n)是因为这个东西具有单调性,也就是矩形的左竖直边能选左做的就尽量选靠左的,否则不优。
代码:
#include<bits/stdc++.h>
using namespace std;
int n,m,a[205][205],sum[205][205],b[205],ans=0;
char s[205];
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;++i){
scanf("%s",s+1);
for(int j=1;j<=m;++j){
sum[i][j]=sum[i-1][j];
if(s[j]=='.')a[i][j]=1,++sum[i][j];
}
}
for(int len=1;len<=n;++len){
for(int i=1;i+len-1<=n;++i){
for(int j=1;j<=m;++j)b[j]=sum[i+len-1][j]-sum[i-1][j];
for(int l=1,r=1;;){
while((!a[i][l]||!a[i+len-1][l]||b[l]!=len)&&l<=m)++l;
r=l;
if(l>m)break;
while(a[i][r]&&a[i+len-1][r]&&r<=m){
if(b[r]==len)ans=max(ans,(r-l+1)*len);
++r;
}
if(r>m)break;
l=r+1;
}
}
}
cout<<ans;
return 0;
}
2018.08.17 洛谷P3135 [USACO16JAN]堡哞(前缀和处理)的更多相关文章
- 2018.08.17 洛谷[POI2010]GRA-The Minima Game(线性dp)
传送门 短代码神奇dp. 自己yy的思路居然1A了好高兴啊! 不难想到每个人选择的时候一定是取连续的最大的那一段数,自然需要先排序. 然后可以用dp[i]表示当前最大数是a[i]的时候先手可以获得的最 ...
- 2018.08.17 洛谷P3110 [USACO14DEC]驮运(最短路)
传送门 一道sb最短路,从两个起点和终点跑一边最短路之后直接枚举两人的汇合点求最小值就行了. 代码: #include<bits/stdc++.h> #define N 40005 #de ...
- 2018.07.17 洛谷P1368 工艺(最小表示法)
传送门 好的一道最小表示法的裸板,感觉跑起来贼快(写博客时评测速度洛谷第二),这里简单讲讲最小表示法的实现. 首先我们将数组复制一遍接到原数组队尾,然后维护左右指针分别表示两个即将进行比较的字符串的头 ...
- 2018.08.28 洛谷P4556 [Vani有约会]雨天的尾巴(树上差分+线段树合并)
传送门 要求维护每个点上出现次数最多的颜色. 对于每次修改,我们用树上差分的思想,然后线段树合并统计答案就行了. 注意颜色很大需要离散化. 代码: #include<bits/stdc++.h& ...
- 2018.08.28 洛谷P3803 【模板】多项式乘法(FFT)
传送门 fft模板题. 终于学会fft了. 这个方法真是神奇! 经过试验发现手写的complex快得多啊! 代码: #include<iostream> #include<cstdi ...
- 2018.08.28 洛谷P4360 [CEOI2004]锯木厂选址(斜率优化dp)
传送门 一道斜率优化dp入门题. 是这样的没错... 我们用dis[i]表示i到第三个锯木厂的距离,sum[i]表示前i棵树的总重量,w[i]为第i棵树的重量,于是发现如果令第一个锯木厂地址为i,第二 ...
- 2018.08.28 洛谷P3345 [ZJOI2015]幻想乡战略游戏(点分树)
传送门 题目就是要求维护带权重心. 因此破题的关键点自然就是带权重心的性质. 这时发现直接找带权重心是O(n)的,考虑优化方案. 发现点分树的树高是logn级别的,并且对于以u为根的树,带权重心要么就 ...
- 2018.08.19 洛谷P1402 酒店之王(最大流)
传送门 最大流入门题,把人拆点即可. 代码: #include<bits/stdc++.h> #define N 505 using namespace std; inline int r ...
- 2018.08.16 洛谷P1471 方差(线段树)
传送门 线段树基本操作. 把那个方差的式子拆开可以发现只用维护一个区间平方和和区间和就可以完成所有操作. 同样区间修改也可以简单的操作. 代码: #include<bits/stdc++.h&g ...
随机推荐
- 【转】Ultra simple ISO-7816 Interface
原文出自 http://hilbert-space.de/?p=135 While laying out a PCB for my SWP reader project I realized that ...
- Activity服务类-1 DynamicBpmnService服务类
这个服务是5.19版本后新增的一个服务,和RepositoryService的作用相似,都是与流程定义有关,但是却完全不同.从名字上来看是动态的BPMN服务,看里面的方法都是改变流程的相关属性.这个方 ...
- 13 python 常用的内置方法介绍
1.isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象 class Foo(object) ...
- ABAP-BarCode-3-调用第三方控件BarTender实现打印
1.BarTender软件安装及注册 2.BarTender设置好打印模板 3.ABAP生成TXT文件放置FTP服务器指定文件夹 4.BarTender轮询FTP服务器文件夹中的TXT,并按照模板打印 ...
- UI5-文档-4.27-Mock Server Configuration
我们只是在一个真实的服务上运行我们的应用程序,但是对于开发和测试我们的应用程序,我们不希望依赖于“真实”服务的可用性,或者在数据服务所在的系统上增加额外的负载. 这个系统就是所谓的后端系统,我们现在将 ...
- http chunked
http chunked传输:将信息分段传输 好处: 不用指定content-length字段(总的要传输文件信息的长度),即可以将一整段信息分为若干段分别发送,最后发送chunked长度为0的信息表 ...
- centos sendmail 启动慢
from:http://www.cnblogs.com/kerrycode/p/4717498.html 在 CentOS release 6.6 上启动sendmail服务时发现服务启动过程非常慢, ...
- Python中的操作符重载
运算符重载是指在方法中拦截内置的操作----当类的实例出现在内置操作中,Python会自动调用自定义的办法,并且返回自定义方法的操作结果. 类可以重载python的操作符 操作符重载使我们的对 ...
- Docker-删除untagged docker images
故障描述 [root@entel1 ~]# docker rmi entel_zmc_images:zmc_base Untagged: entel_zmc_images:zmc_base 操作步骤 ...
- linux一些基本常识(四)
tail -f时时监控 一开启内存最小位u原则,尽量优化代码 grep -v "" /etc/passwd 这样行不行 怎么清除last nice调整进程运行级别 pkill是匹配 ...