HZOI20190813 B,任(duty)
题面:去一个神奇的网页:https://www.cnblogs.com/Juve/articles/11352426.html
听说打O(nmq)有70
但是显然博主只有50分
考点:前缀和的综合应用
标算为:对于不包含环的图,连通块数目=点数-边数,所以利用二维前缀和进行预处理,O(1)求出矩形区域内的边数和点数.
很好写的70分算法:对每组询问都暴力求连通块数目的复杂度为O(NMQ),可以通过前7个测试点.出题人认为,在考场上,一个水平中等的选手最佳的策略是采用这个70分算法以留出时间思考第三题.
第3,4,5,6个测试点的其他做法:利用和标算同样的思路,但不需要二维前缀和,求解时较简单.
第8,9个测试点的目的是照顾常数过大的选手和数组开小的选手.
本题实际上是AtCoder Grand Contest 015的C题,可能会有一些选手因为做过原题而在本题快速得到高分,但估计不会很多
Liu_runda的官方题解
其实你手玩一下样例就会发现,一个矩形内联通块的数目等于矩形内部所有黑点个数减去所有黑点之间连的边数
维护三个前缀和,分别存黑点个数,行上的边数,列上的边数,这样就能O(1)查询
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<stack>
#include<queue>
#define re register
#define MAXN 2005
using namespace std;
int n,m,q,mapa[MAXN][MAXN];
int sum[MAXN][MAXN],sumh[MAXN][MAXN],suml[MAXN][MAXN];
int dx[2]={-1,0},dy[2]={0,-1},h[MAXN][MAXN],l[MAXN][MAXN];
char ch[MAXN];
signed main(){
scanf("%d%d%d",&n,&m,&q);
for(int i=1;i<=n;i++){
scanf("%s",ch+1);
for(int j=1;j<=m;j++){
mapa[i][j]=ch[j]-'0';
sum[i][j]=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+mapa[i][j];//黑点总数前缀和
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(mapa[i][j]==0) continue;
for(int k=0;k<=1;k++){
int p=i+dx[k],q=j+dy[k];
if(mapa[p][q]==0) continue;
if(k==0) h[p][q]++;
else l[p][q]++;
}
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
sumh[i][j]=sumh[i-1][j]+sumh[i][j-1]-sumh[i-1][j-1]+h[i][j];
suml[i][j]=suml[i-1][j]+suml[i][j-1]-suml[i-1][j-1]+l[i][j];//内部边数的前缀和(行与列)
}
}
for(int i=1,sx,sy,ex,ey;i<=q;i++){
scanf("%d%d%d%d",&sx,&sy,&ex,&ey);
int res1=sum[ex][ey]-sum[sx-1][ey]-sum[ex][sy-1]+sum[sx-1][sy-1];
int res2=suml[ex][ey-1]-suml[sx-1][ey-1]-suml[ex][sy-1]+suml[sx-1][sy-1];
int res3=sumh[ex-1][ey]-sumh[sx-1][ey]-sumh[ex-1][sy-1]+sumh[sx-1][sy-1];
int ans=res1-res2-res3;
printf("%d\n",ans);
}
return 0;
}
HZOI20190813 B,任(duty)的更多相关文章
- 单片机模拟 1/2 Bias、1/4 Duty的 LCD 驱动使用方法
工作原理 方式一 根据 LCD 的驱动原理可知,LCD 像素点上只能加上 AC 电压,LCD 显示器的对比度由 COM脚上的电压值减去 SEG 脚上的电压值决定,当这个电压差大于 LCD 的饱 ...
- Others - On Duty
On Duty This is xxx and will be duty engineer in the next week. Thanks. Here is a kindly reminder. T ...
- How to download Heavy Duty Diagnostic Caterpillar SIS 2018 software
Maybe you find there are supplied Caterpillar SIS 2018 software free download in search engine, that ...
- 关于LCD的duty与bias
关于LCD的duty与bias 关于LCD的duty与bias duty: 占空比将所有公共电极(COM)各施加一次扫描电压的时间叫一帧,单位时间内扫描多少帧的频率叫帧频,将扫描公共电极(COM)选通 ...
- 智课雅思短语---三、unshakable duty
智课雅思短语---三.unshakable duty 一.总结 一句话总结:不可推卸的义务 unshakable duty 1.satisfy/ meet the needs of…? 满足需求 2. ...
- CF 958E2. Guard Duty (medium)
这道题是昨天linkfqy dalao上课讲的一道题 当时他讲的时候就想到了一种玄学的搞法,然后不敢相信自己切掉了 没想到后来CHJ dalao也想到了这种算法,然后发现是对的 后来10min就切掉了 ...
- POJ 1293 - Duty Free Shop 01背包记录所选物品
裸的01背包.dp[x]只要是bool型记录当前空间是否可用.. 而为了找到用了哪些物品..dp[x]设置为int型..进行记录.. Program: #include<iostream> ...
- [Codeforces958E2]Guard Duty (medium)(区间DP)
Description 题目链接 Solution 可以把题目转化一下模型,将间隔取出来,转化为N-1个数,限制不能取相邻两个数,求取K个数的最小价值 设DP[i][j]表示前i个数取j个最大价值(第 ...
- Guard Duty (hard) Codeforces - 958E3 || uva 1411
https://codeforces.com/contest/958/problem/E3 当没有三点共线时,任意一个这样的点集都是保证可以找到答案的,(考虑任意一种有相交的连线方案,一定可以将其中两 ...
随机推荐
- day24 模块
Python之路,Day12 = Python基础12 模块 本质为py程序 分类: 内置模块 time time.time() ---> 当前时间的时间戳:浮点型 time.localtim ...
- thinkphp 操作绑定到类
定义 ThinkPHP3.2版本提供了把每个操作方法定位到一个类的功能,可以让你的开发工作更细化,可以设置参数ACTION_BIND_CLASS,例如: 'ACTION_BIND_CLASS' =&g ...
- Vue+Iview+Node 项目结构和配置
1.项目调整后的目录 api:数据接口定义 assets:静态文件 components:组件 config:项目相关配置 driective:指令 router:路由 store:状态管 ...
- Delphi 窗口置顶的方法
有几种窗口置顶的方法,简单的有: ShowWindow(窗口句柄,sw_ShowNormal); SetWindowPos(窗口句柄,HWND_NOTOPMOST,0,0,0,0,SWP_NOMOV ...
- 双线程DP
1.传纸条 好像是一道普及组水题? //Twenty #include<cstdio> #include<iostream> #include<cstring> # ...
- truncate和delete的区别
TRUNCATE 命令用法 语法 TRUNCATE TABLE name 参数 name 是要截断的表的名称或要删除其全部行的表的名称. 注释 TRUNCATE TABLE 在功能上与不带 W ...
- Spark 读写数据、抽象转换 拾遗
读 package com.test.spark import org.apache.spark.sql.{Dataset, Row, SaveMode, SparkSession} /** * @a ...
- Spring Boot 发布 jar 包转为 war 包秘籍。
Spring Boot是支持发布jar包和war的,但它推荐的是使用jar形式发布.使用jar包比较方便,但如果是频繁修改更新的项目,需要打补丁包,那这么大的jar包上传都是问题.所以,jar包不一定 ...
- Python3中面向对象 OOP
Python3中面向对象 OOP 定义: python中通过关键字 class 实现类的定义: class ClassName(object): pass 获取成员变量:ClassName.变量名 修 ...
- 查出当前操作数据库的登入名SUSER_NAME()
select SUSER_NAME() 一般和触发器一起用来监控是谁对表做了操作