1. 程式人生 > >B1040 有幾個PAT

B1040 有幾個PAT

字串 APPAPT 中包含了兩個單詞 PAT,其中第一個 PAT 是第 2 位(P),第 4 位(A),第 6 位(T);第二個 PAT 是第 3 位(P),第 4 位(A),第 6 位(T)。

現給定字串,問一共可以形成多少個 PAT

輸入格式:

輸入只有一行,包含一個字串,長度不超過10​5​​,只包含 PAT 三種字母。

輸出格式:

在一行中輸出給定字串中包含多少個 PAT。由於結果可能比較大,只輸出對 1000000007 取餘數的結果。

輸入樣例:

APPAPT

輸出樣例:

2
#include<stdio.h>
#include<string.h>
typedef long long LL;
int main(){
	char str[100010];
	LL hashTable[110]={0},sum=0;
	scanf("%s",str);
	int len=strlen(str);
	for(int i=0;i<len;i++){
		if(str[i]=='T'){hashTable['T']++;}
	}
	for(int i=0;i<len;i++){
		if(str[i]=='A'){sum=(sum+(hashTable['P']*hashTable['T']))%1000000007;hashTable['A']--;}
		if(str[i]=='P'){hashTable['P']++;}
		if(str[i]=='T'){hashTable['T']--;}
	}
	printf("%lld",sum);
}

 分析:剛開始的時候,題意理解錯誤,不知道有沒有和我一樣的小夥伴,以為是按照順序下去(如果第五位是P,查詢第五位開始下面有沒有A以及T,如果有的話組成一個PAT),這樣和題意解釋也對。但是後來寫完發現...就三分,懵逼了一下,看了其他博主的才發現自己理解錯誤了

實際應該先查詢A,然後將前面的P的個數乘上後面T的個數,最後取模