2024国庆S综合强化Day3


今天的题比较简单。

A 友矩阵

link

人话翻译一下题目中的条件。

1.和相等。
2.左上角相同。
3.右下角不同。
4.长宽之和相同(周长相同)。
5.长宽之差互为相反数(一个长减宽,一个宽减长)。

我们可以证明一下两个矩形如果互为满足2.3.4.5.条的友矩阵,一定是左上角重合一个横着一个竖着的两个相同长方形(如图黄色和绿色的长方形)。

证明:设两个长方形互为友矩阵,一个的长宽分别为xyx<y),另一个长宽分别为aba<b)。
因为长宽之和相同,所以x+y=b+a。因为长宽之差互为相反数,所以xy+ba=0
由第二个式子得到x+yyy+b+aaa=0x+y+b+a2y2a=0,由第一个式子得到x+y+x+y2y2a=02x+2y2y2a=02x=2ax=ax=ay=b
这时我们就可以证明两个长方形全等,又因为第二三条条件,我们得知了这两个长方形是左上角重合一个横着一个竖着的两个相同长方形。

题目又给了我们长方形的长和宽,这时我们只要枚举左上角,即可确定一对满足2.3.4.5.条的友矩阵,再用二维前缀和判断和是否相等即可。

神奇的代码
#include<bits/stdc++.h>

#define int long long

using namespace std;

int n,m,a,b;
int s[1005][1005];
int qzh[1005][1005];
int ans = -1e17;

signed main(){
	
	freopen("matrix.in","r",stdin);
	freopen("matrix.out","w",stdout);
	
	cin >> n >> m >> a >> b;
	for(int i = 1;i <= n;++ i){
		for(int j = 1;j <= m;++ j){
			scanf("%lld",&s[i][j]);
			qzh[i][j] = qzh[i][j-1]+qzh[i-1][j]-qzh[i-1][j-1]+s[i][j];
		}
	}
	
	if(a < b) swap(a,b); 
	
	for(int i = 1;i+a-1 <= n;++ i){
		for(int j = 1;j+a-1 <= m;++ j){
			//以(i,j)为左上角的矩阵
			int sx = i+a-1,sy = j+b-1;
			int sums = 0;
			sums = qzh[sx][sy]-qzh[i-1][sy]-qzh[sx][j-1]+qzh[i-1][j-1];
			int hx = i+b-1,hy = j+a-1; 
			int sumh = 0;
			sumh = qzh[hx][hy]-qzh[i-1][hy]-qzh[hx][j-1]+qzh[i-1][j-1];
			if(sums == sumh){
				ans = max(ans,sums);
			}
		} 
	}
	
	if(ans != -1e17) cout << ans;
	else cout << "Chinese_zjc_ L";
	
	return 0;
	
} 
posted @   不认命,就是哪吒的命!  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示