博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Codeforces 372B Counting Rectangles is Fun
阅读量:5821 次
发布时间:2019-06-18

本文共 1516 字,大约阅读时间需要 5 分钟。

题意:每次给出一个区间,求里面有多少个矩形

思路:预处理,sum[i][j][k][l]代表以k,l为右下角,左上角不超过i,j有多少矩形,然后询问的时候枚举右下角就可以了

1 #include
2 #include
3 #include
4 #include
5 #include
6 int n,m,T; 7 int sum[45][45][45][45],l[45][45]; 8 char s[2005]; 9 int read(){10 int t=0,f=1;char ch=getchar();11 while (ch<'0'||ch>'9'){
if (ch=='-') f=-1;ch=getchar();}12 while ('0'<=ch&&ch<='9'){t=t*10+ch-'0';ch=getchar();}13 return t*f;14 }15 void init(){16 for (int i=1;i<=n;i++){17 scanf("%s",s+1);18 for (int j=1;j<=m;j++){19 if (s[j]=='1') continue;20 if (s[j-1]=='0') l[i][j]=l[i][j-1]+1;21 else l[i][j]=1; 22 }23 }24 for (int i=1;i<=n;i++)25 for (int j=1;j<=m;j++)26 for (int k=i;k<=n;k++)27 for (int L=j;L<=m;L++){28 int tmp=1<<29;29 int ss=0;30 for (int x=k;x>=i;x--){31 int ll=std::min(L-j+1,l[x][L]);32 tmp=std::min(tmp,ll);33 ss+=tmp;34 }35 sum[i][j][k][L]=ss;36 }37 }38 int main(){39 n=read();m=read();T=read();40 init();41 while (T--){42 int x1=read(),y1=read(),x2=read(),y2=read(),ans=0;43 for (int i=x1;i<=x2;i++)44 for (int j=y1;j<=y2;j++)45 ans+=sum[x1][y1][i][j];46 printf("%d\n",ans); 47 }48 return 0;49 }

 

转载于:https://www.cnblogs.com/qzqzgfy/p/5623705.html

你可能感兴趣的文章
TCP segmentation offload
查看>>
java数据类型
查看>>
数据结构——串的朴素模式和KMP匹配算法
查看>>
FreeMarker-Built-ins for strings
查看>>
验证DataGridView控件的数据输入
查看>>
POJ1033
查看>>
argparse - 命令行选项与参数解析(转)
查看>>
一维数组
查看>>
Linux学习笔记之三
查看>>
修改上一篇文章的node.js代码,支持默认页及支持中文
查看>>
Php实现版本比较接口
查看>>
删除设备和驱动器中软件图标
查看>>
第四章 TCP粘包/拆包问题的解决之道---4.1---
查看>>
html语言
查看>>
从源码看集合ArrayList
查看>>
spring-boot支持websocket
查看>>
菜鸟笔记(一) - Java常见的乱码问题
查看>>
我理想中的前端工作流
查看>>
记一次Git异常操作:将多个repository合并到同一repository的同一分支
查看>>
CodeIgniter 3.0 新手捣鼓源码(一) base_url()
查看>>