博客
关于我
CSU 1353: Guessing the Number(字符串周期问题+字符串最小表示法)
阅读量:607 次
发布时间:2019-03-12

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

步骤说明:

  • 读取输入:先读取测试用例的数量T和每个字符串s。
  • 处理每个字符串s:
    • 检查s是否全由零组成。如果是,直接输出"1" + s。
    • 否则,计算前缀函数数组next,以找出s的周期性。
  • 确定最大周期k:通过前缀函数,找到最长能循环重复的子串长度。
  • 计算字串缩减后的长度:利用预先计算的前缀函数信息,缩减字符串到最小可能长度。
  • 生成候选x:根据计算结果,构造最小的x,并输出。
  • 现在,让我们逐步解释每一步如何实现:

    • 读取输入:使用scanf函数逐个读取测试用例,处理每个字符串。
    • 全零检查:遍历字符串,检查是否全部为零。如果是,直接返回"1" + 原字符串。
    • 前缀函数计算:这个函数通过动态规划计算出每个位置的最长前缀同时也是后缀。
    • 周期确定:找到字符串的最大周期k,即连续重复能够覆盖整体的最大可能长度。
    • 字符串缩减:根据前缀函数结果,将字符串缩减到最小形式,免于冗余。
    • 构造x:根据缩减后的字符串信息,输出最小的x。

    通过这种方法,每个测试用例都能够高效地计算出最小的x,满足题目要求。

    代码解释:

    #include 
    using namespace std;void get_next(char *t, int m, int next_) { int i = 1, j = 0; next_[0] = next_[1] = 0; while (i < m) { if (j == 0 || t[i] == t[j]) next_[++i] = ++j; else j = next_[j]; }}int getmin(int n) { int i = 1, j = 2, k = 0; while (i <= n && j <= n && k <= n) { if (c[i] == '0') i++; else if (c[j] == '0') j++; else if (i == j) j++; else if (c[i + k] == c[j + k]) k++; else if (c[i + k] > c[j + k]) i += k + (!k) k = 0; else j += k + (!k) k = 0; } return (i <= n) ? i : j;}int main() { int t; scanf("%d", &t); c[0] = '0'; while (t--) { scanf("%s", c + 1); int l = strlen(c + 1); bool flag = true; for (int i = 1; i <= l; i++) if (c[i] != '0') flag = false; if (flag) { printf("1%s\n", c + 1); continue; } get_next(c, l, next_); int k = next_[l]; while (k && c[l] != c[k]) k = next_[k]; l -= k; for (int i = l + 1; i <= l * 2; i++) c[i] = c[i - l]; int key = getmin(l); c[key + l] = '\0'; printf("%s\n", c + key); } return 0;}

    工作原理:

  • 读取输入:将输入字符串存储在数组c,并处理每个测试用例。
  • 检查是否有零:如果字符串全为零,直接输出1后接原字符串。
  • 前缀函数计算:get_next函数计算前缀函数数组next_,用于找出字符串的周期。
  • 确定最大周期:通过前缀函数找到最长周期k,缩减字符串到最大周期的长度。
  • 构造最小x:getmin函数用于生成最小的x,确保x的最小重复能够覆盖原字符串。
  • 输出结果:将x拼接到结果并打印,得到最小x。
  • 通过该方法,可以高效地处理每个测试用例,找到最小的x,满足题目要求。

    转载地址:http://wtlxz.baihongyu.com/

    你可能感兴趣的文章
    python系列【仅供参考】:python 远程rdp
    查看>>
    python基于flask搭建http服务(四)—— Docker容器化部署
    查看>>
    Python块键盘/鼠标输入
    查看>>
    python在使用HTMLTestRunner时,报告为空,错误提示<_io.TextIOWrapper name='<stderr>' mode='w' encoding='utf_8'>...
    查看>>
    python在gpu上运行_【python】python开启GPU加速
    查看>>
    Python在def函数中使用for循环
    查看>>
    Python在def函数中使用for循环
    查看>>
    Python在Conda环境中,但在Windows虚拟环境中没有激活
    查看>>
    python系列【仅供参考】:python pip 错误 ModuleNotFoundError: No module named pip._internal 解决办法
    查看>>
    python图像条状状噪声,使用PYTHON PIL从验证码图像中删除背景嘈杂的线条
    查看>>
    Python图像处理:从内存加载jpeg
    查看>>
    python固定后缀(名物化词汇)词频统计:抽取+统计+可视化
    查看>>
    python商品评论数据采集与分析可视化系统 Flask框架 requests爬虫 NLP情感分析 毕业设计 源码
    查看>>
    python商品数据分析可视化系统(带爬虫)京东销售数据分析 计算机毕业设计 源码下载
    查看>>
    python商品库存管理系统 django框架 商品网站 MySQL数据库 源码下载 计算机毕业设计
    查看>>
    Python哪个版本最稳定好用2023.10.19
    查看>>
    Python和黑客技术的渊源
    查看>>
    Python和RF编写接口自动化
    查看>>
    python和js哪个难_【Python】记一次学习,Python 与 js 在实现闭包时的差异
    查看>>
    python和java哪个更值得学——来自知乎高赞回答
    查看>>