七段码
1.试题 C :直线2.树形动态规划3.X 进制减法4.后缀表达式5.统计子矩阵6.包子凑数7.整数拼接8.地宫取宝
9.七段码
10.砝码称重11.递增三元组12.完全平方数13.[蓝桥杯 2019 省 A] 填空问题 E14.波动数列15.左孩子右兄弟16.接龙数列17.糖果18.蚂蚁感冒19.子串分值20.超级胶水21.P9425 [蓝桥杯 2023 国 B] AB 路线22.P9426 [蓝桥杯 2023 国 B] 抓娃娃23.P9425 [蓝桥杯 2022 国 B] 202224.P8805 [蓝桥杯 2022 国 B] 机房25.P8806 [蓝桥杯 2022 国 B] 搬砖26.P8764 [蓝桥杯 2021 国 BC] 二进制问题一、问题描述
P8714 [蓝桥杯 2020 省 B2] 试题 E:七段码
二、问题简析
我们可以把该数码管看成一张图:将二极管作为顶点,并编号(1~7
);若二极管相邻,则对应的顶点有无向边连接。这样,我们就得到了一张7个顶点的无向图。题目要我们求,该图的连通子图的数量。
连通子图:在无向图 \(G\) 中,若任意两个顶点之间都存在路径使得它们相连通,则称 \(G\) 为连通图。
我们可以分两步走:第一步,遍历该图的所有子图;第二步,检验子图的连通性。
2.1 遍历子图
在遍历子图时,可以利用掩码来简化运算。将二进制的第 0
位与顶点 1
对应,第 1
位与顶点 2
对应 ······ 以此类推,7
个顶点一共要用 7
个二进制位表示。若某个二进制位是 0
,表示子图中没有对应的顶点;若为 1
,则有该顶点。
因此,我们可以遍历二进制位,来达到遍历子图的目的。因为二进制可以转换为十进制,所以可以通过递遍历十进制来达到遍历二进制的目的。
遍历十进制肯定不能无限制地递增下去,要确定一个上限。若 7
个二进制位都为 1
,换算成十进制就是 2^7 - 1
,这就是上限。进行指数运算的复杂度较高,我们给该上限 +1
,变成了 2^7
,可以直接通过位操作 1 << 7
表示。
2.2 检验连通性
这里采用 dfs
来检验连通性。
三、AC代码
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int quickin(void)
{
int ret = 0;
bool flag = false;
char ch = getchar();
while (ch < '0' || ch > '9')
{
if (ch == '-') flag = true;
ch = getchar();
}
while (ch >= '0' && ch <= '9' && ch != EOF)
{
ret = ret * 10 + ch - '0';
ch = getchar();
}
if (flag) ret = -ret;
return ret;
}
bool vis[10], A[10], G[10][10];
int dfs(int x)
{
if (!A[x] || vis[x])
return 0;
int ret = 1;
vis[x] = true;
for (int i = 1; i <= 6; i++)
{
if (G[x][i])
ret += dfs(i);
}
return ret;
}
int main()
{
#ifdef LOCAL
freopen("test.in", "r", stdin);
// freopen("test.out", "w", stdout);
#endif
for (int i = 0; i < 10; i++)
{
int a, b;
cin >> a >> b;
G[a][b] = true;
G[b][a] = true;
}
ll ans = 0;
for (int i = 1; i < (1 << 7); i++)
{
fill(A, A + 10, false);
fill(vis, vis + 10, false);
int cnt = 0, st;
for (int j = 1; j <= 7; j++)
if ((i >> (j - 1)) & 1)
{
A[j] = true;
st = j;
cnt++;
}
if (dfs(st) == cnt)
{
ans++;
// for (int j = 1; j <= 6; j++)
// if (A[j]) cout << j << ' ';
// cout << endl;
}
}
cout << ans << endl;
return 0;
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战