思路:
首先,字符串的大小是8e3,三个for循环肯定会TLE,所以直接否定暴力的想法。
这道题应该以CHN中的H为跳板,简单的思路如下,
(1)如果碰到C,就将记录C数量的变量++;
(2)如果碰到H,就从该点的后一个点开始循环,一直到最后,如果在循环中碰到N,结果就加上C的数量;
(3)如果碰到N,就直接continue;
#include <cstdio> #include <cstring> #include <string> #include <cmath> #include <iostream> #include <algorithm> #include <vector> #include <stack> #include <sstream> #include <map> #include <set> #include <queue> #include <stdlib.h> typedef long long ll; using namespace std; int main() { string s; cin >> s; ll len = s.length(); ll x=0; ll ans=0; for (int i=0;i<len;i++) { if(s[i]=='C') x++; else if(s[i]=='H') { for (int j=i+1;j<len;j++) { if(s[j]=='N') ans+=x; } } } cout << ans << endl; return 0; }