1 条题解

  • 0
    @ 2025-8-24 21:15:04

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar Joseph
    ค้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้

    搬运于2025-08-24 21:15:03,当前版本为作者最后更新于2023-08-03 14:45:53,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    B3788 题解

    题目传送门

    题目大意:

    给你两张图它们可以随意的平移,求平移后完全重合的最多格点数。

    思路:

    首先看到说明提示。

    对于百分之一百的的数据,满足 1n,m501 \le n,m \le 50 我们就可以想到用暴力枚举的方法其实是我是蒟蒻想不到其他办法了。

    那我们要怎么搜呢?分别枚举图 22xxyy 轴再和图 11 来对比就行了。

    都快看完了点点赞吧。

    最期待的代码:

    #include <bits/stdc++.h>
    using namespace std;
    
    const int N = 55;
    int n1, n2, m1, m2, res = -0x3f;//第一张图和第二张图的n和m,res是重合的最大值;
    bool xy1[N][N], xy2[N][N];//第一张图和第二张图的像素;
    
    int main() {
    //读入数据;
    	cin >> n1 >> m1;
    	for(int i = 1;i <= n1;i++)
    		for (int j = 1;j <= m1;j++)
    			cin >> xy1[i][j];
    	cin >> n2 >> m2;
    	for(int i = 1;i <= n2;i++)
    		for(int j = 1;j <= m2;j++)
    			cin >> xy2[i][j];
    //开始暴力枚举;
    for(int dx = -n1;dx <= n1;dx++)//枚举x轴移动方向
    	for(int dy = -m1;dy <= m1;dy++){//枚举y轴移动方向
    	int ans = 0,f = 1;
    	for(int i = 1;i <= n2;i++)//扫数组
    		for(int j = 1;j <= m2;j++){
    		int nx = i + dx,ny = j + dy;
    		if(nx > 0 && nx <= n1 && ny > 0 && ny <= m1) {
    			if(xy1[nx][ny] == xy2[i][j]) ans++;
    			else f = 0;//有不同的直接清零;
    		}
    	}
    	res = max(res, ans * f);
    }
    cout << res << endl;
    	return 0;//完美结束;
    }
    
    • 1

    信息

    ID
    8819
    时间
    1000ms
    内存
    128MiB
    难度
    2
    标签
    递交数
    0
    已通过
    0
    上传者