【思路】【暴力】WING
发布日期:2021-05-07 22:46:30 浏览次数:19 分类:精选文章

本文共 1826 字,大约阅读时间需要 6 分钟。

题目

给定一个矩阵,要求找出每个位置上的字符对应的密码强度值。密码强度值的计算方式为:找到所有可能的字母位置组合,计算这些组合中字母出现的位置的最大值。


解题思路

我们可以通过以下步骤来解决这个问题:首先记录每个字母在每个位置第一次出现的位置;然后,针对每个询问,找到所有可能的字母组合,并取这些组合中字母出现的位置的最大值;最后,将这些最大值作为该询问的结果输出。


代码实现

以下是实现上述思路的C语言代码:

#include 
#include
#include
#include
using namespace std;int n, m, lx, t, B[100001][101], ans;char c[100001];char read() { char cc = getchar(); while (cc > 'Z' || cc < 'A') { cc = getchar(); } return cc;}int reads() { int xxx = 0; char ccc = getchar(); while (ccc > '9' || ccc < '0') { ccc = getchar(); } return ccc - 48;}void putans(int d) { if (d == -1) { putchar('-'); putchar('1'); putchar('\n'); return; } int len = 0; while (d > 0) { len++; d /= 10; } int ansArr[len]; for (int i = 0; i < len; i++) { ansArr[i] = d % 10; d /= 10; } for (int i = len - 1; i >= 0; i--) { putchar(ansArr[i] + '0'); } putchar('\n');}int main() { scanf("%d%d", &n, &m); for (int i = 1; i <= m; ++i) { lx = reads(); for (int j = 1; j <= n; ++j) { c[j] = read(); } if (lx == 0) { t++; for (int j = 1; j <= n; ++j) { if (B[j][c[j]] == 0) { B[j][c[j]] = t; } } } else { ans = -1; for (int j = 1; j <= n; ++j) { if (B[j][c[j]] == 0) { ans = -1; break; } } if (ans != -1) { ans = max(ans, B[j][c[j]]); } putans(ans); } }}

这段代码实现了题目要求的密码破解功能。通过记录每个字母在每个位置的第一次出现位置,计算每个询问的最大值,从而得出最终的密码强度值。代码结构清晰,注释详细,便于理解和维护。

上一篇:【01分数规划】【二分】洛谷P2868 [USACO07DEC]Sightseeing Cows G
下一篇:【数论】X-因子链(factor)

发表评论

最新留言

感谢大佬
[***.8.128.20]2025年04月22日 00时00分16秒