CF-196 D.The Next Good String(hash)

题目链接

题意

给一个数字ddd和字符串sss,求字符串ttt满足:

  1. sss和ttt等长
  2. ttt的字典序大于sss且尽可能小
  3. ttt中不包含长度≥d\ge d≥d的回文串

思路

不包括长度≥d\ge d≥d的回文串,只需检查是否包含长度为ddd和d+1d+1d+1的回文串

回文串可以用hash来判断

首先求出最小的字典序,然后从前往后检查是否包含ddd和d+1d+1d+1的回文串,贪心修改每个字符串

#include <bits/stdc++.h>
#define ull unsigned long long
const int maxn = 4e5 + 5;
using namespace std;
int d, len;
char s[maxn], t[maxn];
ull hash_l[maxn], hash_r[maxn], p[maxn], base = 131;
ull get_l(int x, int y) {return hash_l[x] - hash_l[x-y] * p[y+1];
}
ull get_r(int x, int y) {return hash_r[x] - hash_r[x-y];
}
int check(int x) {if (x >= d && get_l(x, d)*p[x-d+1] == get_r(x, d)) {return 1;}if (x > d && get_l(x, d+1)*p[x-d] == get_r(x, d+1)) return 1; return 0;
}
int dfs(int x, int sta) {if (x > len) {return 1;}char c = sta ? s[x] : 'a';for (char i = c; i <= 'z'; ++i) {t[x] = i;hash_l[x] = hash_l[x-1] * base + (i-'a'+1);hash_r[x] = hash_r[x-1] + p[x] * (i-'a'+1);if (check(x)) continue;if (dfs(x+1, sta && t[x] == s[x])) return 1;}return 0;
}
int main() {cin >> d >> s+1;len = strlen(s+1);for (int i = len; i >= 1; --i) {if (s[i] == 'z') s[i] = 'a';else {s[i]++;break;}if (i == 1) {cout << "Impossible\n";return 0;}}p[1] = 1;for (int i = 2; i <= len; ++i) p[i] = p[i-1] * base;if (dfs(1, 1)) cout << t+1 << endl;else cout << "Impossible\n";return 0;
}

CF-196 D.The Next Good String(hash)相关推荐

  1. redis 数据操作命令汇总(string hash list set zset)

    1.string     字符串型 set name  zhangsan   #  设置name(key) 为zhangsan(value) get name              #获取key的 ...

  2. java string hash变量_java基础(六)-----String性质深入解析

    本文将讲解String的几个性质. 一.String的不可变性 对于初学者来说,很容易误认为String对象是可以改变的,特别是+链接时,对象似乎真的改变了.然而,String对象一经创建就不可以修改 ...

  3. redis分布式缓存应用—五大数据类型:key/String/Hash/List/Set/Zset,配置文件redis.conf解析

    1.redis键key 1.keykeys *:查看当前key列exists key的名字,判断某个key是否存在move key db --->当前库就没有了,被移除了expire key 秒 ...

  4. java string hash变量_聊聊 Java 中 HashMap 初始化的另一种方式

    如果你接触过不同的语言,从语法和代码层面来说,Java 是一种不折不扣的"臃肿.啰嗦"的语言,从另一方面来说这种臃肿和啰嗦也体现了它严谨的一面,作为适合构建大型.复杂项目的理由之一 ...

  5. Redis之java操作(String/hash/set)

    目录 一.准备工作 运行虚拟机.mobaXtrem,Redis开启 二.Spring整合redis Redis字符串(String) Redis哈希(Hash) Redis列表(List) Redis ...

  6. 字符串哈希函数(String Hash Functions)

    哈希函数举例 http://www.cse.yorku.ca/~oz/hash.html Node.js使用的哈希函数 https://www.npmjs.org/package/string-has ...

  7. hdu 6599 I Love Palindrome String hash+PAM

    题意 给一个字符串,让我们找每个长度的子串中,是super串的个数.(类似双倍回文) 分析 我们对原串建立一个PAM,这样我们可以统计每种回文串出现次数,在用hash判断是不是super串 最后在统计 ...

  8. Redis五大数据类型String、Hash、List、Set、ZSet

    目录 String Hash List Set ZSet String String类型是Redis最基本的数据类型一个键最大能存储512MB set key value,set用于给key设定值,如 ...

  9. [转]加盐hash保存密码的正确方式

    本文转自:http://drops.wooyun.org/papers/1066 0x00 背景 大多数的web开发者都会遇到设计用户账号系统的需求.账号系统最重要的一个方面就是如何保护用户的密码.一 ...

最新文章

  1. 市值破万亿美金的苹果 近年在AI上搞了些新动作
  2. hdu2870暴力或者dp优化
  3. python opencv图片旋转180度_Python opencv图像镜像翻转
  4. 总奖金近9万!视频超分辨率大赛等你来战!
  5. SSM实现定时任务的两种方式
  6. mac恢复iphone_免费下载:旧Mac和iPhone壁纸的令人震惊的完整档案
  7. 【Python基础入门系列】第05天:Python函数
  8. 记录 Linux crontab 的使用
  9. 数据分析师想收入翻倍,不懂点时间管理怎么行
  10. 【连载】如何掌握openGauss数据库核心技术?秘诀五:拿捏数据库安全(4)
  11. Hexo 入门指南(一) - 简介 准备
  12. vuex中store存储store.commit和store.dispatch的区别及用法
  13. 基于BC95之AT命令的学习
  14. 计算机发展史的第五个阶段,信息技术的发展历程是怎样的? 信息技术的发展历程分五个阶段...
  15. 阿里云如何给c盘扩容
  16. macbook pro2020无法识别西部数据2T硬盘
  17. (一)基于知识图谱的医疗问答系统(实例+代码理解)保姆级教程
  18. ArcGIS基础学习:数据类型
  19. 增强现实与虚拟现实_增强现实相关的法律问题
  20. Casbin 账号密码泄漏漏洞

热门文章

  1. 1.常用字符对象方法
  2. python 数据结构-字典
  3. C++中实现 time_t, tm 相互转换
  4. PHP-代码审计-身份认证
  5. oracle表格颜色,如何在oracle中使用光标更新特定颜色
  6. [Python图像处理] 十三.基于灰度三维图的图像顶帽运算和黑帽运算
  7. 【数据结构与算法】之深入解析“两两交换链表中的节点”的求解思路与算法示例
  8. SwiftUI之深入解析如何实现3D Scroll效果
  9. Python执行 SQL 命令并实时打印输出
  10. POJ 2965.The Pilots Brothers‘ refrigerator