CF-196 D.The Next Good String(hash)
CF-196 D.The Next Good String(hash)
题目链接
题意
给一个数字ddd和字符串sss,求字符串ttt满足:
- sss和ttt等长
- ttt的字典序大于sss且尽可能小
- 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)相关推荐
- redis 数据操作命令汇总(string hash list set zset)
1.string 字符串型 set name zhangsan # 设置name(key) 为zhangsan(value) get name #获取key的 ...
- java string hash变量_java基础(六)-----String性质深入解析
本文将讲解String的几个性质. 一.String的不可变性 对于初学者来说,很容易误认为String对象是可以改变的,特别是+链接时,对象似乎真的改变了.然而,String对象一经创建就不可以修改 ...
- redis分布式缓存应用—五大数据类型:key/String/Hash/List/Set/Zset,配置文件redis.conf解析
1.redis键key 1.keykeys *:查看当前key列exists key的名字,判断某个key是否存在move key db --->当前库就没有了,被移除了expire key 秒 ...
- java string hash变量_聊聊 Java 中 HashMap 初始化的另一种方式
如果你接触过不同的语言,从语法和代码层面来说,Java 是一种不折不扣的"臃肿.啰嗦"的语言,从另一方面来说这种臃肿和啰嗦也体现了它严谨的一面,作为适合构建大型.复杂项目的理由之一 ...
- Redis之java操作(String/hash/set)
目录 一.准备工作 运行虚拟机.mobaXtrem,Redis开启 二.Spring整合redis Redis字符串(String) Redis哈希(Hash) Redis列表(List) Redis ...
- 字符串哈希函数(String Hash Functions)
哈希函数举例 http://www.cse.yorku.ca/~oz/hash.html Node.js使用的哈希函数 https://www.npmjs.org/package/string-has ...
- hdu 6599 I Love Palindrome String hash+PAM
题意 给一个字符串,让我们找每个长度的子串中,是super串的个数.(类似双倍回文) 分析 我们对原串建立一个PAM,这样我们可以统计每种回文串出现次数,在用hash判断是不是super串 最后在统计 ...
- Redis五大数据类型String、Hash、List、Set、ZSet
目录 String Hash List Set ZSet String String类型是Redis最基本的数据类型一个键最大能存储512MB set key value,set用于给key设定值,如 ...
- [转]加盐hash保存密码的正确方式
本文转自:http://drops.wooyun.org/papers/1066 0x00 背景 大多数的web开发者都会遇到设计用户账号系统的需求.账号系统最重要的一个方面就是如何保护用户的密码.一 ...
最新文章
- 市值破万亿美金的苹果 近年在AI上搞了些新动作
- hdu2870暴力或者dp优化
- python opencv图片旋转180度_Python opencv图像镜像翻转
- 总奖金近9万!视频超分辨率大赛等你来战!
- SSM实现定时任务的两种方式
- mac恢复iphone_免费下载:旧Mac和iPhone壁纸的令人震惊的完整档案
- 【Python基础入门系列】第05天:Python函数
- 记录 Linux crontab 的使用
- 数据分析师想收入翻倍,不懂点时间管理怎么行
- 【连载】如何掌握openGauss数据库核心技术?秘诀五:拿捏数据库安全(4)
- Hexo 入门指南(一) - 简介 准备
- vuex中store存储store.commit和store.dispatch的区别及用法
- 基于BC95之AT命令的学习
- 计算机发展史的第五个阶段,信息技术的发展历程是怎样的? 信息技术的发展历程分五个阶段...
- 阿里云如何给c盘扩容
- macbook pro2020无法识别西部数据2T硬盘
- (一)基于知识图谱的医疗问答系统(实例+代码理解)保姆级教程
- ArcGIS基础学习:数据类型
- 增强现实与虚拟现实_增强现实相关的法律问题
- Casbin 账号密码泄漏漏洞
热门文章
- 1.常用字符对象方法
- python 数据结构-字典
- C++中实现 time_t, tm 相互转换
- PHP-代码审计-身份认证
- oracle表格颜色,如何在oracle中使用光标更新特定颜色
- [Python图像处理] 十三.基于灰度三维图的图像顶帽运算和黑帽运算
- 【数据结构与算法】之深入解析“两两交换链表中的节点”的求解思路与算法示例
- SwiftUI之深入解析如何实现3D Scroll效果
- Python执行 SQL 命令并实时打印输出
- POJ 2965.The Pilots Brothers‘ refrigerator