题目大意:

/
t组数据,每组给你一个长为n的字符串,
字符串由T和M组成,问你是否存在TMT(不是严格的紧挨)
存在,如果由则输出YES 否者输出NO

/

先分析我的代码(改4.0之后的代码):

 int t;cin>>t;while(t -- ){int n ;cin>>n;int sum =0;getchar();int pos  = 0;int sum2 = 0;int sum1 = 0;

这里我先处理了一下最后一个M的位置,同时还记录了M的个数
这样子就可以判断M前面的T是否和M的数量一样了

for(int i=0; i<n; i++)
{scanf("%c",&s[i]);if(s[i]=='M'){pos = i;sum2++;}
}

这里又判断了最后一个M之后的所有T
(这里就开始出错了,因为如TTMTMT)

for(int i=pos; i<n; i++)
{if(s[i]=='T'){sum1++;///我这里判断了 最后一个M前面的T}
}
if(sum1!=sum2) 如果sum1!=sum2  这里其实就错了 最后一个M之后的T  和 之前的T相比cout<<"NO"<<endl;else{int ft = 0;int fb = 0;int st = 0;bool flag = true;for(int i=0; i<n; i++){if(s[i]=='T')ft++;  如果有T那么ft++if(s[i]=='M'){st++;如果有M st++ 其实这里都乱套了ft--;sum-=2;if(ft<0){cout<<"NO"<<endl;flag  =false;break;}}if(i==n-1&&s[i]=='M'&&ft){cout<<"NO"<<endl;flag  =false;break;}}if(flag){if(st!=ft)cout<<"NO"<<endl;elsecout<<"YES"<<endl;}}
}

我们来看正解

先考虑,其实每一个M前面的T的数量 只需要>sum(M) 就行
然后M后面如果有T 那么直接减就完了,这样子就保证了最近最优

#include <bits/stdc++.h>
using namespace std;
int main()
{int t;cin>>t;while(t--){int n ;string s;cin>>n;cin>>s;int t= 0,m=0,cnt = 0;bool flag  = true;int len  =s.size();for(int i=0;i<len;i++){if(s[i] =='T'){t++;if(cnt)cnt--;这样子就保证了 M基本都是和他最近的一个T 消除的同时也就保证了 T 是不会乱来 的}else{m++;cnt++;if(m>t)如果m大于了 m前面的T的个数flag =false;}}如果m还有剩余 或者 t还有剩余if(t!=m*2||cnt) flag =false;if(flag) cout<<"YES"<<endl;elsecout<<"NO"<<endl;}return 0;
}

B.TMT Document (思维分析)相关推荐

  1. Codeforces Round #715 (Div. 2) B. TMT Document——思路分析,清晰易懂

    题目链接 文章目录 题目大意: 思路 AC代码 题目大意: 能否把只含T和M的字符串分成,若干个TMT的子序列,原字符串长度是3的倍数 思路 我们看TMT这个串,M前面要有一个T,M后面也要有一个T, ...

  2. B. TMT Document(思维)

    https://codeforces.com/contest/1509/problem/B 思路: 对于一个M,要保证左边的L大于等于M的数量.剩下右边的再从右边往左边扫,保证右边的L大于等于M的数量 ...

  3. B. TMT Document—— Codeforces Round #715 (Div. 2)

    题意:一组中,给一个字符串只有T,M,看是否可以只分为子串TMT 5 3 TMT 3 MTT 6 TMTMTT 6 TMTTTT 6 TTMMTT 一直找不到规律,后来看一下灰名朋友的代码,很亲入门新 ...

  4. ML:从工程化思维分析—机器学习团队十大角色的简介(背景/职责/产出物):产品经理、项目经理、业务咨询顾问、数据科学家、ML研究员、数据工程师、ML工程师、DevOps/软件开发/交付工程师

    ML:从工程化思维分析-机器学习团队十大角色的简介(背景/职责/产出物):产品经理.项目经理.业务咨询顾问.数据科学家.ML研究员.数据工程师.ML工程师.DevOps/软件开发/交付工程师 背景:在 ...

  5. B. TMT Document

    B. TMT Document Example input 5 3 TMT 3 MTT 6 TMTMTT 6 TMTTTT 6 TTMMTT output YES NO YES NO YES 题目大意 ...

  6. 小刀娱乐网:引流的四个思维分析,如何更好发展网站!

    1.定位思维,清晰定位个人品牌.粉丝群体.问题定位 定位思维首先是不触碰法律的前提,小编看很多娱乐网.资源网都触碰了法律的边缘,比如发布一些黄色,赌博,类型引流,发一些外挂肯定啊,这些大众都知道好引流 ...

  7. 用系统架构中的系统思维分析一个咖啡厅系统

    此文是对<系统架构>中第2章系统思维的笔记,前前后后看了很多遍,为了达到活学活用,尝试用系统思维分析一个生动的现实生活中的案例,这样有助于更深刻的理解及现实的建模能力.现分享给大家一起讨论 ...

  8. Codeforces1509 B. TMT Document(思维)

    题意: 解法: 因为我们只需要考虑是否合法,不需要考虑具体如何分配, 那么就不要想太复杂,只需要判断什么情况下不合法即可.不合法的情况: 对于任意的[1,i],一定满足cnt[T]<cnt[M] ...

  9. Liferay 控制面板在指定文件夹添加Basic Document流程分析

    结论: 当在Liferay中用管理员登录,导航到控制面板->Documents and Media ,在指定文件夹下添加BasicDocument时,服务器做了如下的事情: (1) 在DLFIL ...

最新文章

  1. java培训机构如何选择适合自己的
  2. 学python用什么书-python有什么好的书籍
  3. 用c语言 简单实现JAVA里面的ArryList 功能,实现内存自动扩展
  4. python抓取网页信息_python抓取网页中的动态数据
  5. 矩阵论复习-过渡矩阵、生成子空间、表示矩阵、度量矩阵、酉空间、内积
  6. iMeta教程 | 使用PMS分析微生物组(图文+视频)
  7. Magento模型集合addFieldToFilter常用过滤条件
  8. spark内核揭秘-14-Spark性能优化的10大问题及其解决方案
  9. 解决使用pip无法安装rasa与无限依赖告警:INFO: This is taking longer than usual. You might need to provide the....
  10. TypeScript学习笔记(二):基本数据类型及数据转换
  11. PHP程序员40点陋习
  12. 医院耗材管理系统开发_14
  13. word2016 上次启动时失败以安全模式能够解决该问题【office专业版】
  14. linux mysql 命令行查询 乱码_mysql命令提示行连接乱码的解决
  15. 卸载 kubernetes
  16. 一周小结:webgis—北京核酸检测—demo
  17. linux bash:command,学习使用Linux Command line(Git Bash)
  18. YOLOv7半自动标注
  19. 【源码】iOS指纹解锁Touch ID的开发
  20. (8)打鸡儿教你Vue.js

热门文章

  1. html 转义字符对照表 部分
  2. Failed to open \EFI\BOOT\MMX64.efi -Not Found
  3. Unity3d-打飞碟工厂模式
  4. freeswitch实战八(动态生成拨号计划)
  5. CSS visibility
  6. 基于博弈思想的攻击图漏洞修复策略
  7. bitbake中bb文件的描述
  8. linux去掉文件夹背景色
  9. 迷宫游戏(wap页游还原)-JavaScript实现
  10. Oracle 中add_months和trunc的用法,数据类型