|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
问题如下:
链接:https://ac.nowcoder.com/acm/contest/73762/B
来源:牛客网
在公司的年会上,有
N个人排着队准备毛红包,这些人按照从前到后的顺序排成一列,编号为1到N。
在活动期间,发生了Q次以下事件:
在时间Ti ,装有M i块钱的红包从空中飘下,站在队头的人得到该红包内的所有钱(如果队列中没有人,则没有人得到该红包)。然后,该人离开队列,并在时间T i+D i返回到原来的位置。
在所有Q次事件之后,请输出每个人获得的总金额数。
下面是我的代码,求大佬改进时间复杂度!
- #include<bits/stdc++.h>
- using namespace std;
- typedef long long ll;
- int main() {
- ios::sync_with_stdio(0);
- cin.tie(0);
- long n, q;
- ll time, money, dtime;
- cin >> n >> q;
- vector<ll> m(n, 1), dp(n, 1), rmb(n, 0); // Using vectors instead of maps for better performance.
- for (ll i = 0; i < q; i++) {
- cin >> time >> money >> dtime;
- // Finding the first available position to perform the operation.
- for (ll j = 0; j < n; j++) {
- if (m[j] == 0) {
- if (dp[j] == time) {
- m[j] = 1;
- }
- else {
- continue;
- }
- }
- m[j] = 0;
- dp[j] = time + dtime;
- rmb[j] += money;
- break; // Break after finding the first available position.
- }
- }
- for (ll i = 0; i < n; i++) {
- cout << rmb[i] << '\n';
- }
- return 0;
- }
复制代码 |
|