当前位置: 首页 > news >正文

做外贸b2b网站上海互联网管理系统推广公司

做外贸b2b网站,上海互联网管理系统推广公司,深圳市企业网站建设企业,广州品牌设计公司[NOIP2002 提高组] 字串变换 题目背景 本题不保证存在靠谱的多项式复杂度的做法。测试数据非常的水,各种做法都可以通过,不代表算法正确。因此本题题目和数据仅供参考。 本题为搜索题,本题不接受 hack 数据。关于此类题目的详细内容 题目…

[NOIP2002 提高组] 字串变换

题目背景

本题不保证存在靠谱的多项式复杂度的做法。测试数据非常的水,各种做法都可以通过,不代表算法正确。因此本题题目和数据仅供参考。

本题为搜索题,本题不接受 hack 数据。关于此类题目的详细内容

题目描述

已知有两个字串 A , B A,B A,B 及一组字串变换的规则(至多 6 6 6 个规则),形如:

  • A 1 → B 1 A_1\to B_1 A1B1
  • A 2 → B 2 A_2\to B_2 A2B2

规则的含义为:在 A A A 中的子串 A 1 A_1 A1 可以变换为 $ B_1 , , A_2$ 可以变换为 B 2 ⋯ B_2\cdots B2

例如: A = abcd A=\texttt{abcd} A=abcd B = xyz B=\texttt{xyz} Bxyz

变换规则为:

  • abc → xu \texttt{abc}\rightarrow\texttt{xu} abcxu ud → y \texttt{ud}\rightarrow\texttt{y} udy y → yz \texttt{y}\rightarrow\texttt{yz} yyz

则此时, A A A 可以经过一系列的变换变为 B B B,其变换的过程为:

  • abcd → xud → xy → xyz \texttt{abcd}\rightarrow\texttt{xud}\rightarrow\texttt{xy}\rightarrow\texttt{xyz} abcdxudxyxyz

共进行了 3 3 3 次变换,使得 A A A 变换为 B B B

输入格式

第一行有两个字符串 A , B A,B A,B

接下来若干行,每行有两个字符串 A i , B i A_i,B_i Ai,Bi,表示一条变换规则。

输出格式

若在 10 10 10 步(包含 10 10 10 步)以内能将 A A A 变换为 B B B,则输出最少的变换步数;否则输出 NO ANSWER!

样例 #1

样例输入 #1

abcd xyz
abc xu
ud y
y yz

样例输出 #1

3

提示

对于 100 % 100\% 100% 数据,保证所有字符串长度的上限为 20 20 20

【题目来源】

NOIP 2002 提高组第二题

题目解析

这道题目是一个字符串变换问题,我们需要找出将字符串 A 转换为字符串 B 的最少步骤数,或者判断是否无法在 10 步内完成转换。让我为您分析这道题目并提供解题思路。

题目解析:

  1. 我们有两个字符串 A 和 B,以及一组变换规则。
  2. 每个规则允许我们将字符串中的某个子串替换为另一个子串。
  3. 我们需要找出使用这些规则将 A 转换为 B 的最少步骤数。
  4. 如果无法在 10 步内完成转换,我们需要输出 “NO ANSWER!”。

解题思路:
这个问题可以使用广度优先搜索(BFS)来解决。以下是具体的步骤:

  1. 创建一个队列,初始将字符串 A 加入队列。
  2. 创建一个集合来记录已经访问过的字符串,以避免重复处理。
  3. 创建一个变量来记录当前的步数,初始为 0。
  4. 进行 BFS:
    a. 当队列不为空且步数小于等于 10 时,执行以下操作:
    b. 获取当前队列的大小(当前层的节点数)。
    c. 对当前层的每个节点进行处理:
    • 如果当前字符串等于目标字符串 B,返回当前步数。
    • 否则,尝试应用每个变换规则:
      • 找到可以应用规则的所有位置。
      • 对每个位置,生成新的字符串。
      • 如果新字符串没有被访问过,将其加入队列和已访问集合。
        d. 当前层处理完毕后,步数加 1。
  5. 如果 BFS 结束仍未找到目标字符串 B,输出 “NO ANSWER!”。

这种方法的优点是:

  1. 它保证能找到最少的步骤数(如果存在的话)。
  2. 它能有效地避免重复状态,提高效率。
  3. 它能在到达 10 步时及时停止,避免不必要的计算。

实现这个算法时,我们需要注意以下几点:

  1. 使用 C++ 的 string 类来方便地处理字符串。
  2. 使用 unordered_set 来快速检查字符串是否被访问过。
  3. 使用 queue 来实现 BFS。
#include <iostream>
#include <string>
#include <queue>
#include <unordered_set>
#include <vector>
using namespace std;struct Rule {string from, to;
};int bfs(const string& start, const string& target, const vector<Rule>& rules) {queue<string> q;unordered_set<string> visited;q.push(start);visited.insert(start);int steps = 0;while (!q.empty() && steps <= 10) {int size = q.size();for (int i = 0; i < size; i++) {string current = q.front();q.pop();if (current == target) {return steps;}for (const Rule& rule : rules) {size_t pos = 0;while ((pos = current.find(rule.from, pos)) != string::npos) {string next = current;next.replace(pos, rule.from.length(), rule.to);if (visited.find(next) == visited.end()) {q.push(next);visited.insert(next);}pos += rule.from.length();}}}steps++;}return -1;  // No solution found within 10 steps
}int main() {string A, B;cin >> A >> B;vector<Rule> rules;string from, to;while (cin >> from >> to) {rules.push_back({from, to});}int result = bfs(A, B, rules);if (result != -1) {cout << result << endl;} else {cout << "NO ANSWER!" << endl;}return 0;
}

这个实现使用了上述描述的 BFS 方法。它的主要组成部分是:

  1. Rule 结构体用于存储变换规则。
  2. bfs 函数实现了广度优先搜索算法。
  3. main 函数中,我们读取输入并调用 bfs 函数。

这个解决方案应该能够有效地解决给定的问题。它会找到最少的变换步骤(如果存在的话),或者在无法在 10 步内完成变换时输出 “NO ANSWER!”。

需要注意的是,这个解决方案的时间复杂度可能在最坏情况下相当高,特别是当有很多可能的变换时。然而,考虑到问题的约束(最多 10 步,字符串长度不超过 20),这个解决方案应该能够在合理的时间内处理大多数情况。

http://www.qdjiajiao.com/news/12785.html

相关文章:

  • wordpress词 条主题免费关键词优化工具
  • 东莞一站式网站推广运营百度seo排名在线点击器
  • 国家工程建设标准化协会网站百度招商客服电话
  • 搭建网站需要做什么最新热搜新闻
  • 怎么下载自己做的网站微信广告推广平台
  • 开封做网站睿艺美哈尔滨新闻头条今日新闻
  • 高端企业网站建设蓦然郑州网站建设网页模板免费下载网站
  • 学做网站开发优化网站推广
  • 给人做ppt的网站网站seo优化工具
  • 苏州企业网站建设电工培训学校
  • 网站建设600分站优缺点南宁网站建设服务公司
  • 网站开发用px还是rem友情链接适用网站
  • 做时时彩网站牌照申请抖音营销推广怎么做
  • 搭建网站属于什么专业网站怎么优化搜索
  • 东莞网站建设效果好最近国际新闻
  • 最好大连网站建设杭州推广系统
  • 学做川菜的网站最佳搜索引擎
  • 全景网站开发网络广告营销的特点
  • 企业网站开发douyanet广州最新发布最新
  • 有什么网站可以做浏览单今日新闻播报
  • 辽宁省品牌建设促进会网站廊坊seo优化排名
  • 5万左右的新能源电动汽车网站推广优化排名教程
  • 济南网站建设铭盛信息江门搜狗网站推广优化
  • wordpress url路由志鸿优化网官网
  • 如何根据仿站做网站百度指数排名
  • 深圳wap网站建设进入百度网首页
  • 交警网站建设整改互联网营销的方式有哪些
  • 怎么开店铺seo词库排行
  • 手机网站是怎么制作的网络营销的策略包括
  • wordpress手机网站怎么做广告最多的网站