第 23 场双周赛

5360. 统计最大组的数目

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
class Solution {
public:
int helper(int x) {
int ret = 0;
while(x) {
ret += x % 10;
x /= 10;
}
return ret;
}
int countLargestGroup(int n) {
map<int, int> mp;
int curmax = -1;
for(int i=1; i<=n; i++) {
int cur = helper(i);
mp[cur] ++;
curmax = max(curmax, mp[cur]);
}
int c = 0;
for(auto m: mp) {
if(m.second == curmax) c++;
}
return c;
}
};

5362. 构造 K 个回文字符串

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Solution {
public:
bool canConstruct(string s, int k) {
int letter[26] = {0};
for(auto& c: s) {
letter[c-'a'] ++;
}
int ou = 0;
for(int i=0; i<26; i++) {
if(k < 0) return false;
if(letter[i] % 2 == 0) {
ou += letter[i];
} else {
k--;
ou += (letter[i]-1);
}
}
return k >= 0 && ou >= k;
}
};

5361. 圆和矩形是否有重叠

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
34
35
36
37
38
class Solution {
public:
double far(double n1, double m1, double n2, double m2)
{
double ans;
ans = (n1 - n2) * (n1 - n2) +(m1 - m2) * (m1 - m2);
ans = sqrt(ans);
return ans;
}
bool checkOverlap(int r, int a, int b, int xa, int ya, int xb, int yb) {
if (
far(xa, ya, a, b) <= r ||
far(xa, yb, a, b) <= r ||
far(xb, ya, a, b) <= r ||
far(xb, yb, a, b) <= r
)
{
return true;
}
else if (a >= min(xa, xb) && a <= max(xa, xb) && b >= min(ya, yb) && b <= max(ya, yb))
{
return true;
}
else if(
(far(xa, b, a, b) <= r && b <= max(ya, yb) && b >= min(ya, yb))||
(far(xb, b, a, b) <= r && b <= max(ya, yb) && b >= min(ya, yb))||
(far(a, ya, a, b) <= r && a <= max(xa, xb) && a >= min(xa, xb))||
(far(a, yb, a, b) <= r && a <= max(xa, xb) && a >= min(xa, xb)) //顶点不在圆内但是边和圆相交
)
{
return true;
}
else
{
return false;
}
}
};

5363. 做菜顺序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Solution {
public:
int maxSatisfaction(vector<int>& a) {
int n = a.size();
sort(a.begin(), a.end());
int ans = 0, sum = 0, cur = 0;
for(int i=n-1; i>=0; i--) {
cur += sum + a[i];
ans = max(ans, cur);
sum += a[i];
}
return ans;
}
};
Donate? comment?