看到相同时间的闹钟应当视为一个闹钟,且输出要从小到大输出,我们应当立刻有使用有序去重集合容器set的意识。
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin >> n;
set<int> timeset;
for(int i=0;i<n;i++){
int hour,min;
cin >> hour >> min;
int tick = hour*60+min;
vector<int> alarm(3);
for(int i=0;i<=2;i++){
alarm[i] = tick - (2*i+1);
timeset.insert(alarm[i]);
}
}
//distance(iterator1,iterator2) :返回两个迭代器之间的距离(包含自身)
cout << distance(timeset.begin(),timeset.end()) << endl;
for(int elem : timeset){
int hour = elem/60;
int min = elem%60;
cout << hour << " " << min << endl;
}
}
本题有一个bug:如果事件事件为一天的前4分钟,闹钟应该怎么设置呢?题目并没有特地说明这一点。实际上题目的测试用例并没有包括这类特例,所以上述代码是能跑通题目的。