思路:(1)要找pat的數量,先找到a在找到a前面p的個數c1,再找出a後面t的個數c2,
就能求出這個a構成的pat的個數,就是c1*c2;
(2)優化:先找出所有t的個數,然後每次遇到乙個t就減少1,遇到乙個p就+1,遇到a就已經知道
a前面的p和a後面的t。
(3)反思:一開始想用暴力,後來暴力不行就像找到p,在找p後面的a在找到a後面的t,但是時間超限了。
想想就三個,找到中間的就行了。
#include#include#includeusing namespace std;
typedef long long ll;
const ll mod = 1000000007;
ll ans,c1,c2;
char a[100010];
int main(void)
printf("%lld\n",ans);
return 0;
}
PAT甲級刷題
給定兩個字串s1和s2,刪除s1中在s2 現過的字元設定flag陣列,初始化為0。遍歷s2並將其字元轉化為ascii碼值,並在flag陣列中相應位置值標記為1,表示它出現過。再遍歷s1,若對應字元ascii碼值在flag陣列中相應位置值標記為0,則輸出。就是hash的思想,時間複雜度o len s1...
pat 甲級 1148 (思維題)
題意 n個人中,有兩個是狼人,其中不是所有狼人都說謊,說謊的人有兩個。思路 先確定狼人,然後找說謊的人,如果說謊的人有兩個且其中有乙個是狼人就輸出結果。反思 1 開始想先確定說謊的人,在確定狼人,但是總是有人不能確定是狼人還是普通人。2 可以通過乙個人說話的結果來判斷他是否說謊。include in...
pat 甲級 1101(細節題)
思路 找合適作為pivot point的點,要求是左邊的數字全部小於它,並且右邊的數字全部大於它 可以先從左開始向右判斷符合左邊數字全小於它的 大於最大值 然後再從右向左判斷右邊數字大於它的 小於最小值 注意 結尾一定要將換行分開輸出,不然寫成cout 要求的兩行不符。include include...