2024国庆S综合强化Day3
1.2024国庆S综合强化Day3
今天的题比较简单。
A 友矩阵
link
人话翻译一下题目中的条件。
1.和相等。
2.左上角相同。
3.右下角不同。
4.长宽之和相同(周长相同)。
5.长宽之差互为相反数(一个长减宽,一个宽减长)。
我们可以证明一下两个矩形如果互为满足2.3.4.5.条的友矩阵,一定是左上角重合一个横着一个竖着的两个相同长方形(如图黄色和绿色的长方形)。
证明:设两个长方形互为友矩阵,一个的长宽分别为
、 ( ),另一个长宽分别为 、 ( )。
因为长宽之和相同,所以。因为长宽之差互为相反数,所以 。
由第二个式子得到,由第一个式子得到 。
这时我们就可以证明两个长方形全等,又因为第二三条条件,我们得知了这两个长方形是左上角重合一个横着一个竖着的两个相同长方形。
题目又给了我们长方形的长和宽,这时我们只要枚举左上角,即可确定一对满足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;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具