第 185 场周赛

5388. 重新格式化字符串

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
class Solution {
public:
string reformat(string s) {
vector<char> c1;
vector<char> c2;
for(auto c: s) {
if(c >= 'a' && c <= 'z') c1.push_back(c);
else c2.push_back(c);
}
int n1 = c1.size(), n2 = c2.size();
if(abs(n1-n2) > 1) return "";
string res = "";
if(n1 > n2) {
res += c1[0];
for(int i=0; i<n2; i++) {
res += c2[i];
res += c1[i+1];
}
} else if(n1 < n2) {
res += c2[0];
for(int i=0; i<n1; i++) {
res += c1[i];
res += c2[i+1];
}
} else {
for(int i=0; i<n1; i++) {
res += c1[i];
res += c2[i];
}
}
return res;
}
};

5389. 点菜展示表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
class Solution {
public:
vector<vector<string>> displayTable(vector<vector<string>>& orders) {
set<string> s;
for(auto o: orders) s.insert(o[2]);
vector<string> v(s.begin(), s.end());
sort(v.begin(), v.end());
unordered_map<string, int> mp1;
for(int i=0; i<v.size(); i++) mp1[v[i]] = i;
map<int, vector<int>> mp2;
int c1 = 0;
for(auto o: orders) {
int num = stoi(o[1]);
if(mp2[num].size() == 0){ mp2[num].resize(v.size()); c1++;}
mp2[num][mp1[o[2]]]++;
}
vector<vector<string>> res(c1+1, vector<string>(v.size()+1));
res[0][0] = "Table";
for(int i=0; i<v.size(); i++) {
res[0][i+1] = v[i];
}
int z = 1;
for(auto m: mp2) {
res[z][0] = to_string(m.first);
for(int i=0; i<v.size(); i++) {
res[z][i+1] = to_string(m.second[i]);
}
z++;
}
return res;
}
};

5390. 数青蛙

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Solution {
public:
int minNumberOfFrogs(string str) {
vector<int> cot(5);
int n = str.size();
int res = INT_MIN;
for(int i=0; i<n; i++) {
if(str[i] == 'c') cot[0]++;
else if(str[i] == 'r') cot[1]++;
else if(str[i] == 'o') cot[2]++;
else if(str[i] == 'a') cot[3]++;
else if(str[i] == 'k') cot[4]++;
if(cot[0] < max(cot[1], max(cot[2], max(cot[3], cot[4])))) return -1;
if(cot[1] < max(cot[2], max(cot[3], cot[4]))) return -1;
if(cot[2] < max(cot[3], cot[4])) return -1;
if(cot[3] < cot[4]) return -1;
res = max(cot[0]-cot[4], res);
}
if(cot[0] == cot[1] && cot[1] == cot[2] && cot[2] == cot[3] && cot[3] == cot[4])
return res;
else
return -1;
}
};

5391. 生成数组

class Solution {
    int f[55][105][55];
public:
    int numOfArrays(int n, int m, int k) {
        const int M = 1000000007;
        memset(f, 0, sizeof(f) ) ;
        for (int i = 1; i <= m; ++i){
            f[1][i][1] = 1;
        }
        for (int i = 2; i <= n; ++i){
            for (int kk = 1; kk <= k; ++kk){
                int sm = 0;
                for (int j = 1; j <= m; ++j){
                    f[i][j][kk] = 1ll * j * f[i - 1][j][kk] % M;
                    f[i][j][kk] = (f[i][j][kk] + sm) % M;
                    sm = (sm + f[i - 1][j][kk - 1]) % M;
                }
            }
        }
        int ans = 0;
        for (int i = 1; i <= m; ++i)
            ans = (ans + f[n][i][k]) % M;
        return ans;
    }
};
Donate? comment?