首页 > 其他分享 >2022/8/20 总结

2022/8/20 总结

时间:2022-08-20 14:34:16浏览次数:76  
标签:总结 cnt ch 20 int break 枚举 2022 return

A.P4398 [JSOI2008]Blue Mary的战役地图

  • 考场写了个暴力,我还以为要挂了,结果这题暴力可过

Solution

  • 本来想写 \(\mathtt{O(n^6)}\) 的暴力,但感觉可能过不了,所以加了亿点小优化;

  • 我把第一张地图(记为 \(a\))里的所有数字进行了离散化,开了一个 \(\mathtt{vector}\) 来存每个值在第二张地图(记为 \(b\))里对应的坐标,就避免了 \(\mathtt{n^4}\) 的枚举;

  • 然后枚举 \(a\) 中正方形的左上角坐标,枚举在 \(b\) 中对应的点坐标,再枚举正方形边长。一旦出现越界或是不同就弹出。

  • 最后加了一个小优化,就是当当前枚举的 \(a\) 坐标已经不足以产生一个边长大于 \(ans\) 的正方形时,直接弹出;

AC code
#include<bits/stdc++.h>
using namespace std;

inline int read(){
	int s=0,f=1;
	char ch=getchar();
	while(!isdigit(ch)){
		if(ch=='-') f=-1;
		ch=getchar();
	}
	while(isdigit(ch)){
		s=s*10+int(ch-'0');
		ch=getchar();
	}
	return s*f;
}

const int N=55;

#define re register

struct memr{
	int x,y;
};

int n;
int a[N][N],b[N][N];
int c[N*N],tot=0;
int cl;
vector<memr>nxt[N*N];

inline int rk(int x){
	return lower_bound(c+1,c+cl+1,x)-c;
}

int main(){
//	freopen("map.in","r",stdin);
//	freopen("map.out","w",stdout);
	n=read();
	for(re int i=1;i<=n;++i)
		for(re int j=1;j<=n;++j){
			a[i][j]=read();
			c[++tot]=a[i][j];
		}
	sort(c+1,c+tot+1);
	cl=unique(c+1,c+tot+1)-c-1;
	for(re int i=1;i<=n;++i)
		for(re int j=1;j<=n;++j){
			b[i][j]=read();
			nxt[rk(b[i][j])].push_back((memr){i,j});
		}
	int ans=0;
	for(re int i=1;i<=n;++i){
		for(re int j=1;j<=n;++j){
			int r=rk(a[i][j]);
			for(re int k=0;k<nxt[r].size();++k){
				int x=nxt[r][k].x;
				int y=nxt[r][k].y;
				int cnt=0;
				bool s=1;
				while(s){
					++cnt;
					if(x+cnt-1>n || y+cnt-1>n) break;
					if(i+cnt-1>n || j+cnt-1>n) break;
					for(re int p=x,q=i;p<x+cnt;++p,++q)
						if(a[q][j+cnt-1]!=b[p][y+cnt-1]){
							s=0;
							break;
						}
					for(re int p=y,q=j;p<y+cnt-1 && s;++p,++q)
						if(a[i+cnt-1][q]!=b[x+cnt-1][p]){
							s=0;
							break;
						}
				}
				ans=max(ans,cnt-1);
			}
			if(ans>n-j+1)
				break;
		}
		if(ans>n-i+1)
			break;
	}
	printf("%d",ans);
	return 0;
}

标签:总结,cnt,ch,20,int,break,枚举,2022,return
From: https://www.cnblogs.com/Star-LIcsAy/p/16607650.html

相关文章

  • 集训3/4总结
    这几次考试题难度和在家集训五天的难度差不多,但是考试状态好了很多,故成绩还看得过去。感觉基本集训几天第一次学的算法都没太学懂,还需要自己去复习。上新课的速度没我想的......
  • 飞凌FCU2201设置wifi sta模式
    除了官方文档里写的删除掉两个文件外,mv/etc/systemd/system/multi-user.target.wants/hostapd.service/etc/systemd/system/multi-user.target.wants/hostapd.service.b......
  • SIC 模块FF08MR12W1MA1B11ABPSA1 150A 1200V /FF08MR12W1MA1B11概述
    概述FF08MR12W1MA1B111200VCoolSiC™模块是碳化硅(SiC)MOSFET模块,具有较高的效率和系统灵活性。这些模块采用近阈值电路(NTC)和PressFIT触点技术。该款CoolSiC模块具......
  • "蔚来杯"2022牛客暑期多校训练营4
    A.TaskComputing给定\(n\)个任务,每个任务有两个权值\(w_i,p_i\),从中按任意顺序选出\(m\)个任务\((a_1,a_2,...,a_m)\),收益为\(\sum\limits_{i=1}^mw_{a_i}\prod\limits_{......
  • 传球游戏【NOIP2018普及组T3】(ybtoj 递推例题2)
    题目描述上体育课的时候,小蛮的老师经常带着同学们一起做游戏。这次,老师带着同学们一起做传球游戏。游戏规则是这样的: 个同学站成一个圆圈,其中的一个同学手里拿着一......
  • 在Ubuntu20.04上使用kubeadm搭建k8s集群(2022年8月版本为v1.24.4)
    1.一些真心话在开始之前,需要将重要的事情说三遍:一定要认真阅读官方文档!一定要认真阅读官方文档!!一定要认真阅读官方文档!!!我在搭建k8s之前看了网上很多教程,也尝试的执行了......
  • 2022-8-20 每日一题-二叉树-递归
    654.最大二叉树难度中等499收藏分享切换为英文接收动态反馈给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建:创建一个......
  • 2022/8/20暑假学习日记
    1问题:合格的软件工程师,有什么具体的标准吗?还是说能写代码,又能发现问题解决问题就可以成为了呢?我们现阶段可以从哪方面开始培养自己的开发思维和能力,向工程师迈进?回答:作为......
  • 2022-8-20 剑指offer-滑动窗口+(桶排序或者有序集合)
    剑指OfferII057.值和下标之差都在给定的范围内难度中等55收藏分享切换为英文接收动态反馈给你一个整数数组 nums 和两个整数 k 和 t 。请你判断是否存在......
  • P2508-[HAOI2008]圆上的整点【数学】
    正题题目链接:https://www.luogu.com.cn/problem/P2508题目大意一个在\((0,0)\)的圆心,半径为\(r\),求圆有多少个整点。\(1\leqr\leq2\times10^9\)解题思路设这个......