首页 > 其他分享 >E - Defect-free Squares

E - Defect-free Squares

时间:2023-07-23 15:33:40浏览次数:32  
标签:前缀 int Defect free 3005 正方形 Squares dp

E - Defect-free Squares (atcoder.jp)

题意:一个H*W的矩形上有几个块有洞,问你没有洞的正方形有多少个

两种做法,DP和二分前缀和

DP是官方题解

先是二分前缀和做法,当时没想到前缀和可还行。。

先弄好前缀和,然后我们考虑用(i,j)作为正方形左上角能贡献多少个正方形,显然(i,j)作为左上角时最大正方形的边长就是答案,这里具有单增性,在这里入手

二分+前缀和

#include<iostream>
using namespace std;
bool mp[3005][3005];
int a[3005][3005];
int h,w,m,x,y;
long long ans;
bool check(int x,int y,int k)
{
	return (a[x+k-1][y+k-1]-a[x+k-1][y-1]-a[x-1][y+k-1]+a[x-1][y-1])==0;
}
signed main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin>>h>>w>>m;
	while(m--)
	{
		cin>>x>>y;
		mp[x][y]=1;
	}
	for(register int i=1;i<=h;++i)
	{
		for(int j=1;j<=w;++j)
		{
			a[i][j]=a[i-1][j]+a[i][j-1]-a[i-1][j-1]+mp[i][j];
		}
	}
	for(register int i=1;i<=h;++i)
	{
		for(int j=1;j<=w;++j)
		{
			if(mp[i][j])continue;
			int l=0,r=min(h-i+1,w-j+1);
			while(l<r)
			{
				int mid=(l+r+1)>>1;
				if(check(i,j,mid))l=mid;
				else r=mid-1;
			}
			ans+=l;
		}
	}
	cout<<ans;
	return 0;
}

然后是官方的DP做法,很巧妙

dp[i][j]是以(i,j)为右下角时,为答案贡献的正方形的个数。

如果想以图中黄色块为右下角,组成边长等于2的正方形的话,需要它上、左、左上均没有洞;如果要组成边长等于3的正方形的话,则需要绿色箭头指向的方向没有洞。

转移方程 当(i,j)没有洞的时候,dp[i][j]=min(dp[i-1][j],dp[i-1][j-1],dp[i][j-1])+1;

具体代码看官方题解即可

Editorial - Toyota Programming Contest 2023#4(AtCoder Beginner Contest 311)

标签:前缀,int,Defect,free,3005,正方形,Squares,dp
From: https://www.cnblogs.com/qbning/p/17575065.html

相关文章

  • Defect-freeSquares
    [ABC311E]Defect-freeSquares考虑令\(f[i][j]\)表示以\((i,j)\)为右下角的最大正方形的边长,以其为右下角的正方形恰好为\(f[i][j]\),答案就是\(\sumf[i][j]\)。然后考虑转移。对于一个格子,如果要扩充正方形,必定要往左上角、左、上三个方向扩张,且取决于最小者,即\(f[i][j......
  • 使用Free Pascal开发STM32程序
    使用FreePascal开发STM32程序前言大部分人都知道嵌入式开发,一般用的都是C语言,但是实际上,除C语言之外还有许多语言都可以开发,本文将介绍使用FreePascal(简称FPC)开发STM32程序的方法。你可以进FreePascal的官网看看,其第一段话就是说这个编译器支持多少处理器多少操作系统的,事实......
  • FreeSWITCH添加g729编码及pcap音频提取
    操作系统:debian11(bullseye,docker)、Windows10_x64FreeSWITCH版本:1.10.9Docker版本:23.0.6Python版本 : 3.9.2 日常工作中,有时候会遇到g729编码的相关内容,但FreeSWITCH默认是不支持g729编码转码的,今天记录下使用开源的bcg729进行g729转码的过程(本文仅作技术研究,......
  • python sip freeswitch
    PythonSIPandFreeSWITCHIntroductionInthisarticle,wewillexplorehowtousePythontointeractwithFreeSWITCH,anopen-sourcetelephonyplatform.WewillspecificallyfocusonutilizingtheSessionInitiationProtocol(SIP)moduleinPythontoest......
  • new/delete/malloc/free
    new/deletenew和delete是C++中的运算符,不是库函数,不需要库的支持。new的工作机理string*sp=newstring("avalue");//一个new表达式new表达式调用一个operatornew(或者operatornew[])的标准库函数,该函数分配一个原始的,足够大小的,未命名的内存空间编译器运行相应的构造函数......
  • 论文翻译: FREEVC:朝着高质量、无文本、单次转换声音的目标迈进
    原文:FREEVC:TOWARDSHIGH-QUALITYTEXT-FREEONE-SHOTVOICECONVERSION原文地址:https://ieeexplore.ieee.org/abstract/document/10095191 个人总结:1.提出mel谱缩放增强方法。2.基于VITS框架进行改进,BUT在对照实验中缺没有对比VITS3.引入WavLM模型提高VC模型对说话人内容......
  • Freertos学习09-软件定时器
    一、概述软件定时器是一种在单片机上实现定时功能的方法,可以用于周期性地执行任务或者延时执行任务。软件定时器由FreeRTOS内核实现,不需要硬件支持。软件定时器只有在软件定时器回调函数被调用时才需要占用CPU时间。本节主要设计以下内容:软件定时器的API介绍实例测试......
  • FreeType 控制台渲染字形轮廓笔记
    项目里用到了FreeType解析字体,这里只为了更方便入手FreeType,简单读取字体文件,并在控制台绘制制定字符轮廓,以字符A为例:初始化FreeType,加载字体文件#include<freetype2/ft2build.h>#includeFT_FREETYPE_H#include<iostream>#include<math.h>usingnamespacestd;......
  • HFP(hands free profle)
    HFP蓝牙免提协议:1.角色:AG(audiogateway):音频网关,相当于手机HF(handfree):免提端,相当于耳机2.支持的feature:3.SLC(servicelevelconnectestablishment)服务级连接的建立SLC就是一些AT指令的交互,交互完后,SLC就建立成功了。前提:SLC建立前必须存......
  • freee Programming Contest 2023(AtCoder Beginner Contest 310)
    Preface打的就是依托答辩,当时看一眼D感觉是个爆搜不想写就先跳了去想F,结果傻逼了没想出来最后30min了赶紧溜回去把D爆搜写了,但是已经罚时爆炸了,其实如果正常正序做的话排名会挺稳的后面一问包大爷发现F是个傻逼题,只能说计数水平实在是低下A-OrderSomethingElse签到题#i......