和大伙伴做题-gym C. Figures

2024-06-01 21:32
文章标签 gym 做题 伙伴 figures

本文主要是介绍和大伙伴做题-gym C. Figures,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

C. Figures
time limit per test
2 seconds
memory limit per test
512 megabytes
input
standard input
output
standard output

You are given a map divided into n × m square fields which are colored. We call a subset of fields of the same color a Figure, if it is:

  • in one piece: for every two fields in the Figure, there is a path between them composed of side-adjacent fields belonging to the Figure,
  • maximal: every field from outside the Figure that is adjacent to it has a different color.
Figures A and B are considered identical (they might be colored differently) if you can move A onto B so that every field of B is covered by a field of A and every field of A covers a field from B, without turning the Figure. Calculate the number of different Figures on the given map.

Input

In the first line of input there is an integer z - the number of test cases. Then, z test cases follow.

First line of a test case contains two integers, n and m (1 ≤ n, m ≤ 1000) - number of rows and columns of the map. In next n lines you are given the description of rows on the map: m integers which are nonnegative and no greater than 109. These integers are the colors of fields in the map.

Output

For each test case, print one line with one integer: the number of different figures.

Sample test(s)
input
1
5 5
1 1 2 2 2
3 1 3 3 4
3 4 4 3 4
5 5 5 2 2
1 1 1 6 2
output
5

题意:给定一个图,求出不同形状的块有几种。

思路:我自己想用二维数组记录下拼图形状在插入到set,可是好像set不太支持哦。。。然后大伙伴说可以利用pair保存点,用set保存点集的方法来保存形状,大伙伴实在机智得我整个人都不行了。f@ck。

代码:

#include <stdio.h>
#include <string.h>
#include <set>
using namespace std;
const int d[4][2] = {{0, 1}, {-1, 0}, {1, 0}, {0, -1}};int t, n, m, g[1005][1005], vis[1005][1005];typedef pair<int ,int> pi;
set<pi> aa;
set<set<pi> > bb;void dfs(int x, int y, int num, int a, int b) {vis[x][y] = 1;aa.insert(make_pair(x - a, y - b));for (int i = 0; i < 4; i++) {int xx = x + d[i][0];int yy = y + d[i][1];if (num == g[xx][yy] && !vis[xx][yy] && xx >= 0 && xx < n && yy >= 0 && yy < m) {dfs(xx, yy, num, a, b);}}
}
int main() {scanf("%d", &t);while (t --) {memset(vis, 0, sizeof(vis));bb.clear();int count = 0;scanf("%d%d", &n, &m);for (int i = 0; i < n; i ++)for (int j = 0; j < m; j ++)scanf("%d", &g[i][j]);for (int i = 0; i < n; i ++)for (int j = 0; j < m; j ++) {if (!vis[i][j]) {aa.clear();dfs(i, j, g[i][j], i, j);if (bb.find(aa) == bb.end()) {bb.insert(aa);count ++;}}}printf("%d\n", count);}return 0;
}


这篇关于和大伙伴做题-gym C. Figures的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1022163

相关文章

[CQUOJ 21448] 会做题的兔兔 (数学+DP)

题意大意是有一个整数,可以用若干个 2的 n次幂累加得到,问一共有多少种累加方案 统计方案的题,最重要的是做到不重复,不遗漏 dp[i][0]表示构成 i中不含 1的方案有多少种 dp[i][1]表示构成 i中含 1个 1的方案有多少种 dp[i][2]表示构成 i中含 1的方案有多少种 最后答案是 dp[N][0] +dp[N][2] 思路如下: 1) 如果 i是奇数,那么必然要有

不做题,可以通过PMP考试吗?

如果你想要避免浪费3900元并且不想再支付2500元的补考费,我建议你多做一些PMP考试的练习题;如果你不在意这些费用,也可以选择资助我,嘿嘿。不做题的话,通过PMP考试的几率是非常小的。因为做题是检验我们学习成果并发现不足之处的有效方式。就像我们在小学、初中和高中时需要做很多练习题和试卷一样,对吧? 想要通过PMP考试就必须做题,但并不是做得越多越好。很多人误以为疯狂做题就能考高分,这是错

探索未来工作新伙伴:机器人流程自动化(RPA)揭秘

想象一下,如果你的日常工作中那些繁琐、重复的任务,比如数据录入、文件整理、邮件发送等,都能自动完成,你将拥有更多时间专注于真正需要创造力和智慧的工作,是不是听起来就像拥有了一个私人助理?这并不是遥不可及的梦想,因为今天,我们要介绍的就是这样一位“超级助手”——机器人流程自动化(RPA)。 RPA,你的职场新朋友 首先,让我们来揭开RPA的神秘面纱。简单来说,RPA就像是一个聪明的机

探索无界,共创未来 —来自 TDengine 的伙伴招募邀请

🌟 嗨!准备好了吗? TDengine 2024 年商业生态合作伙伴招募计划正式开启! 🌍 借助开源的力量,TDengine 已经成为一颗在全球市场迅速上升的新星⭐️。我们的热情不仅在于培育一个充满活力的开发者社区,还在于搭建一个多彩的产业生态园。为此我们期待与世界各地、各行各业的佼佼者携手,在数字化和创新的浪潮中乘风破浪,共享庞大的市场机遇。 TDengine 的品牌和强大产品力量出发

【Linux内核】伙伴系统算法和slab分配器(1)

【Linux内核】伙伴系统算法和slab分配器(1) 目录 【Linux内核】伙伴系统算法和slab分配器(1)伙伴系统(buddy)算法伙伴系统算法基本原理内存申请内存回收 接口函数源码分析内存分配接口物理内存释放接口规范物理内存分配行为的掩码 gfp_mask(了解即可) 作者:爱写代码的刚子 时间:2024.5.24 前言:本篇博客将会介绍Linux系统中伙伴系统算法

CTF Show MISC做题笔记

MISCX 30 题目压缩包为misc2.rar,其中包含三个文件:misc1.zip, flag.txt, hint.txt。其中后两个文件是加密的。 先解压出misc1.zip, 发现其中包含两个文件:misc.png和music.doc。其中后面文件是加密的。 解压出misc.png,发现图片尾部有消息:flag{flag_1s_n0t_h3r3} 尝试爆破,发现解压密码是202

BUUCTF WEB 菜比的做题总结

目录 前言:BUUCTF web WarmUp[强网杯 2019]随便注1.mysql 预处理语句 然后加 char ascii码绕过过滤2.同样是mysql预处理 但是用的是十六进制的方式 payload比第一个师傅要简单3.这个师傅的姿势是最骚的,也是比较容易读懂的 前言: 学了这么久的web基础,发现做题和看知识还是有很大区别,基础越扎实 web就越得心应手,各种师傅的

二进制地址的伙伴地址

二进制地址为011011110000,大小为(4)10和(16)10块的伙伴地址分别为 假设地址是16位的, (011011110000)2 =(0000 0110 1111 0000)2 =(06F0)16 >06F0h 所以当前地址为06F0h 查阅相关资料,有: 伙伴的概念, 满足以下三个条件的称为伙伴: ( 1 ) 两个块大小相同 ( 2

ISCC 2018做题记录

前言 感觉自己好菜,只会做几个题目,而且打打停停,还要应付各种考试,忙不过来,以后还是要更加努力学习啊。。还是先记录一下自己的做题过程,慢慢进步,跟不上大佬们的步伐啊emmm。。 MISC What is that? 直接改图片高度就好 得到flag 秘密电报 打开文件发现是一堆AB立刻想到是培根密码,直接培根解密得到flag,注意最后提交的是大写 重重谍影 发现一段ba

伙伴系统与slab/slub分配器

内存管理有两个算法:伙伴算法和slab/slub算法。伙伴算法是以页为单位管理内存,slab算法是以字节为单位管理内存,是内核的小内存管理算法。slab分配器并没有脱离伙伴系统,而是基于伙伴系统分配的大内存进一步细分成小内存。先讲伙伴系统,再讲slab分配器。      伙伴系统是基于bootmem机制来分配一些数据结构的。bootmem初始化的时候会调用free_area_init_n