HackerRank beautiful string
问题
https://vjudge.net/problem/HackerRank-beautiful-string
给一个字符串S,可以任意取走S中的两个字符从而得到另外一个字符串P,求有多少种不同的P
\(\left|S\right|\le10^6\)
题解

计算出长度大于等于2的组数设为y
\[ans = \left( \begin{array}{l}x\\2\end{array} \right) + y\]
时间复杂度$O(n)$
这样当然WA了
因为没有考虑是否存在两种移除(单个)字母的方法使结果相同。:(
以下考虑粗体的字母,且每种情况中xxxxx都不会造成前面情况
1.容易得aba,移除前两个字母和移除后两个字母效果相同。
2.容易得abc,(a$\ne$b,b$\ne$c,a$\ne$c),任意移除两个都不会得到相同的P
3.容易得abxxxxxc(a$\ne$b,|xxxxx|>0)和axxxxxbc(b$\ne$c,|xxxxx|>0),任意移除两个都不会得到相同的P
4.容易得axxxxxbxxxxxc,无论a,b,c相同还是不同,任意移除两个都不会得到相同的P
5.字符串A $\ne$ B,那么xxxxxAxxxxx$\ne$xxxxxBxxxxx
所以移除单个字母只会因为第一种情况造成重复

多个aba重复可以减去后面的情况,因此我们可以直接减去aba出现的次数
AC代码
#include <bits/stdc++.h>
#define REP(i,x,y) for(register int i=x; i<y; i++)
#ifdef LOCAL
#define DBG(x,...) printf(x, ##__VA_ARGS__)
#else
#define DBG(x,...) (void)(0)
#endif
using namespace std;
char S[1000007];
inline void gs(int &p) {
p=0;
while((S[p++]=getchar())>' ');
S[--p]=0;
}
int main()
{
int r;gs(r);
long long x=0,y=0;
char l=0,cn=1;
REP(i,0,r) {
if(S[i]!=l) {
x++;
if(cn>=2) y++;
cn=1;
} else {
cn++;
}
l=S[i];
}
if(cn>=2) y++,cn=1;
// DBG("%s %d %lld %lld\n", S, r, x, y);
long long ans= (x&1) ? (x-1)/2*x+y : x/2*(x-1)+y;
// long long t=0;
r--;
REP(i,1,r) {
if(S[i-1]==S[i+1] && S[i-1]!=S[i]) ans--;
}
printf("%lld\n", ans);
return 0;
}
HackerRank beautiful string的更多相关文章
- Codeforces Round #604 (Div. 2) A. Beautiful String
链接: https://codeforces.com/contest/1265/problem/A 题意: A string is called beautiful if no two consecu ...
- hiho一下:Beautiful String
hiho一下:Beautiful String 记不清这是 hiho一下第几周的题目了,题目不难,不过对于练习编程,训练思维很有帮助.况且当时笔者处于学习算法的早期, 所以也希望刚接触算法的同学能多去 ...
- CF1328B K-th Beautiful String
CF1328B K-th Beautiful String,然而CF今天却上不去了,这是洛谷的链接 题意 一个长度为\(n\)的字符串,有2个\(\texttt{b}\)和\(n-2\)个\(\tex ...
- hihocoder 1061.Beautiful String
题目链接:http://hihocoder.com/problemset/problem/1061 题目意思:给出一个不超过10MB长度的字符串,判断是否里面含有一个beautiful strings ...
- Codeforces Round #604 (Div. 2) A. Beautiful String(贪心)
题目链接:https://codeforces.com/contest/1265/problem/A 题意 给出一个由 a, b, c, ? 组成的字符串,将 ? 替换为 a, b, c 中的一个字母 ...
- B. Pasha and String
time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standa ...
- UESTC_Ferris Wheel String 2015 UESTC Training for Search Algorithm & String<Problem L>
L - Ferris Wheel String Time Limit: 3000/1000MS (Java/Others) Memory Limit: 43000/43000KB (Java/ ...
- Pasha and String(思维,技巧)
Pasha and String Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u S ...
- Nikita and string [思维-暴力] ACM
codeforces Nikita and string time limit per test 2 seconds memory limit per test 256 megabytes O ...
随机推荐
- 使用 OAuth2-Server-php 搭建 OAuth2 Server
Yii 有很多 extension 可以使用,在查看了 Yii 官网上提供的与 OAuth 相关的扩展后,发现了几个 OAuth2 的客户端扩展,但是并没有找到可以作为 OAuth2 Server 的 ...
- 【redis】1.redis-windows安装+配置介绍
1.下载windows版本redis 官方下载地址:http://redis.io/download,不过官方没有64位的Windows下的可执行程序,目前有个开源的托管在github上, 地址:ht ...
- 使用Filter过滤器+重写Request完美解决乱码问题
一:原理 1.对于Post方式提交的数据,我们可以通过直接设置request和response的编码方式来解决乱码问题:但是Get方式提交的数据,那么就需要编码再解码的方式解决乱码问题. 2.我们一般 ...
- zookeeper-如何修改源码-《每日五分钟搞定大数据》
本篇文章仅仅是起一个抛砖迎玉的作用,举一个如何修改源码的例子.文章的灵感来自 ZOOKEEPER-2784. 提一个问题先 之前的文章讲过zxid的设计,我们先复习下: zxid有64位,分成两部分: ...
- Cat8 八类网线是什么?与Cat5、Cat6、Cat7网线的区别?
若您身处于网络通信行业,相信您应该了解一些以太网线缆,比如说超五类网线.六类网线和七类网线等等.但是您知道Cat8 八类网线 是什么吗?它与五类网线.六类/超六类网线及七类/超七类网线有着怎么样的区别 ...
- H5 17-兄弟选择器
17-兄弟选择器 我是标题 我是超链接 我是段落 我是段落 我是段落 我是标题 我是段落 我是段落 我是段落 --> 我是标题 我是超链接 我是段落 我是段落 我是超链接 我是段落 我是标题 我 ...
- java 抽象
MotoVehicle抽象类 package text1; /* * 抽象 */ public abstract class MotoVehicle { // 共同的属性 private String ...
- 深度学习之概述(Overview)
2016年被称为人工智能的元年,2017年是人能智能应用的元年:深度学习技术和应用取得飞速发展:深度学习在互联网教育场景也得到广泛应用.本文主要介绍机器学习及深度学习之定义及基本概念.相关网络结构等. ...
- c++之sizeof的用法
在此温习一下c语言中sizeof的用法以及c++11.0的标准中,关于初始化的新方式,先上代码: # include "iostream" # include "stri ...
- SoftWater——SDN+UnderWater系列论文一
---- SoftWater: Software-defined networking for next-generation underwater communication systems 来源: ...