#include<bits/stdc++.h>
const int maxn=1e8;//考虑到main外的定义数组需要用常数所以const
const int mod=1e9+7;
using namespace std;
char ch[maxn];
int J,a,y; //表示除了连续Jay以外,剩下三个对应的数量
int Jay;  // 表示连续Jay的数量int main(){scanf("%s",ch);for(int i=0;i<strlen(ch);i++){if(i<strlen(ch)-2){if(ch[i]=='J'&&ch[i+1]=='a'&&ch[i+2]=='y'){  // 如果找到连续的Jay,那么只保存到Jay,而不会再分别单独保存。Jay++;i+=2;continue;}}if(ch[i]=='J')    J++;else if(ch[i]=='a')    a++;else if(ch[i]=='y')    y++;}int ans=0;ans=min({J,a,y});if(ans==0&&Jay>0){Jay--;ans++;}for(int i=1;i<=Jay;i++){ans=2*ans%mod;//ATTENTION取模1e9+7操作}cout<<ans<<endl;
}

题目描述

窗外的麻雀,在电线杆上多嘴。你说这一句,很有夏天的感觉。

作为Jay的小迷弟,LakerV非常想去Jay的演唱会。

有一天,他意外地发现他买的《周杰伦的床边故事》上出现了一行神秘的字符串,并且这本书给了他一个神奇的魔法。

现在,只要他能得到最多的”Jay”的碎片数量,他就能获得Jay演唱会的门票了。但兴奋的他现在正在打包行李,无暇考虑如何得到最多的”Jay”的碎片数量,请聪明的你告诉他该怎么做。

“Jay”碎片拼凑的规则:

如果原字符串中有’J’,’a’,’y’这三个字符,那么LakerV可以用它们得到一个“Jay”的碎片。

魔法使用方法:

如果原字符串中的有一个未被使用过的且连续的“Jay”字符串,那么LakerV可以用它们对当前手上“Jay”的碎片数量*2。

输入描述:

输入一行字符串(字符串长度不超过108)(字符串不包含空格)(保证所有字符均为小写或大写字母)

输出描述:

输出一行整数,表示LakerV能获得的最多的“Jay”碎片的数量

示例1

输入

JayyaJ

JayyaJ

输出

2

2

说明

字符串总共有2个'J',2个'a',2个‘y'字符。最终LakerV手上有2个Jay碎片

示例2

输入

JayJayyaJ

JayJayyaJ

输出

4

说明

最后三个字符yaJ有'y','a',J'三个字符,可以组成一个Jay碎片。现在LakerV手上有一个Jay碎片。前面有两个连续的Jay字符串,所以LakerV可以两次对手上的Jay碎片数量*2。最终LakerV手上有1*2*2=4个Jay碎片。

示例3

输入

JayJ

JayJ

输出

1

说明

前面有三个字符'J','a','y'可以组成一个Jay碎片。最终LakerV手上有1个Jay碎片

备注:


1.魔法可以使用无限次

2.由于数可能非常大,所以需要对结果取模1e9+7

3.一开始LakerV手上”Jay”碎片的数量为0

4.未被使用过的且连续的“Jay”字符串如果用于魔法,那么该连续的“Jay”字符将不能用于得到一个“Jay”的碎片。

小知识点&人家的解法:

1、当使用scanf读入string时,需要这样:
string ch;
ch.resize(N);
scanf("%s",&ch[0]);
2、若要得出string类型的大小:
ch.length();
3、用char[]数组要比string快一些。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod = 1e9+7;
const ll N = 1e8+10;
char ch[N];
ll fpow(ll a,ll b){a%=mod;ll res = 1;while(b){if(b&1)res=res*a%mod;a=a*a%mod;b>>=1;}return res;}//快速幂
int main()
{scanf("%s",ch);//用scanf读取字符串的方式!ll sum = 0,a = 0,b = 0,c = 0;for (int i = 0; i <strlen(ch); i++){if(ch[i]=='J'&&ch[i+1]=='a'&&ch[i+2]=='y'&&i<strlen(ch)-2) sum++;//连着的Jayif(ch[i]=='J')   a++;else if(ch[i]=='a')   b++;else if(ch[i]=='y')   c++;}ll total = min(min(a,b),c);//Jay总数ll sub = total-sum;//非连着的if(total==0)  {printf("0");return 0;}//如果Jay为0else if(total==1)    {printf("1");return 0;}//如果Jay为1else if(sum==0) {printf("%lld",total);return 0;}//如果没有连着的Jayelse{if(sub==0)  sub = fpow(2,sum-1);//如果Jay全是连着的,那么sub就等于0了,需要特判else    sub = sub*fpow(2,sum)%mod;//一般情况,别忘了再对mod取余!}printf("%lld",sub);return 0;
}

Jay的小迷弟-字符串溢出处理取模例题相关推荐

  1. 那个马斯克的小迷弟开始讲深度学习了,课程视频+PPT已放出

    晓查 发自 凹非寺  量子位 出品 | 公众号 QbitAI 还记得那个MIT的AI科学家Lex Fridman吗?去年量子位曾经报道过,他用图像识别检测驾驶员行为,防止司机分神. 在Twitter上 ...

  2. java小迷弟_论身边有个小迷弟是什么感觉?

    话说,本"文学巨匠"(小迷弟起的,不要打我,要打他挨着(ಡωಡ)hiahiahia)在前天的发文打卡时,一直不着边际的断句,断句,再断句,竟扬扬洒洒的写了一个可爱的数字,二百五十字 ...

  3. 实锤了,尤大妥妥的二次元迷弟 —— 聊聊 Vue 的进化历程

    文章目录 实锤了,尤大妥妥的二次元迷弟 -- 聊聊 Vue 的进化历程 1. 前言 2. 库阶段 2.1 阶段发展 2.2 设计重点和特征 3. 框架阶段 3.1 阶段发展 3.2 设计重点 4. 通 ...

  4. 微信小程序业务-字符串生成二维码(weapp-qrcode)

    微信小程序业务-字符串生成二维码(weapp-qrcode) 前言 邂逅weapp-qrcode 基本使用 详细参数 小程序组件中使用 image属性详解 想使用网络图片? 参考地址 前言 在小程序项 ...

  5. CSU2020期中测试模拟题1 问题E:小帅的字符串

    问题 E: 小帅的字符串 题目描述 小帅有一个字符串,但是他接到一个老师的任务 1.如果字符串中的字符为大写字母,则转换为小写字母 2.如果字符串中的字符为小写字母,则直接输出 3.如果字符串中的字符 ...

  6. 《C语言进阶》小乐乐与字符串问题求解

    目录 1.问题描述 2.问题求解 1.问题描述 描述 在庆祝祖国母亲70华诞之际,老师给小乐乐出了一个问题.大家都知道China的英文缩写是CHN,那么给你一个字符串s,你需要做的是统计s中子串&qu ...

  7. 赛码网: 小明很喜欢打字,今天小红给了小明一个字符串。

    题目 时间限制: 3000MS 内存限制: 589824KB 题目描述: 小明很喜欢打字,今天小红给了小明一个字符串. 这个字符串只包含大写和小写字母. 我们知道,按下CapsLock键,可以切换大小 ...

  8. 微信小程序JS字符串操作方法汇总

    微信小程序JS字符串操作方法汇总 JS对字符串进行切割截取 1.函数:split() 功能:使用一个指定的分隔符把一个字符串分割存储到数组 例子: str="jpg|bmp|gif|ico| ...

  9. 小程序——切割字符串

    小程序--切割字符串 做完项目整理了下小程序的字符串切割的常见几种方法 JS对字符串进行切割截取 1.函数:split() 功能:使用一个指定的分隔符把一个字符串分割存储到数组 例子: str=&qu ...

  10. 微信小程序JS字符串操作方法汇总,包含切割截取split,合并字符串join,连接字符串concat,返回指定字符串charAt,提取字符串substring等

    微信小程序JS字符串操作方法汇总 JS对字符串进行切割截取 1.函数:split() 功能:使用一个指定的分隔符把一个字符串分割存储到数组 例子: str="jpg|bmp|gif|ico| ...

最新文章

  1. 策略梯度搜索:不使用搜索树的在线规划和专家迭代 | 技术头条
  2. 让我为你介绍一个神器:Chimee,一套可扩展的 H5 视频播放器解决方案
  3. 4.状态间的六种转换情况
  4. python上的数据库sqlite3——插入多行数据
  5. 带通 带阻滤波器 幅频响应_二阶有源带通滤波器设计
  6. mvc:default-servlet-handler标签的作用
  7. 【PMP】项目风险管理~重点知识
  8. linux mkdir绝对路径,linux学习(六)绝对路径、相对路径、cd、mkdir、rmdir、rm(示例代码)...
  9. JAVA对象集合转化为xml转换_xml转为Map集合以及对象转化为xml
  10. python程序在线更新_Python自动更新功能
  11. 3Eclipse的下载、安装、配置
  12. UOS应用商店deb打包的正确目录结构
  13. 服务器全息显示修改,全息显示
  14. uos系统安装教程_统一操作系统UOS下载&安装图文教程:尝鲜记(一)
  15. nginx中upstream的max_conns属性使用
  16. 电容滤波器和电感滤波器详解(工作原理,设计详解,典型电路图)
  17. FIFO读写时序理解——almost_empty、almost_full
  18. 洛谷刷题C语言:CRNE、CETIRI、PRASE
  19. 2021.8-机器学习地震信号去噪和到时识取环境配置
  20. 输了腾讯赢了阿里:凭借27天超强度复习Java核心知识+面试神技,三面阿里斩获P6岗offer(飞猪事业部)

热门文章

  1. Node.jsv12.0 https请求报错
  2. 入门人工智能历程,学习西瓜书的体验心得
  3. 2007版本中国网络新秀之七剑下天山
  4. PAT乙级 1072 开学寄语
  5. mysql 数据汇总与分组
  6. 如何使用云桌面系统提高涉密网络安全性与方便性
  7. Cookie.js 源码解析
  8. Android解析软件包时出现问题
  9. 利用windows网络诊断功能修复网络能连接但无Internet
  10. 架构图解_图解 Docker 架构