【Codeforces1109B_CF1109B】Sasha and One More Name(字符串)
题目:
我打的是 Div2 ,所以我看到的题号实际上是 1113D ……
考场上傻了没敢大力猜结论没做出来这道题,不幸掉分…… 1869->1849 嘤嘤嘤
翻译:
读书是萨沙的爱好之一。有一次,他读书时了解到一个不同寻常的角色。这个角色这样介绍自己:“我在不同的地方有不同的名字。在精灵中叫米斯兰迪尔;在小矮人中叫塔空;在被遗忘的西方,幼年的我叫欧络因;在南方叫因卡诺斯;在北方叫甘道夫;至于东方,我没有去过。”
那时,萨沙想,这个角色在东方被怎样称呼?在东方,所有的名字都是回文串。如果一个字符串从前向后读和从后向前读是完全相同的,那么它是一个回文串。例如,像 "kazak", "oo" 和 "r" 这样的字符串是回文串,而 "abb" 和 "ij" 不是。
萨沙相信这个英雄将因东方的一个神而得名。为了避免有两个相同的名字,东方人会做如下的事:他们把原本的名字写在一张纸上,然后把纸剪 \(k\) 次,得到 \(k+1\) 张写有原串的子串的纸。接着,把这些纸拼在一起得到一个新字符串。纸不能翻转,只能打乱。
通过这种方式,可以把字符串 f|de|abc|g 剪 \(3\) 次后得到 abcdefg (交换 f 和 abc )。以相同的裁剪方式无法得到字符串 cbadefg 。
更形式化地,萨沙想为给定的字符串 \(s\) 找一个最小的 \(k\) ,你可以把它剪成 \(k+1\) 个部分,再把它们拼成一个与 \(s\) 不同的新回文串。如果无解,输出 "Impossible"(不含引号)。
输入
第一行包含一个字符串 \(s(1\leq |s| \leq 5000)\) ——初始的名字,只包含小写拉丁字母。保证 \(s\) 是回文串。
输出
输出一个整数 \(k\) ——获得新名字所需裁剪次数的最小值,或 "Impossible"(不含引号)。
分析:
论大胆猜结论的重要性……
结论:无解的充要条件是 \(s\) 中对称轴任意一侧的所有字母均相同。如果有解,则解不超过 \(2\) 。
证明:
先看前半句。充分性显然(长度为偶数相当于所有字母都一样;长度为奇数相当于除了对称轴所有字母都一样,此时对称轴字母是唯一的肯定不能动。剩下所有字母都相同怎么排都是一样的啊qwq)。必要性考虑构造。如果有解,则一定存在一个长度不超过一半的前缀 \(pre\) 满足 \(pre\) 不是回文串。设与 \(pre\) 长度一致的后缀为 \(suf\) ,则在 \(pre\) 后和 \(suf\) 前各剪一刀,然后交换 \(pre\) 和 \(suf\) ,则一定是一个与原串不同的新回文串。因此一定有解,且解不超过 \(2\) 。
于是暴力 \(O(n^2)\) 判断一下能不能只剪一刀,也就是把一个前缀挪到后面得到合法的字符串即可。
代码:
#include <string>
#include <iostream>
using namespace std;
namespace zyt
{
string s;
bool check(const string s)
{
for (int i = 0; i < (s.size() >> 1); i++)
if (s[i] != s[0])
return true;
return false;
}
bool is_palindrome(const string s)
{
for (int i = 0; i < (s.size() >> 1); i++)
if (s[i] != s[s.size() - i - 1])
return false;
return true;
}
bool solve(const string s)
{
string t = s;
for (int i = 0; i < (s.size() >> 1); i++)
{
t = t.substr(1) + s[i];
if (t != s && is_palindrome(t))
return true;
}
return false;
}
int work()
{
ios::sync_with_stdio(false);
cin.tie(0);
cin >> s;
if (!check(s))
cout << "Impossible";
else if (solve(s))
cout << 1;
else
cout << 2;
return 0;
}
}
int main()
{
return zyt::work();
}
【Codeforces1109B_CF1109B】Sasha and One More Name(字符串)的更多相关文章
- Python高手之路【六】python基础之字符串格式化
Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...
- 测试一下StringBuffer和StringBuilder及字面常量拼接三种字符串的效率
之前一篇里写过字符串常用类的三种方式<java中的字符串相关知识整理>,只不过这个只是分析并不知道他们之间会有多大的区别,或者所谓的StringBuffer能提升多少拼接效率呢?为此写个简 ...
- java中的字符串相关知识整理
字符串为什么这么重要 写了多年java的开发应该对String不陌生,但是我却越发觉得它陌生.每学一门编程语言就会与字符串这个关键词打不少交道.看来它真的很重要. 字符串就是一系列的字符组合的串,如果 ...
- JavaScript 字符串实用常操纪要
JavaScript 字符串用于存储和处理文本.因此在编写 JS 代码之时她总如影随形,在你处理用户的输入数据的时候,在读取或设置 DOM 对象的属性时,在操作 Cookie 时,在转换各种不同 Da ...
- Java 字符串格式化详解
Java 字符串格式化详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 文中如有纰漏,欢迎大家留言指出. 在 Java 的 String 类中,可以使用 format() 方法 ...
- Redis的简单动态字符串实现
Redis 没有直接使用 C 语言传统的字符串表示(以空字符结尾的字符数组,以下简称 C 字符串), 而是自己构建了一种名为简单动态字符串(simple dynamic string,sds)的抽象类 ...
- ASP.NET加密和解密数据库连接字符串
大家知道,在应用程序中进行数据库操作需要连接字符串,而如果没有连接字符串,我们就无法在应用程序中完成检索数据,创建数据等一系列的数据库操作.当有人想要获取你程序中的数据库信息,他首先看到的可能会是We ...
- Javascript正则对象方法与字符串正则方法总结
正则对象 var reg = new Regexp('abc','gi') var reg = /abc/ig 正则方法 test方法(测试某个字符串是否匹配) var str = 'abc123'; ...
- 微信小程序中利用时间选择器和js无计算实现定时器(将字符串或秒数转换成倒计时)
转载注明出处 改成了一个单独的js文件,并修改代码增加了通用性,点击这里查看 今天写小程序,有一个需求就是用户选择时间,然后我这边就要开始倒计时. 因为小程序的限制,所以直接选用时间选择器作为选择定时 ...
随机推荐
- CCF201703-2 学生排队 java(100分)
试题编号: 201703-2 试题名称: 学生排队 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 体育老师小明要将自己班上的学生按顺序排队.他首先让学生按学号从小到大的顺序排 ...
- ubuntu 下安装wine
PPA地址: https://launchpad.net/~ubuntu-wine/+archive/ppa 添加wine的ppa源 sudo add-apt-repository ppa:ubunt ...
- 武大OJ 574. K-th smallest
Description Give you a number S of length n,you can choose a position and remove the number on it.Af ...
- Container/Injection 为什么会出现容器的思路,以后会有什么的趋势,未来是怎样的
一.为什么会出现容器的思路? 容器概念始于 1979 年提出的 UNIX chroot,它是一个 UNIX 操作系统的系统调用,将一个进程及其子进程的根目录改变到文件系统中的一个新位置,让这些进程只能 ...
- Hadoop2.0之YARN
YARN(Yet Another Resource Negotiator)是Hadoop2.0集群中负责资源管理和调度以及监控运行在它上面的各种应用,是hadoop2.0中的核心,它类似于一个分布式操 ...
- NETCore项目报错 An error occurred while starting the application
在发布到IIS的webApi项目中,运行时报出以上错误, 解决方法: 1.打开发布目录文件夹,找到web.config文件 2.打开web.config找到stdoutLogEnabled=" ...
- 从内核源代码配置文件预測泛泰新品(A920 ?)
泛泰的IRON2 A910刚公布不久, 但近期在最新的泛泰890的内核源代码的config文件中又看到了这种编号,例如以下图: 图上ef63s 明显是A910S. 但这ef65s 又是什么呢, 看到这 ...
- ViewPager + Handler 实现的图片自己主动轮播
首先上图看效果 我也是在网上看各种大牛们做的效果,非常多都是自己定义重写了一些控件来实现这个效果的. 我把当中的一位大牛写的ViewPager的效果加上了Handler实现了自己主动轮播效果.在此做个 ...
- Android高仿UC浏览器和360手机卫士消息常驻栏(通知栏)
之前网上看了下自己定义消息栏,通知栏,了解到了Notification这个控件.发现UC浏览器等都是这样的类型,今天写个demo实现下.如图: 当中每一个button都有不同的功能.代码例如以下: p ...
- 【EasyUi DataGrid】批量删除
DataGrid是我们做网页经常使用到的组件之中的一个,对它的操作也无非是增删改查操作.单条数据的增删改相对来说比較简单.添加.改动能够直接在DataGrid中进行,也能够用弹出框的形式把数据装载在文 ...