USACO3.3 Home on the Range【思维】
做完之后看到题解里面很多bfs,dfs,甚至还有dp?
写了一个不知道怎么称呼它的方法,暂且叫他乱搞吧。 用数组a[][]预处理出以当前行作为最底层,这一列从上往下的最长的1的长度。 如果这个格子为0的话,a[i][j]就是0,当然也可以特殊标记一下(比如我就用的-1) 统计答案的时候,就枚举每个非0的格子作为最底层第一个格子依次往右边拓展,记录途中最短的从上往下1的长度。由于是正方形,能构成的正方形的边长为min(pos-j+1,m)min(pos−j+1,m)(见代码)。当纵向延伸的长度大于途中最短的从上往下1的长度时,后面就已经不能再构成正方形了,就可以break掉
当然还可以用单调队列,悬线法什么的做,不过这道题的数据范围是真的小。
和之前在纪中培训的这道题有点像:餐桌 数据范围还要小一点来着。
/*
ID: Starry21
LANG: C++
TASK: range
*/
#include<iostream>
#include<string>
#include<cstdio>
#include<cstring>
#include<queue>
#include<algorithm>
#include<vector>
using namespace std;
#define N 255
#define ll long long
#define INF 0x3f3f3f3f
int n;
char s[N][N];
int a[N][N];
int ans[N];
int main()
{
//freopen("range.in","r",stdin);
//freopen("range.out","w",stdout);
scanf("%d",&n);
for(int i=;i<=n;i++)
{
scanf("%s",s[i]+);
for(int j=;j<=n;j++)
if(s[i][j]=='') a[i][j]=-;
}
for(int i=;i<=n;i++)
if(a[][i]!=-) a[][i]=;
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
{
if(a[i][j]==-) continue;
if(a[i-][j]==-) a[i][j]=;
else a[i][j]=a[i-][j]+;
}
/*for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
printf("%2d ",a[i][j]);
puts("");
}*/
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
if(a[i][j]>)
{
int pos=j,m=INF;
while(a[i][pos]>)
{
m=min(m,a[i][pos]);
if(pos-j+>m) break;
ans[min(m,pos-j+)]++;
//if(min(m,pos-j+1)==2) printf("%d %d %d\n",i,j,pos);
pos++;
}
}
for(int i=;i<=n;i++)
if(ans[i]>)
printf("%d %d\n",i,ans[i]);
return ;
}
Code
USACO3.3 Home on the Range【思维】的更多相关文章
- Codeforces Round #768 (Div. 2) D. Range and Partition // 思维 + 贪心 + 二分查找
The link to problem:Problem - D - Codeforces D. Range and Partition time limit per test: 2 second ...
- USACO3.34Home on the Range(DP)
之前做过一道类似的 国际象棋盘神马的.. 统计出以每个1作为右下角的最大正方形 那么以大于二到这个最大值之间为边的正方形都可以以这个为右下角 累加就可以了 dp[i][j] = min(dp[i-1] ...
- Codeforces 1167 E Range Deleting 双指针+思维
题意 给一个数列\(a\),定义\(f(l,r)\)为删除\(a\)中所有满足\(l<=a_i<=r\)的数后的数列,问有多少对\((l,r)\),使\(f(l,r)\)是一个 ...
- Educational Codeforces Round 65 (Rated for Div. 2) E. Range Deleting(思维+coding)
传送门 参考资料: [1]:https://blog.csdn.net/weixin_43262291/article/details/90271693 题意: 给你一个包含 n 个数的序列 a,并且 ...
- CF-Approximating a Constant Range
Description When Xellos was doing a practice course in university, he once had to measure the intens ...
- HDU6038-Function-数学+思维-2017多校Team01
学长讲座讲过的,代码也讲过了,然而,当时上课没来听,听代码的时候也一脸o((⊙﹏⊙))o 我的妈呀,语文不好是硬伤,看题意看了好久好久好久(死一死)... 数学+思维题,代码懂了,也能写出来,但是还是 ...
- python解析FreeMind思维导图
记录瞬间 在实际工作中,通常需要使用思维导图进行一些分析和设计,但是,在设计好之后,想要把思维导图的内容转化成文字进行输出怎么做呢? 使用python(当然可以使用其他的语言进行处理)可以很好的解决这 ...
- vue源码逐行注释分析+40多m的vue源码程序流程图思维导图 (diff部分待后续更新)
vue源码业余时间差不多看了一年,以前在网上找帖子,发现很多帖子很零散,都是一部分一部分说,断章的很多,所以自己下定决定一行行看,经过自己坚持与努力,现在基本看完了,差ddf那部分,因为考虑到自己要换 ...
- 观光公交 [NOIP 2011] [思维推导]
Description 风景迷人的小城Y 市,拥有n 个美丽的景点.由于慕名而来的游客越来越多,Y 市特意安排了一辆观光公交车,为游客提供更便捷的交通服务.观光公交车在第0 分钟出现在1号景点,随后依 ...
随机推荐
- 完整的IT项目开发流程
一般情况下,企业开发软件时会按照基线和定制两块并行方式执行项目开发工作.无论什么公司,都需要遵从一套成熟的产品研发过程体系,才能做出质量较好的产品.因此,如果出现项目较多的情况,应该合理地安排基线和定 ...
- Java GUI :Hello World
public class Demo01 extends Frame{ public Demo01(){ super("Demo01");//标题 this.setSize(450, ...
- Five minutes to understand async and defer
Script tag When we want to insert a script into a web page, the standard way is to use the script ta ...
- idea中使用JRebel插件
首先 等待下载 点击Restart idea (重启idea) 然后等待idea 进行激活 记得勾选下面的那个复选框 激活url:http://139.199.89.239:1008/88414687 ...
- Nginx虚拟主机多server_name的顺序问题
Nginx虚拟主机多server_name的顺序问题 大 | 中 | 小 [ 2008-11-28 11:27 | by 张宴 ] [文章作者:张宴 本文版本:v1.0 最后修改:2008.11. ...
- 10、堆叠窗口StackedWidget
新建项目,基类选择QMainWindow,勾选ui 堆叠窗口有三个page,每个page有个label button处,快捷菜单,转到槽,添加代码 void MainWindow::on_push ...
- make文件基础用法
参照:https://www.jianshu.com/p/0b2a7cb9a469 创建工作目录,包含一下文件 main.c person.c b.h c.h /*** c.h ***/ //this ...
- 智能指针之shared_ptr基本概述
1.shared_ptr允许有多个指针指向同一个对象,unique_ptr独占所指向的对象. 2.类似于vector,智能指针也是模板.创建智能指针: shared_ptr<string> ...
- Java indexOf() 方法
indexOf() 方法有以下四种形式: public int indexOf(int ch): 返回指定字符在字符串中第一次出现处的索引,如果此字符串中没有这样的字符,则返回 -1. public ...
- Compress Words
E. Compress Words 直接套 KMP 即可(那为什么打 cf 的时候没有想到...),求出后一个单词(word)的前缀数组,然后从前面已得的字符串的末尾 - word. length ( ...