第 二十七 次训练赛 - Virtual Judge (vjudge.net)
解法一:通过数组下标
memcpy(c, a, sizeof a);
for (int i = 1; i <= n; i ++)
for (int j = 1; j <= n; j ++)
c[i][j] = a[n + 1 - j][i];
进行判断
if(c[i][j] == 1 && b[i][j] != 1)
{
flag = 0;
break;
}
最后复制新的C
memcpy(a, c, sizeof c);
这样进行最多四次操作
解法二:pair
#include<bits/stdc++.h>
#define int long long
using namespace std;
typedef pair<int, int> PII;
const int N = 1e2 + 10, mod = 998244353;
int n, m;
int a[N][N], b[N][N];
vector<PII> v;
map<PII, int> mp;
void change () {
for (int i = 0; i < v.size(); i++) {
int x = v[i].second, y = n-v[i].first+1;
v[i] = { x,y };
}
}
signed main(){
cin >> n;
for (int i = 1; i <= 2 * n; i++) {
for (int j = 1; j <= n; j++) {
if (i <= n) {
cin >> a[i][j];
if (a[i][j] == 1) v.push_back({ i,j });
}
else {
cin >> b[i-n][j];
if (b[i-n][j] == 1) mp[{i-n, j}]++;
}
}
}
for (int i = 1; i <= 4; i++) {
bool f = true;
for (int j = 0; j < v.size(); j++) {
int x = v[j].first, y = v[j].second;
if (mp[{x, y}] == 0) {
f = false;
break;
}
}
if(!f) change();
else {
cout << "Yes" << endl;
return 0;
}
}
cout << "No" << endl;
return 0;
}