比较有意思的一道题
存到vector一个一个匹配就行
code:
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn = 2e2 + 9;
const ll mod = 998244353;
const ll inf = 0x3f3f3f3f;
ll n, m, k;
ll sum = 0;
char s[maxn][maxn], t[maxn][maxn];
char m2[maxn][maxn],m3[maxn][maxn], m4[maxn][maxn];
vector <pair<int,int> > vt;
bool check(char a[][maxn])
{
vector <pair<int,int> > va;
for(int i = 1; i <= n; ++i)
for(int j = 1; j <= n; ++j)
if(a[i][j] == '#')
va.push_back({
i, j});
if(va.size() != vt.size()) return false;
else
{
int mx = va[0].first - vt[0].first, my = va[0].second - vt[0].second;
for(int i = 1; i < va.size(); ++i)
{
if(va[i].first - vt[i].first != mx || va[i].second - vt[i].second != my)
return false;
}
return true;
}
}
void work()
{
cin >> n;
for(int i = 1; i <= n; ++i)
cin >> (s[i] + 1);
for(int i = 1; i <= n; ++i)
{
cin >> (t[i] + 1);
for(int j = 1; j <= n; ++j)
if(t[i][j] == '#')
vt.push_back({
i, j});
}
for(int i = 1; i <= n; ++i)
for(int j = 1; j <= n; ++j)
m2[i][n-j+1] = s[j][i];
for(int i = 1; i <= n; ++i)
for(int j = 1; j <= n; ++j)
m3[i][n-j+1] = m2[j][i];
for(int i = 1; i <= n; ++i)
for(int j = 1; j <= n; ++j)
m4[i][n-j+1] = m3[j][i];
if(check(s) || check(m2) || check(m3) || check(m4))
cout << "Yes\n";
else cout << "No\n";
}
int main()
{
ios::sync_with_stdio(0);
//int TT;cin>>TT;while(TT--)
work();
return 0;
}
D - Rectangles
题意:给你 n n n 个点,找这 n n n 个点能组成多少矩阵
思路:找矩阵对角线,标记已经找过的对角线
code:
(map太慢了)
#include

本文展示了使用C++编程解决矩阵旋转及查找问题的代码实例,包括矩阵旋转后的匹配检查、矩形数量计算和最短路径求解等算法。涉及二分查找、并查集和迪杰斯特拉算法的应用。
最低0.47元/天 解锁文章
551

被折叠的 条评论
为什么被折叠?



