输入格式:一行一个数字n,代表网络包数量。(1<=n<=10^5) 第二行有n个数字,每个数字代表从服务器启动收到网络包时所经历的毫秒数。每个数字x满足:(0<=x<=2*10^6) 保证收到的网络包的时间单调增加,并且第一个网络包收到的时间必然为0ms。 输出格式:对于每个网络包输出一个数字和一个空格。代表一秒前直到现在的网络包数量。(不包含一秒整前) 样例输入: 6 0 1 999 1000 1001 3000 样例输出: 1 2 3 3 3 1 说明:在收到1000的包时,0ms收到的包恰好是1s钟之前,不计算在内 C++
时间: 2024-02-13 10:07:22 浏览: 142
c代码-输入一个整数n,显示由 n 的数字构成的金字塔,第n层 由数字 n 构成。
5星 · 资源好评率100%
以下是处理该问题的C++代码:
```cpp
#include <iostream>
#include <queue>
using namespace std;
int main() {
int n;
cin >> n;
queue<int> q;
int last_time = 0;
for (int i = 0; i < n; i++) {
int t;
cin >> t;
q.push(t);
while (!q.empty() && q.front() <= last_time + 1000) {
q.pop();
}
cout << q.size() << " ";
last_time += 1000;
}
cout << endl;
return 0;
}
```
思路:用一个队列q存储每个网络包的到达时间。每次读入一个新的网络包到达时间t时,将其加入队列q中。然后从队首开始,弹出所有在上一次计数时间last_time之前到达的网络包,直到队首的网络包到达时间大于last_time+1000。弹出这些网络包的原因是它们已经被计入上一秒的网络包数量中。统计队列q中剩余的网络包数量,输出即可。最后更新last_time为上一个计数时间。
阅读全文