0
点赞
收藏
分享

微信扫一扫

Educational Codeforces Round 89 (Rated for Div. 2)C. Palindromic Paths(思维,小结论)

野见 2023-02-09 阅读 93


题意:有一个N*M的01迷宫,现在要使从(1,1)到(n,m)的所有路径构成回文串,求最小修改字符数。

题解:首先第一步的下一步有两步可以走,这两步必须和从终点往回走的第二步相同(这样才是一个回文串),我们会发现,这时整个图都是一个对称结构,并且此时这一层要么是0,要么是1(​​这里是详细证明​​),所以每一层修改的最小步数就是看对称的层数(比如第一层和最后一层是对称的)的最小的0或1的个数(要么全改为1,要么全改为0)。统计一下就行了。

一个关于记录当前点位于bfs层数结论:对于一个点(i,j),这个点一定是在第i+j-1次bfs遍历到的。

AC代码:

#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
int n,m,cnt[100][2];
int main() {
int t;
cin>>t;
while(t--) {
memset(cnt,0,sizeof(cnt));
cin>>n>>m;
for(int i=1; i<=n; i++)
for(int j=1; j<=m; j++) {
int x;
cin>>x;
++cnt[i+j-1][x];
}
int tot=n+m-1;
int ans=0;
for(int i=1; i<=tot/2; i++)
ans+=min(cnt[i][0]+cnt[tot-i+1][0],cnt[i][1]+cnt[tot-i+1][1]);
cout<<ans<<endl;
}
}

 

举报

相关推荐

0 条评论