题解:P14612 [2019 KAIST RUN Fall] 6789
题目大意
通过对题目中给定的
思路
枚举
情况:
- 两个
6 或 两个9 或 两个7 ,翻转其中一个。 - 两个
8 或6 与9 或9 与6 本身合法不用处理。 - 除去以上情况,剩余情况不合法则输出
-1 。
注意:对中心特判只有
代码
#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;
}