Codeforces Round 923 (Div. 3) A~D
文章目录
A. Make it White
模拟
找第一个B和最后一个B 的位置
算出间距即可。
正着找和倒着找。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
void slove() {
int t;
cin >> t;
while (t--) {
int n;
cin >> n;
string s;
cin >> s;
int first;
int last;
for (int i = 0; i < n; i++) {
if (s[i] == 'B') {
first = i;
break;
}
}
//reverse(s.begin(), s.end());
for (int i = n-1; i >=0; i--) {
if (s[i] == 'B') {
last = i;
break;
}
}
cout << last - first + 1 << endl;
}
}
int main() {
slove();
}
B.Following the String
模拟,stl
因为细节,卡了近一小时。
对于字符串 s,和一个字符c
s+=c 和 s=s+c 的时间复杂度是不同的。
前者是O(1),后者是O(n)
嗯。。。。下次注意
正常做法是 O(26n)
但人逼急了什么都做得出来,于是我想到了一个O(n)的做法。
开一个map,出现次数为键,字符为值。
相当于链表吧。
正常做法是 以字符为键,然后循环26次查找出现次数。
O(n)做法
#include<iostream>
#include<string>
#include<vector>
#include<map>
#define ios ios