每一次讀到O時,可以作為第1個O與已有w的第2個O
讀到w時可以做為已讀到O的w
建3個變數,分別為
第一個O的數量ocount
第二個w的數量wcount
第三個O的數量ans
每個O:ocount+=1(作為第一個O),ans+=wcount(作為最後一個w)
每個w:wcount+=ocount(每個已有O都可在其後加w)
用string儲存空間不足:一個一個字元讀取
時間較短:用getchar_unlocked(),不要用cin,cout
code
#include <bits/stdc++.h>
using namespace std;
#define MOD 1000000007
int main() {
int T;
scanf("%d",&T);
getchar_unlocked();
char s='1';
while (T--) {
int ans = 0;
int ocount = 0;
int wcount = 0;
while (true) {
s=getchar_unlocked();
if (s == 'O') {
ocount++;
ans += wcount;
ans %= MOD;
} else if (s == 'w') {
wcount += ocount;
wcount%=MOD;
}else if(s=='\n'){
break;
}
}
printf("%d\n",ans);
}
}