字符串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
解題思路:按題目思路理解,此題中每一個P都可和之后的每一個A,T組成一個PAT,每一個A都可和之前的P及之后的T組成PAT,每一個T都可和之前的P,A組成PAT。此代碼按照A的數量把每個A能組成的PAT數量相加總和。
提交代碼
#include <stdio.h>#include <string.h>int main(){ char *p,*q; char a[100002]; int nump = 0,numq = 0,s = 0; //P,T,PAT的數量 scanf("%s",a); p = a; q = &a[strlen(a) - 1]; while(*p != 'P') //讓p指針指向第一個P所在的位置,nump準備計數 p++; while(*q != 'T') //q指針指向最后一個T所在的位置 q--; while(*p != 'A') //讓p指針指向第一個A所在的位置 { if(*p == 'P') //記下p的個數 nump++; p++; } while(q > p) //記下當前p位置之后T的個數 { if(*q == 'T') numq++; q--; } q = &a[strlen(a) - 1]; while(q > p) { if(*p == 'A') //每遇到一個A,累加能組成PAT的數量 { s += (nump * numq); if(s >= 1000000007) s %= 1000000007; } else if(*p == 'P') nump++; else if(*p == 'T') numq--; p++; } PRintf("%d/n",s); return 0;}
新聞熱點
疑難解答