问题

https://vjudge.net/problem/HackerRank-beautiful-string

给一个字符串S,可以任意取走S中的两个字符从而得到另外一个字符串P,求有多少种不同的P

\(\left|S\right|\le10^6\)

题解

想到组合数
将连续的相同的字符分为1组,如字符串“aaabbbbaccca
则可以选两组中的两个字母或一组中的两个字母
计算出连续的组数设为x
计算出长度大于等于2的组数设为y
\[ans = \left( \begin{array}{l}x\\2\end{array} \right) + y\]
时间复杂度$O(n)$

这样当然WA了

因为没有考虑是否存在两种移除(单个)字母的方法使结果相同。:(

以下考虑粗体的字母,且每种情况中xxxxx都不会造成前面情况

1.容易得aba,移除前两个字母和移除后两个字母效果相同。

2.容易得abc,(a$\ne$bb$\ne$ca$\ne$c),任意移除两个都不会得到相同的P

3.容易得abxxxxxca$\ne$b,|xxxxx|>0)和axxxxxbcb$\ne$c,|xxxxx|>0),任意移除两个都不会得到相同的P

4.容易得axxxxxbxxxxxc,无论abc相同还是不同,任意移除两个都不会得到相同的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的更多相关文章

  1. Codeforces Round #604 (Div. 2) A. Beautiful String

    链接: https://codeforces.com/contest/1265/problem/A 题意: A string is called beautiful if no two consecu ...

  2. hiho一下:Beautiful String

    hiho一下:Beautiful String 记不清这是 hiho一下第几周的题目了,题目不难,不过对于练习编程,训练思维很有帮助.况且当时笔者处于学习算法的早期, 所以也希望刚接触算法的同学能多去 ...

  3. CF1328B K-th Beautiful String

    CF1328B K-th Beautiful String,然而CF今天却上不去了,这是洛谷的链接 题意 一个长度为\(n\)的字符串,有2个\(\texttt{b}\)和\(n-2\)个\(\tex ...

  4. hihocoder 1061.Beautiful String

    题目链接:http://hihocoder.com/problemset/problem/1061 题目意思:给出一个不超过10MB长度的字符串,判断是否里面含有一个beautiful strings ...

  5. Codeforces Round #604 (Div. 2) A. Beautiful String(贪心)

    题目链接:https://codeforces.com/contest/1265/problem/A 题意 给出一个由 a, b, c, ? 组成的字符串,将 ? 替换为 a, b, c 中的一个字母 ...

  6. B. Pasha and String

    time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standa ...

  7. 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/ ...

  8. Pasha and String(思维,技巧)

    Pasha and String Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u S ...

  9. Nikita and string [思维-暴力] ACM

    codeforces Nikita and string time limit per test   2 seconds memory limit per test   256 megabytes O ...

随机推荐

  1. Win7 64位系统,IE11,如何让IE的Tab强制运行64位内核?

    有些人在使用TerraExplorer Pro 7版本进行web二次开发的时候,常会遇到下面截图中这样的问题, 这个问题主要是因为安装的TerraExplorer Pro 7 版本是64位的,而模型运 ...

  2. Feature Extractor[VGG]

    0. 背景 Karen Simonyan等人在2014年参加Imagenet挑战赛的时候提出的深度卷积神经网络.作者通过对2013年的ILSVRC中最好的深度神经网络模型(他们最初的对应模型都是ale ...

  3. UART、SPI和I2C详解

    做单片机开发时UART,SPI和I2C都是我们最经常使用到的硬件接口,我收集了相关的具体材料对这三种接口进行了详细的解释. UART UART是一种通用串行数据总线,用于异步通信.该总线双向通信,可以 ...

  4. Typescript 发布到npm

    https://blog.csdn.net/yiershan1314/article/details/79999726 https://cloud.tencent.com/developer/arti ...

  5. H5 27-优先级之important

    27-优先级之important 我是段落 <!DOCTYPE html> <html lang="en"> <head> <meta c ...

  6. Educational Codeforces Round 52 (Rated for Div. 2) -C

    #include<iostream> #include<stdio.h> #include<string.h> #include<algorithm> ...

  7. 1060E Sergey and Subway(思维题,dfs)

    题意:给出一颗树,现在,给哪些距离为2的点对,加上一条边,问所有点对的距离和 题解:如果没有加入新的边,距离和就会等于每条边的贡献,由于是树,我们用点来代表点上面的边,对于每条边,它的贡献将是(子树大 ...

  8. 【评分】BETA 版冲刺前准备

    [评分]BETA 版冲刺前准备 总结 本次作业较为简洁,计1分,按时提交计分,不提交不计分. 详细得分 组 短学号 名 分数 Boy Next Door 114 显东 1 Boy Next Door ...

  9. 实分析p78 两个解释

    1. 是为了存在一个充分大的J,使得,当j大于J.会满足.x是满足能一致收敛到f(x)自变量取得集合,, 是为了允许有限个 前面的不成立,是对所有的k都成立,让k取很大,可以很小 2.是函数列收敛到f ...

  10. linux中mariadb的安装

    在Linux中mariaDB的安装 MariaDB其实就是MySQL的分支,是为了应对MySQL的即将的闭源风险所产生的. Linux系统中软件包的格式为mysql.rpm格式. 通过yum去安装 L ...