码迷,mamicode.com
首页 > 其他好文 > 详细

P1040 有几个PAT

时间:2020-01-24 22:27:06      阅读:87      评论:0      收藏:0      [点我收藏+]

标签:problems   number   define   justify   char   void   -o   target   tchar   

转跳点:??

1040 有几个PAT (25分)
 

字符串 APPAPT 中包含了两个单词 PAT,其中第一个 PAT 是第 2 位(P),第 4 位(A),第 6 位(T);第二个 PAT 是第 3 位(P),第 4 位(A),第 6 位(T)。

现给定字符串,问一共可以形成多少个 PAT

输入格式:

输入只有一行,包含一个字符串,长度不超过1,只包含 PAT 三种字母。

输出格式:

在一行中输出给定字符串中包含多少个 PAT。由于结果可能比较大,只输出对 1000000007 取余数的结果。

输入样例:

APPAPT
 

输出样例:

2

 

  这道题,和之前的我要通过一样属于,烧脑题,代码极简。我可怜的头发。

(在写分析之前先写一下规定,P的个数:Pcount;PA的个数:PAcounT,PAT的个数:PATcount,)

我第一轮分析如下:

  随便写了一个样例,写出了所有可能,得出一些结论:

    1、发现PAT的个数取决于PA个数

    2、PA个数取决于P个数

第二次分析:

  统计了一下每个A前面P的 Pcount,发现每个A对应的 PAcount 是 A 之前的Pcount的数量

  统计了一下每个T前面的PA的 PAcount,发现每个T对应的PATcount是T之前所有A对应的PAcount的累加

  最后统计了一下PTAcount并和每个T前面的PA的 PAcount对比了一下,发现字符串里所有的PATcount是所有T对应的PTAcount的累加

到此就可以得出无比简单的代码了

 

AC代码

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #define LIMT 1000000007
 4 
 5 int main(void)
 6 {
 7     char ch;   
 8     int P = 0, PA = 0, PAT = 0;
 9 
10     while ((ch = getchar()) != \n)
11     {
12         if (P == ch)
13         {
14             P++;
15             continue;
16         }
17         if (A == ch)
18         {
19             PA = (PA + P) % LIMT;
20             continue;
21         }
22         PAT = (PAT + PA) % LIMT;
23     }
24 
25     printf("%d", PAT);
26     return 0;
27 }        

 

  PS:如果对每次都遇到取余问题都会对这个magic number——1000000007取模感兴趣的话,戳这里????

 

PTA不易,诸君共勉!

P1040 有几个PAT

标签:problems   number   define   justify   char   void   -o   target   tchar   

原文地址:https://www.cnblogs.com/daker-code/p/12232228.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!