题目

题目地址:PAT 乙级 1003

题解

规律观察题,本题的关键在于把题读懂,同时还有几个比较容易疏忽的地方需要注意;总之这道题要考虑的东西更多,细节上也要特别注意;

规律:“如果 aPbTc 是正确的,那么 aPbATca 也是正确的”,这是理解本题的关键信息,观察之后会发现,当b的字符串里再增加一个A,那么T之后的字符串就会多出a个A(特别注意,这里的 ‘ca’ 实际上是 c + a 个A字符的关系),那么这个关系也就显而易见了,只有在 a * b = c 的条件下,才会有这样的结果,我们再来简单推导一下:

设  a * b = c

由题设条件可知:a * (b + 1) = c + a,再次说明,ca表明有c + a个A

将上式分配可得:a * b + a = c + a…………(1)

又  a * b = c

则 (1) 式成立

通过以上分析可知,本题的字符中的关系就是:a * b = c

在分析完本题最重要的条件之后,还需要在代码过程中注意几点问题;需要说明的是,题目条件中三个条件是层层递进的关系,也就是说只有满足之前的条件才能判断之后的条件

从以上先决条件推导可得如下两个需要注意的问题:

1. 字符 P 和 T 在一个字符串中只能出现一次;

2. P 和 T 之间必须有字符 A;

因为没有完全理解之前那句话,结果导致没有一次AC(-_-||)

代码

 #include <iostream>
#include <string>
using namespace std; int main() {
string str;
int n = ;
int cnta = , cntb = , cntc = ;
bool flagp = false, flagt = false, flaga = false, flagx = false;
cin >> n;
for (int i = ; i < n; i++) {
cin >> str;
for (int j = ; j < str.size(); j++) {
switch (str[j]) {
case 'A':
flaga = true;
if (!flagp && !flagt) cnta++;
else if (flagp && !flagt) cntb++;
else if (flagp && flagt) cntc ++;
break;
case 'P':
if (flagp)
flagx = true;
else
flagp = true;
break;
case 'T':
if (flagt)
flagx = true;
else
flagt = true;
break;
default:
flagx = true;
break;
}
if (flagx) break;
}
if (flagx)
cout << "NO" << endl;
else if (flagp && flagt && flaga && cntb != && cnta * cntb == cntc)
cout << "YES" << endl;
else
cout << "NO" << endl;
cnta = cntb = cntc = ;
flagp = flagt = flaga = flagx = false;
} return ;
}

最新文章

  1. nginx服务器http重定向到https的正确写法
  2. linux进程通信之使用匿名管道进行父子进程通信
  3. 安全性之DDOS的防护技巧
  4. 探究MaxxBass音效
  5. LGLCalender (价格日历)
  6. javaScript创建无边框iframe兼容ie
  7. 配置keil MDK和keil C51共存
  8. Qt程序打包成exe可执行文件图文教程(图文并茂,且用到了filepack)
  9. python DNS域名轮询业务监控
  10. Python之--paramiko实例
  11. 求1!+2!+3!+......+n!的和 -----C++-----
  12. MySQL经典练习题
  13. CCPC-Wannafly Winter Camp Day4 G---置置置换【递推】【组合数】【逆元】
  14. 微信小程序 循环列表添加点击事件和样式
  15. Codeforces687C(SummerTrainingDay03-D DP)
  16. Memcache/Memcached的PHP操作手册(纯手稿版)
  17. django模板中自动加载static
  18. PSP Daily软件beta版本——基于spec评论
  19. JavaScript 设计模式之建造者模式
  20. API - 使用Default对象 - 基础篇

热门文章

  1. Java中如何实现代理机制(JDK动态代理和cglib动态代理)
  2. Carryon的字符串
  3. Hive:JDBC示例
  4. 【JavaEE】怎么设置tomcat管理员的用户名和密码
  5. 一步一步配置Spring
  6. Get和Post的请求
  7. linux服务器安装nodejs运行环境
  8. Servlet高级部分Listener
  9. label+input实现按钮开关切换效果
  10. sonarque下载和安装使用