笔试强训(十三)
一.牛牛冲钻五
https://ac.nowcoder.com/acm/problem/227309



#include <iostream>
#include <string.h>using namespace std;void slove()
{int n,k;cin >> n >> k;string s;cin >> s;int ans = 0,len = 0;for(int i = 0;i < n; i++){if(s[i] == 'W'){len ++;if(len >= 3){ans += k;}else{ans += 1;}}else{len = 0;ans -= 1;}}cout << ans << endl;
}int main() {int n;cin >> n;while(n--){slove();}return 0;
}
// 64 位输出请用 printf("%lld")
二.最长无重复子数组
https://www.nowcoder.com/practice/b56799ebfd684fb394bd315e89324fb4?tpId=196&tqId=37149&ru=/exam/oj


#include <iostream>
#include <vector>
#include <unordered_map>
using namespace std;class Solution {
public:/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param arr int整型vector the array* @return int整型*/int maxLength(vector<int>& arr) {// write code hereunordered_map<int,int> mp;int n = arr.size();int ans = 0;int l = 0,r = 0;while(r < n){mp[arr[r]]++;if(mp[arr[r]] >= 2){while(mp[arr[r]] >= 2){mp[arr[l++]]--;}ans = max(ans,r - l + 1);}else{ans = max(ans,r - l + 1);}r++;}return ans;}
};
三.重排字符串
https://ac.nowcoder.com/acm/problem/222104


#include <iostream>
#include <string.h>
using namespace std;const int N = 1e5 + 10;
const int M = 30;
char a[N];
int sum[M];int main()
{int n;cin >> n;string s;cin >> s;int mmax = 0,mmax_index = 0;for(int i = 0;i < n; i++){sum[s[i] - 'a']++;if(sum[s[i] - 'a'] > mmax){mmax = sum[s[i] - 'a'];mmax_index = s[i] - 'a';}}if(mmax > n - mmax + 1){cout << "no";}else{cout << "yes" << endl;int begin = 0;while(mmax){a[begin] = mmax_index + 'a';mmax--;begin+=2;} for(int i = 0;i < 26; i++){if(i != mmax_index && sum[i]){while(sum[i]--){if(begin >= n){begin = 1;}a[begin] = i + 'a';begin+=2;}}}for(int i = 0;i < n;i++){cout << a[i] ;}cout << endl;}return 0;
}