C. Palindromic Paths------------------------思維

在這裏插入圖片描述

在這裏插入圖片描述
解析:
在這裏插入圖片描述

迴文路徑,如上圖所示 兩條紅線對應的元素必須都是一樣的,兩條綠線對應的元素必須是一樣的(如果不相同其中一條路徑肯定不會是迴文路徑)。
所以最終我們只要求所有的斜線對應的元素是否一樣,不一樣我們就統計這兩條斜線1的數量和0的數量,哪個最少我們就改哪個。
但是遍歷斜線又很麻煩。我們可以根據座標(x,y)來統計 走到第幾步就是x+y-1
那麼第x+y-1 的貢獻就是 cnt[x+y-1][a[x][y]]++
最後遍歷相對應斜線的走的是第幾步來計算答案

#include<bits/stdc++.h>
using namespace std;
const int N=500;
int t,n,m;
int a[N][N];
int cnt[N][2];
int main()
{
	cin>>t;
	while(t--)
	{
		cin>>n>>m;
		memset(cnt,0,sizeof cnt);
		for(int i=1;i<=n;i++)
			for(int j=1;j<=m;j++)
			{
				cin>>a[i][j];
				cnt[i+j-1][a[i][j]]++;
			} 
		int l=1,r=n+m-1;
		int ans=0;
		while(l<r)
		{
			ans+=min(cnt[l][0]+cnt[r][0],cnt[l][1]+cnt[r][1]);
			l++;r--;
		}
		cout<<ans<<endl;
	
	}
 } 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章