inlineboolisOk(char c){ staticconst string okList = "AHIMOTUVWXY"; for (char ok : okList) { if (c == ok) { returntrue; } } returnfalse; }
boolisOk(string s){ for (char c : s) { if (!isOk(c)) { returnfalse; } } for (int i = 0; i < s.size() / 2; i++) { if (s[i] != s[s.size() - i - 1]) { returnfalse; } } returntrue; }
intsolve(string s){ int ans = 0; for (int i = 0; i < s.size(); i++) { for (int j = i + 1; j < s.size(); j++) { // 长度大于1 bool thisIsOk = isOk(s.substr(i, j - i + 1)); ans += thisIsOk; #ifdef _WIN32 if (thisIsOk) { printf("i = %d, j = %d, s.substr(%d, %d) = %s : OK\n", i, j, i, j, s.substr(i, j).c_str()); } #endif } } return ans; }
intmain(){ #ifdef _WIN32 vector<string> S = {"AHHAMTT"}; vector<int> ANS = {3}; for (int i = 0; i < S.size(); i++) { int ans = solve(S[i]); cout << S[i] << ": " << ans << endl; assert(ans == ANS[i]); } #else string s; cin >> s; cout << solve(s) << endl; #endif return0; }
intsolve(int n){ int ans = 0; for (int start = 0; start < n; start++) { int lt = 0, gt = 0; ans++; for (int i = 1; start - i >= 0 && start + i < n; i++) { if (a[start - i] > a[start]) { gt++; } else { lt++; } if (a[start + i] > a[start]) { gt++; } else { lt++; } ans += lt == gt; } } return ans; }
intmain(){ int T; scanf("%d", &T); while (T--) { int n; scanf("%d", &n); for (int i = 0; i < n; i++) { scanf("%d", &a[i]); } int ans = solve(n); printf("%d\n", ans); } return0; }
int n, k; string s; vector<Range> OkList; bool a[1000010] = {false};
voidprint(){ for (Range& r : OkList) { for (int i = r.start; i <= r.end; i += 2) { a[i] = true; } } for (int i = 1; i <= n; i++) { putchar(a[i] ? '1' : '0'); } }
vector<Range> genOdd(){ vector<Range> ans; for (Range r : OkList) { if (r.start % 2) { ans.push_back(r); } } return ans; }
vector<Range> genEven(){ vector<Range> ans; for (Range r : OkList) { if (r.start % 2 == 0) { ans.push_back(r); } } return ans; }
vector<Range> mergeOddOrEven(vector<Range>& odd){ // 全是奇数或全是偶数 if (odd.empty()) { return {}; } vector<Range> ans; int l = odd[0].start, r = odd[0].end; for (int i = 1; i <= odd.size(); i++) { if (i == odd.size() || odd[i].start > r + 2) { ans.push_back(Range(l, r)); l = odd[i].start, r = odd[i].end; } else { r = max(r, odd[i].end); } } return ans; }
voidmergeList(){ vector<Range> odd = genOdd(); vector<Range> even = genEven(); OkList = mergeOddOrEven(odd); for (Range r : mergeOddOrEven(even)) { OkList.push_back(r); } }
voidleft(vector<Range>& leftOk){ for (Range r : OkList) { int left = r.start; int right = r.end; left--; right--; if (left == 0) { leftOk.push_back(Range(1, 1)); left = 2; } if (left <= right) { leftOk.push_back(Range(left, right)); } } }
voidright(vector<Range>& leftOk){ for (Range& r : OkList) { int left = r.start; int right = r.end; left++; right++; if (right == n + 1) { leftOk.push_back(Range(n, n)); right = n - 1; } if (left <= right) { leftOk.push_back(Range(left, right)); } } }