【100分思路-暴力枚举】
-
首先,定义了两个数组H和W,分别表示小H和小W的时间段,用来记录每个时刻是否有人在广场上装车。
-
然后,使用两个嵌套循环分别读入小H和小W的时间段,并将对应的时刻标记为1,表示有人在那个时刻装车。
-
接下来,使用一个循环遍历了一个较大的范围(1000000),检查在每个时刻是否同时有小H和小W在广场上装车,如果是则增加总时长。
#include <iostream>
using namespace std;
bool H[1000000] = {}, W[1000000] = {};
int aws = 0;
int main()
{
int n;
cin >> n;
for (int i = 0; i < n; i++)
{
int a, b;
cin >> a >> b;
for (int i = a; i < b; i++)
{
H[i] = 1;
}
}
for (int i = 0; i < n; i++)
{
int a, b;
cin >> a >> b;
for (int i = a; i < b; i++)
{
W[i] = 1;
}
}
for (int i = 0; i < 1000000; i++)
{
if (H[i] && W[i])
{
aws++;
}
}
cout << aws;
return 0;
}
一点小优化
- 使用
maxIndex
来动态调整数组的大小,避免了固定使用1000000的数组大小
#include <iostream>
using namespace std;
bool H[1000000] = {}, W[1000000] = {};
int aws = 0, maxIndex = 0;
int main()
{
int n;
cin >> n;
for (int i = 0; i < n; i++)
{
int a, b;
cin >> a >> b;
for (int i = a; i < b; i++)
{
H[i] = 1;
}
maxIndex = max(maxIndex, b + 1);
}
for (int i = 0; i < n; i++)
{
int a, b;
cin >> a >> b;
for (int i = a; i < b; i++)
{
W[i] = 1;
}
maxIndex = max(maxIndex, b + 1);
}
for (int i = 0; i < maxIndex; i++)
{
if (H[i] && W[i])
{
aws++;
}
}
cout << aws;
return 0;
}