首页 > 编程语言 >打卡信奥刷题(161)用C++信奥P1451[普及组/提高] 求细胞数量

打卡信奥刷题(161)用C++信奥P1451[普及组/提高] 求细胞数量

时间:2024-11-02 15:17:10浏览次数:5  
标签:P1451 int 细胞 tot fa C++ 打卡 qj 100

求细胞数量

题目描述

一矩形阵列由数字 0 0 0 到 9 9 9 组成,数字 1 1 1 到 9 9 9 代表细胞,细胞的定义为沿细胞数字上下左右若还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数。

输入格式

第一行两个整数代表矩阵大小 n n n 和 m m m。

接下来 n n n 行,每行一个长度为 m m m 的只含字符 09 的字符串,代表这个 n × m n \times m n×m 的矩阵。

输出格式

一行一个整数代表细胞个数。

样例 #1

样例输入 #1

4 10
0234500067
1034560500
2045600671
0000000089

样例输出 #1

4

提示

数据规模与约定

对于 100 % 100\% 100% 的数据,保证 1 ≤ n , m ≤ 100 1 \le n,m \le 100 1≤n,m≤100。

C++实现

#include
int n,m,a[101][101];
int tot=0,fa[10010],stlst,stnow,qj[10010][2];
int find(int u)
{
return u==fa[u]?u:fa[u]=find(fa[u]);
}
int main()
{
scanf(“%d%d”,&n,&m);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
scanf(“%1d”,&a[i][j]);
for(int i=1;(i<<1)<=n*m;i++) fa[i]=i;
for(int i=1;i<=n;i++)
{
stlst=stnow;
stnow=tot;
for(int j=1;j<=m;j++)
if(a[i][j])
{
qj[tot][0]=j;
while(a[i][j]) j++;
qj[tot][1]=j-1;
for(int k=stlst;k<stnow;k++)
if(qj[k][1]>=qj[tot][0]&&qj[k][0]<=qj[tot][1]) fa[find(k)]=tot;
tot++;
}
}
int ans=0;
for(int i=tot-1;i>=0;i–) if(fa[i]==i)
ans++;
printf(“%d”,ans);
}

在这里插入图片描述

后续

接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,感兴趣的请关注,我后续将继续分享相关内容

标签:P1451,int,细胞,tot,fa,C++,打卡,qj,100
From: https://blog.csdn.net/rogeliu/article/details/143449394

相关文章

  • 如何学好C++
    如何学好C++对于零基础想要学学C++的同学,我希望你们要先明白一件事:C++是一门极难掌握的编程语言,内容多且杂且难懂。所以如果你想要想要学好C++,你要花很多的时间和精力。当然这件事我也想告诉你:如果你在刚开始学或者学了很短的一段时间,发现自己学不会,默默告诉自己“......
  • 华为OD机试-(E卷,100分) - 热点网站统计(Java & Python& JS & C++ & C )
    最新华为OD机试题目描述企业路由器的统计页面,有一个功能需要动态统计公司访问最多的网页URLtopN。请设计一个算法,可以高效动态统计TopN的页面。输入描述每一行都是一个URL或一个数字,如果是URL,代表一段时间内的网页访问;如果是一个数字N,代表本次需要输出的TopN个URL......
  • Java和C++有什么区别?JVM不是跨平台的?JVM是用什么语言编写的?
    Java和C++有什么区别?编译解释型vs编译型程序跨平台vs源代码跨平台带GCvs无GC类库丰富vs自己造轮子JVM不是跨平台的?JVM不是跨平台的?Java语言是跨平台的语言,因为同一份代码,可由不同平台javac......
  • C++ 逆向之 move 函数
    众所周知,在C++11后,增加了右值引用类型,那么函数参数传递一共有三种方式,分别是非引用类型传递(值传递)、左值引用传递和右值引用传递,其中值传递会对实参进行一份拷贝传递给函数,左值引用和右值引用则直接引用实参传递给函数,这就是它们最大的区别。为什么要区分值传递和引用传递呢?对......
  • C++17 折叠表达式
    折叠表达式C++17之前处理参数包C++17折叠表达式的出现让我们不必再用递归实例化模板的方式来处理参数包。在C++17之前,实现必须分成两个部分:终止条件递归条件这样的实现不仅写起来麻烦,对C++编译器来说也很难处理。C++17折叠表达式能显著的减少程序员和编译器的工作量......
  • 《 C++ 修炼全景指南:十八 》缓存系统的技术奥秘:LRU 原理、代码实现与未来趋势
    摘要本篇博客深入解析了LRU(LeastRecentlyUsed)缓存机制,包括其核心原理、代码实现、优化策略和实际应用等方面。通过结合双向链表与哈希表,LRU缓存实现了高效的数据插入、查找与删除操作。文章还对LRU的优化方案进行了详细讨论,包括在不同应用场景下的性能提升、内存优化......
  • C++ ──── 红黑树的实现
    目录1.红黑树的概念2.红黑树的性质3. 红黑树节点的定义4.红黑树的插入操作 5. 红黑树的验证6.红黑树的删除7. 红黑树与AVL树的比较8. 红黑树的应用总代码:1.红黑树的概念        红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结......
  • C/C++ 知识点:重载、覆盖和隐藏
    文章目录一、重载、覆盖和隐藏1、重载(overload)1.1、定义1.2、使用`const`关键字1.3、实现原理2、覆盖(override)2.1、定义2.2、覆盖的条件2.3、`override`关键字3、隐藏(hiding)3.1、定义3.2、隐藏的条件3.3、隐藏与覆盖的区别3.4、示例前言:在C++中多态性是一个......
  • c++:vector
    一、vector是什么?1.1vector的介绍vector是表示可变大小数组的序列容器。 就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。本质......
  • C++详细笔记(五)
    1.类和对象1.1运算符重载(补)1.运算符重载中,参数顺序和操作数顺序是一致的。2.一般成员函数重载为成员函数,输入流和输出流重载为全局函数。3.由1和2只正常的成员函数默认第一个参数为this指针而重载中参数顺序和操作数顺序要一致,则导致使用时为d<<cout;(不符合使用习惯正常为......