P2601求调
  • 板块灌水区
  • 楼主S_Z_Xcoco
  • 当前回复16
  • 已保存回复16
  • 发布时间2024/11/30 10:38
  • 上次更新2024/11/30 13:57:09
查看原帖
P2601求调
918508
S_Z_Xcoco楼主2024/11/30 10:38
#include<bits/stdc++.h>
typedef unsigned long long ull;
using namespace std;
const int MAXN = 1e3 + 10;
int n, m, a[MAXN][MAXN], tot_ans;
bool check(int cx, int cy, int len){
    for(int i = 0; i < len; i++){
        for(int j = 0; j < len; j++){
            if(a[cx + i][cy + j] != a[cx + len - 1 - i][cy + j] || 
                a[cx + i][cy + j] != a[cx + i][cy + len - 1 - j]){ 
                return 0;
            }
        }
    }
    return 1;
}
int main(){
	cin >> n >> m;
	for(int i = 1; i <= n; i++){
		for(int j = 1; j <= m; j++){
			cin >> a[i][j];
		}
	}
	for(int i = 1; i <= n; i++){
		for(int j = 1; j <= m; j++){
			int l = 1, r = min(min(i, j), min(n - i + 1, m - j + 1));
			int ans = 0;
			while(l <= r){
				int mid = l + r >> 1;
				if(check(i + mid - 1, j + mid - 1, (mid << 1) - 1))
					ans = mid, l = mid + 1;
				else
					r = mid - 1;
			}
			tot_ans += ans;
			l = 1, r = min(min(i, j), min(n - i, m - j));
			ans = 0;
			while(l <= r){
				int mid = l + r >> 1;
				if(check(i + mid, j + mid, (mid << 1)))
					ans = mid, l = mid + 1;
				else
					r = mid - 1;
			}
			tot_ans += ans;
		}
	}
	cout << tot_ans << '\n';
	return 0;
}
2024/11/30 10:38
加载中...