HackerRank - string-reduction【反推】

题意

给出一串 只有 字母 a, b, c 组成的字符串,然后没两个不同的字符碰到一起都可以变成另外一个字符,然后变到最后,求最短的字符串长度。

思路

①如果给出的字符串都是相同的字符,那么显然,答案就是这个字符串的长度

②如果不是 那么答案 可能是1 或者是 2

③我们可以反着推回去。就是假如 刚开始的状态的1

我们可以先假定 x = 字符a的数量 y = 字符b的数量 z = 字符c的数量

如果某个字符串 是由 1 推过去的

那么刚开始 x, y, z的数量就是 (1, 0, 0) || (0, 1, 0) || (0, 0, 1)

其奇偶状态就是 奇,偶,偶,

如果一个字符变成连个字符

其奇偶状态就变为 偶,奇,奇

如果继续变

其奇偶状态就变为 奇,偶,偶

所以 如果答案是1 那么 奇偶状态就是 两奇一偶 或者 一奇两偶

如果某个字符串是由 2 推过去的

刚开始的奇偶状态是 偶,偶,偶

如果减少一个字符,加另外两个字符

其奇偶状态就变成 奇,奇,奇

所以 我们可以得出,如果 一个字符串的奇偶状态是

全奇 或者 全偶

那么最后的答案 就是2

如果是其他情况

最后的答案 就是1

AC代码

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <deque>
#include <vector>
#include <queue>
#include <string>
#include <cstring>
#include <map>
#include <stack>
#include <set>
#include <cstdlib>
#include <ctype.h>
#include <numeric>
#include <sstream>
using namespace std; typedef long long LL;
const double PI = 3.14159265358979323846264338327;
const double E = 2.718281828459;
const double eps = 1e-6;
const int MAXN = 0x3f3f3f3f;
const int MINN = 0xc0c0c0c0;
const int maxn = 1e5 + 5;
const int MOD = 1e9 + 7; int main()
{
int t;
cin >> t;
while (t--)
{
string s;
cin >> s;
int n[3] = {0};
int len = s.size();
for (int i = 0; i < len; i++)
{
n[s[i] - 'a'] ++;
}
if (n[0] == len || n[1] == len || n[2] == len)
{
cout << len << endl;
}
else if((n[0] % 2 == 1 && n[1] % 2 == 1 && n[2] % 2 == 1) || (n[0] % 2 == 0 && n[1] % 2 == 0 && n[2] % 2 == 0))
cout << 2 << endl;
else
cout << 1 << endl;
}
}

HackerRank - string-reduction【反推】【规律】的更多相关文章

  1. dwr2反推

    package services; import org.directwebremoting.Browser; import org.directwebremoting.ScriptSessions; ...

  2. Anipang2反推文档

    此文档主要用于一个开发同学尝试学习描述一个产品的基本设计.也许工程师都应该有类似能力. 反推的基础,目前是自己玩过的一些关卡和youtube上的一些关卡通关视频,主要是前120关.(120关后面应该是 ...

  3. base64随机字符混淆加密、解密-美拍视频地址解密,反推加密算法

    用火车头测试采集美拍的数据时无意中发现美拍的视频地址是一段加了混淆字符串的base64代码.如下图 于是好奇之下研究了下解密算法.具体过程省略800字.发现美拍的视频解密是通过js完成,于是找到了具体 ...

  4. Atitit.通过null 参数 反射  动态反推方法调用

    Atitit.通过null 参数 反射  动态反推方法调用 此时,直接使用java  apache的ref工具都失效了.必须要自己实现了. 如果调用接口方法的话,就不能使用apache的ref工具,可 ...

  5. C# 获取pdf长宽,反推pdf图纸类型

    业务需求:读取pdf每页的长宽,然后根据国际标准,反推出pdf图纸类型 第一步:下载类库,并引入到项目中 链接:https://pan.baidu.com/s/1ud4-xhfDvi9OKolEBPw ...

  6. FOJ 1402(dp推规律)

    推规律吧 /** 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ...

  7. flask中重定向所涉及的反推:由视图函数反推url

    flask中重定向所涉及的反推:由视图函数反推url 例如有视图index() 反推 url的/default # -*- coding: utf-8 -*- from flask import Fl ...

  8. String reduction (poj 3401

    String reduction Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 1360   Accepted: 447 D ...

  9. 1day漏洞反推技巧实战(1)

    学习笔记里的存货(1) 以前看了一篇推特老外做赏金猎人的文章,感触有点深,作者没有写相关漏洞分析,只是说了自己挖了多少个漏洞,这里简单的分析下: 1day漏洞在很多时候至关重要,不管是在红蓝对抗,还是 ...

随机推荐

  1. windows-redis 集群搭建

    Windows 配置Reids集群 Redis Cluster 1. 下载安装Redis Redis官方不支持Windows,但是Microsoft Open Tech group在 GitHub上开 ...

  2. [Django] 问题记录追踪表

    关注的网站: https://simpleisbetterthancomplex.com/ Linux部署 1. Ubuntu下vsftpd安装部署 2. Utuntu下Django+Apache+W ...

  3. mysql DBA 指南

    Mysql目录 数据库介绍.常见分类 Mysql入门 Mysql安装配置 Mysql多实例安装配置 Mysql常用基本命令 Mysql权限体系 Mysql数据库备份和恢复 Mysql日志 Mysql逻 ...

  4. 【PyQt】分析承载界面

    承载界面: # coding=utf-8 import sys from PyQt4.QtCore import * from PyQt4.QtGui import * import class_da ...

  5. 基于Jquery的实现回车键Enter切换焦点

    系统默认情况下,使用Tab按键切换页面元素的焦点,有没有想过回车键Enter也可以实现这种功能,并且具有良好的用户体验. 接下来我们使用Jquery实现回车键Enter切换焦点,此代码在常用浏览器IE ...

  6. 手动编译svn

    #!/bin/bash yum -y remove subversionmkdir -p /dist/{dist,src}cd /dist/dist/bin/rm -f openssl* subver ...

  7. TypeScript 基本类型(一)

    1.boolean 布尔值 true/false let isDone: boolean = false; 2.number 数字:和JavaScript 一样,TypeScript 里的所有数字都是 ...

  8. Windows平台安装最新OpenCV-2.4.9,利用Eclipse、MinGW构建C++调用OpenCV开发环境

    近期电脑重装系统了,第一件事重装OpenCV. 这次直接装最新版,2014-4-25日公布的OpenCV2.4.9版本号,下载链接: http://sourceforge.net/projects/o ...

  9. 一个Demo展示Storyboard的强大

    本文转载至http://www.cocoachina.com/ios/20150330/11440.html 今天我通过完成一个长按cell删除的Demo,向你们展示熟练运用storyboard和Au ...

  10. 67、Fragment实现Tab

    <LinearLayout .......... <FrameLayout android:id="@+id/id_content" android:layout_wi ...