专栏文章

题解:P14612 [2019 KAIST RUN Fall] 6789

P14612题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@min0irxo
此快照首次捕获于
2025/12/01 18:34
3 个月前
此快照最后确认于
2025/12/01 18:34
3 个月前
查看原文

题目大意


通过对题目中给定的 n×m n\times m 的矩阵中单某个数字进行翻转,有解输出翻转次数,无解则输出 1-1

思路


枚举 map[i][j]map[i][j]map[ni+1][mj+1]map[n-i+1][m-j+1] 匹配。
情况:
  1. 两个 66 两个99 两个77 ,翻转其中一个。
  2. 两个 88 6699 9966 本身合法不用处理。
  3. 除去以上情况,剩余情况不合法则输出 1-1
注意:对中心特判只有 88 合法。

代码


CPP
#include<bits/stdc++.h>
using namespace std;
int n, m, nl, ml, ans;
int mp[510][510];
int main()
{
	cin >> n >> m;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			char a;
			cin >> a;
			mp[i][j] = a-'0';
		}
	}
	if(n%2==1&&m%2==1)
	{
		if(mp[n/2+1][m/2+1] != 8)
		{
			cout << -1;
			return 0;
		}
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			if(mp[i][j] == 6&&mp[n-i+1][m-j+1] == 9) continue;
			if(mp[i][j] == 9&&mp[n-i+1][m-j+1] == 6) continue;
			if(mp[i][j] == 7&&mp[n-i+1][m-j+1] == 10) continue;//10为倒7 
			if(mp[i][j] == 10&&mp[n-i+1][m-j+1] == 7) continue;
			if(mp[i][j] != mp[n-i+1][m-j+1])
			{
				cout << "-1";
				return 0;
			}
			if(mp[i][j] == 6&&mp[n-i+1][m-j+1] == 6)
			{
				ans++;
				mp[n-i+1][m-j+1] = 9;
				continue;
			}
			if(mp[i][j] == 9&&mp[n-i+1][m-j+1] == 9)
			{
				ans++;
				mp[n-i+1][m-j+1] = 6;
				continue;
			}
			if(mp[i][j] == 7&&mp[n-i+1][m-j+1] == 7)
			{
				ans++;
				mp[n-i+1][m-j+1] = 10;
				continue;
			}
		}
	}
	cout << ans;
	return 0;
}

评论

0 条评论,欢迎与作者交流。

正在加载评论...