第 189 场周赛

5412. 在既定时间做作业的学生人数

1
2
3
4
5
6
7
8
9
10
class Solution {
public:
int busyStudent(vector<int>& startTime, vector<int>& endTime, int queryTime) {
int res = 0;
for(int i=0; i<startTime.size(); i++) {
if(startTime[i] <= queryTime && endTime[i] >= queryTime) res ++;
}
return res;
}
};

5413. 重新排列句子中的单词

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:
string arrangeWords(string text) {
map<int, vector<string>> mp;
stringstream ss;
ss << text;
string cur; ss >> cur;
cur[0] = 'a' + cur[0]-'A';
mp[cur.size()].push_back(cur);
while(ss >> cur) {
mp[cur.size()].push_back(cur);
}
string ret = "";
for(auto v: mp) {
for(auto s: v.second) {
ret += s;
ret += ' ';
}
}
ret[0] = 'A' + ret[0]-'a';
ret.pop_back();
return ret;
}
};

5414. 收藏清单

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
class Solution {
public:
vector<int> peopleIndexes(vector<vector<string>>& a) {
int n = a.size();
vector<int> ret;
for (int i = 0; i < n; ++ i)
sort(a[i].begin(), a[i].end());
for (int i = 0; i < n; ++ i)
{
int flag = 0;
for (int j = 0; j < n; ++ j) if (j != i)
{
if (a[i].size() > a[j].size()) continue;
int ok = 0;
int l = 0;
for (int k = 0; k < a[i].size(); ++ k)
{
while (l < a[j].size() && a[i][k] != a[j][l]) ++ l;
if (l == a[j].size())
{
ok = 1;
break;
}
l ++;
}

if (ok == 0)
{
flag = 1;
break;
}
}
if (flag == 0) ret.push_back(i);
}
return ret;
}
};

5415. 圆形靶内的最大飞镖数量

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
39
40
41
42
43
44
45
46
class Solution {
public:
struct Point {
double x, y;
Point() {}
Point(double x, double y){
this->x = x;
this->y = y;
}
};

double dist(Point p1,Point p2) {
return sqrt(pow(p1.x - p2.x, 2) + pow(p1.y - p2.y, 2));
}

Point center(Point p1,Point p2, int r) {
Point mid = Point((p1.x + p2.x) / 2, (p1.y + p2.y) / 2);
double a = atan2(p1.x - p2.x, p2.y - p1.y), d = sqrt(r * r - pow(dist(p1, mid),2));
return Point(mid.x + d * cos(a), mid.y + d * sin(a));
}

int numPoints(vector<vector<int>>& po, int r) {
vector<Point> p(po.size());
for(int i = 0; i < po.size(); i++) {
p[i] = Point(po[i][0], po[i][1]);
}
int res = 1;
for(int i = 0; i < p.size(); i++) {
for(int j = 0; j < p.size(); j++) {
if(i == j) continue;
if(dist(p[i], p[j]) > 2.0 * r) {
continue;
}
Point c = center(p[i], p[j], r);
int cnt = 0;
for(int k = 0; k < p.size(); k++) {
if(dist(c, p[k]) < 1.0 * r + 0.000001) {
cnt++;
}
}
res = max(res, cnt);
}
}
return res;
}
};
Donate? comment?