PAT乙级-1040. 有几个PAT(25)-详解+代码

原创 2018年04月17日 10:19:35

题目:PAT乙级 1040. 有几个PAT(25)

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

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

输入格式:

输入只有一行,包含一个字符串,长度不超过105,只包含P、A、T三种字母。

输出格式:

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

输入样例:
APPAPT
输出样例:
2

思路:

    题目中给的信息很少,测试样例也仅有一例,可以说仅通过题目所给的测试样例是非常简单的,不需要考虑到任何事情。但是题目中有一个地方(可能是一个小提示)说由于结果可能较大,只输出对1000000007取余数的结果,这时候就想了:为什么结果会有这么多?同时要考虑到的是,因为结果可能较大,保险起见,采用long long int来存储个数。
    另一方面,因为是考虑PAT的个数,只能先有了P,才考虑其后面的AT,如果正向扫描,对于每个P扫描其后的AT,那么会出现两次循环循环时间过长。因此采用逆序的扫描过程,从后向前扫描。
    因为考虑到P、A和T是交叉分布的,只有见到了A才考虑其后的P,只有见到了P才考虑其后的AT,如:ATP中的“PAT”个数为0。因此这是一个排列组合问题。例:APATATTT中的“PAT"个数为7(从后向前见到第一个A时后有3个T,见到第二个A时后有4个T,见到第一个P时后有7个AT)。
    因此采用numT来记录T的个数,numAT记录当前AT的个数,每遇到A就将numT加上,numPAT记录PAT的个数,每遇到P就将numAT加上。最后输出numPAT。
PS:100000串定义为100001个char,strlen得到的长度为带‘\0'的长度。

#include<stdio.h>
#include<string.h>
#define N 100001
int main()
{
	char s[N];
	long long numPAT=0;//记录符合条件的P的个数
	long long numT=0, numAT=0;//numT为T个数,numAT为AT个数
	int i,len;
	scanf("%s", s);
	len = strlen(s);
	for (i = len-1; i >= 0; i--)
	{
		if (s[i] == 'T')
		{
			numT++;
		}
		if (numT != 0 && s[i] == 'A')//已经有了T才会出现AT
		{
			numAT += numT;	//因为是排列关系所以为+
		}
		if (numAT != 0 && s[i] == 'P')//已经有了AT才会出现PAT
		{
			numPAT+=numAT;
		}
	}
	printf("%lld", numPAT% 1000000007);
	return 0;
}

版权声明:转载请联系博主、标明出处 https://blog.csdn.net/jyfbug/article/details/79970540

完善的Socket Server程序

/* * Copyright (c) 2000 David Flanagan.  All rights reserved. * This code is from the book Java Exam...
  • skyyoung
  • skyyoung
  • 2002-03-27 10:16:00
  • 1117

PAT乙级—1040. 有几个PAT(25)-native

字符串APPAPT中包含了两个单词“PAT”,其中第一个PAT是第2位(P),第4位(A),第6位(T);第二个PAT是第3位(P),第4位(A),第6位(T)。现给定字符串,问一共可以形成多少个PA...
  • wanmeiwushang
  • wanmeiwushang
  • 2016-05-24 13:30:56
  • 834

1040. 有几个PAT(25)-浙大PAT乙级真题java实现

个人博客:打开链接 1040. 有几个PAT(25) 字符串APPAPT中包含了两个单词“PAT”,其中第一个PAT是第2位(P),第4位(A),第6位(T); 第二个PAT是第3位(P),第4...
  • JingLisen
  • JingLisen
  • 2018-01-23 15:41:20
  • 80

1040. 有几个PAT(25)

题目链接:http://www.patest.cn/contests/pat-b-practise/1040 1040. 有几个PAT(25) 时间限制 120 ...
  • ice_camel
  • ice_camel
  • 2015-03-14 21:14:32
  • 2921

1040. 有几个PAT(25)-PAT乙级真题

1040. 有几个PAT(25) 字符串APPAPT中包含了两个单词“PAT”,其中第一个PAT是第2位(P),第4位(A),第6位(T); 第二个PAT是第3位(P),第4位(A),第6位(...
  • liuchuo
  • liuchuo
  • 2016-07-22 14:10:50
  • 822

(看了别人的idea)1040. 有几个PAT(25)

这道题想死想不出,于是百度了,看了别人的想法之后,只能说太巧妙了。作为新手程序员的我还需要更加努力啊!!!!!!!#include #include int main(void){ using na...
  • txdzdlxx
  • txdzdlxx
  • 2015-04-07 18:43:44
  • 639

1040. 有几个PAT(25)----暴力

1040. 有几个PAT(25) 时间限制 120 ms 内存限制 65536 kB 代码长度限制 8000 B ...
  • bless924295
  • bless924295
  • 2017-03-23 15:26:06
  • 150

1040. 有几个PAT(25)-PAT乙级/A1093

题目: 字符串APPAPT中包含了两个单词“PAT”,其中第一个PAT是第2位(P),第4位(A),第6位(T);第二个PAT是第3位(P),第4位(A),第6位(T)。 现给定字符串,问一...
  • ZZLCSDN2017
  • ZZLCSDN2017
  • 2017-03-28 09:05:52
  • 304

1040. 有几个PAT(25)--Python

开始的时候最后三个测试点一直超时,然后借鉴了网上大佬的思路,立马过,跪拜 大佬的博 string = input() list = list(string) list.reverse() co...
  • baidu_38271024
  • baidu_38271024
  • 2017-11-25 10:38:40
  • 107

PATBasic——1040. 有几个PAT(25)

1040. 有几个PAT(25) 时间限制 120 ms 内存限制 65536 kB 代码长度限制 8000 B ...
  • fynjy
  • fynjy
  • 2015-07-01 14:21:14
  • 422
收藏助手
不良信息举报
您举报文章:PAT乙级-1040. 有几个PAT(25)-详解+代码
举报原因:
原因补充:

(最多只允许输入30个字)