题目大意:给定一个图片,要求你找出上面窗户的种类,每个窗户上都被染上了不同性状的颜色。其中有一些窗户可能会被旋转,旋转之后的窗户和原窗户等效。求有多少种不同的窗户。
思路分析:一开始考虑字符矩阵状态数组,储存一下横行和纵行的计数状态,然后开个 m a p map map映射一下。但是发现这样无法确切的表示状态;然后又考虑哈希,发现不是很好写。于是采用队友的思路:直接将每个窗户旋转四次合成一个字符串,然后对字符串打一个 m a p map map,每次旋转之后判断是否存在先前的状态。不存在就插入一个。最后输出 m a p map map的大小即可。
#include
using namespace std;
const int N = 200;
char mp[N][N];
map mpp;
inline void findwh(int &w, int &h, int r, int c){
bool flag1 = false, flag2 = false;
int lhcx, lhcy, rdcx, rdcy;
for(int i = 1; i r >> c;
for(int i = 1; i mp[i][j];
int w = 1, h = 1; //!w--横向宽度
findwh(h, w, r, c);
if(w == c && h == r) return cout
关注
打赏
- 回坑记之或许是退役赛季?
- [LCT刷题] P1501 [国家集训队]Tree II
- [LCT刷题] P2147 洞穴勘测
- 2022-2023 ICPC Brazil Subregional Programming Contest VP记录
- [线段树套单调栈] 2019-2020 ICPC Asia Hong Kong Regional Contest H.[Hold the Line]
- The 2021 ICPC Asia Nanjing Regional Contest E.Paimon Segment Tree 区间合并线段树/维护矩阵乘法
- CF580E - Kefa and Watch 线段树维护哈希
- HDU5869 Different GCD Subarray Query 离线查询/区间贡献
- 27.CF1004F Sonya and Bitwise OR 区间合并线段树
- 26.CF1000F One Occurrence