ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

洛谷 CF508A Pasha and Pixels 题解

2022-09-11 22:04:17  阅读:259  来源: 互联网

标签:map ref 洛谷 varTheta min 题解 复杂度 Pasha define


题目传送门 CF传送门

话说这道题咋这么多坑!

具体思路

把全部位置第一次染成黑色的轮次是第几轮,时间复杂度为 \(\varTheta(k)\) ,接着从点 \(1,1\) 一直到点 \(n-1,m-1\) 全部都判断一遍 ,时间复杂度为 \(\varTheta(nm)\) ,总时间复杂度为 \(\varTheta(nm+k)\) 又因为 \(n,m\le 10^3\) 且 \(k\le 10^5\) ,所以并不会超时。

做法讲解

1 存法

我用了一个 \(a_{i,j}\) 表示在位置 \(i,j\) 第一次被染色的时候是第几次。

但是由于题目要求取的是最小值,因此需要用一个 min 函数来辅助我们更新数值。

\(ans\) 表示答案,及最小的次数,使得出现 \(2\times 2\) 的黑色格子时,至少需要经过多少次。

2 判断与求解

接下来是判断部分,我们首先需要将每个地方都判断过一次,如果这个数与其右边,下边,右下边均不为初始化的值,那么我们可以对 \(ans\) 进行更新,代码如下:

			if(a[i][j]<114514&&a[i][j+1]<114514&&a[i+1][j]<114514&&a[i+1][j+1]<114514){
				ans=min(ans,max(a[i][j],max(a[i+1][j],max(a[i][j+1],a[i+1][j+1]))));
				//答案要取最小值(题目要求)
			}

由此,我们可以得出代码。

奉上代码

#include<bits/stdc++.h>
namespace my_std{
	using namespace std;
	#define ll long long
	#define ref(i,x,y) for(register int i=(x);i<=(y);i++)
	#define fer(i,x,y) for(register int i=(x);i>=(y);i--)
	#define il inline
	#define mpii map<int,int>
	#define mpib map<int,bool>
	#define mpplll map<pll,ll>
	#define mppccl map<pcc,ll>
	#define getchar() (p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 1 << 21, stdin), p1 == p2) ? EOF : *p1++)
	char buf[1<<21],*p1=buf,*p2=buf;
	inline ll read(){
	    char c=getchar();
	    ll x=0;
	    for(;!isdigit(c);c=getchar());
	    for(;isdigit(c);c=getchar()) x=(x<<1)+(x<<3)+(c^48);
	    return x;
	}
}
using namespace my_std;
int n,m,k,ans=114514;
int a[1010][1010];
int main(){
	cin.tie(0),cout.tie(0);
	ios::sync_with_stdio(false);
	//输入输出优化,正常来讲可以不写
	cin>>n>>m>>k;
	memset(a,114514,sizeof(a));
	/*
	初始化a[i][j]要为一个很大的数
	因为后面需要取较小的值
	*/
//	ref(i,1,n){
//		ref(j,1,m){
//			cin>>a[i][j];
//		}
//	}
	ref(i,1,k){
		int x,y;
		cin>>x>>y;
		a[x][y]=min(a[x][y],i);
		//a[i][j]尽量的小,因此需要用min函数
	}
	ref(i,1,n){
		ref(j,1,m){
			if(a[i][j]<114514&&a[i][j+1]<114514&&a[i+1][j]<114514&&a[i+1][j+1]<114514){
				ans=min(ans,max(a[i][j],max(a[i+1][j],max(a[i][j+1],a[i+1][j+1]))));
				//答案要取最小值(题目要求)
			}
		}
	}
	cout<<((ans==114514)?0:ans)<<endl;
}


标签:map,ref,洛谷,varTheta,min,题解,复杂度,Pasha,define
来源: https://www.cnblogs.com/bairixingchen/p/16684927.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有