想问问这个怎么错了啊,过不了后面两个点
  • 板块P1599 结算日
  • 楼主paozhuan
  • 当前回复0
  • 已保存回复0
  • 发布时间2021/11/19 11:27
  • 上次更新2023/11/4 00:10:07
查看原帖
想问问这个怎么错了啊,过不了后面两个点
550368
paozhuan楼主2021/11/19 11:27
#include<iostream>
#include<algorithm>
#include<math.h>

using namespace std;

int n, l = 0, r = 0;
int d[100010];
long long int ans = 0;
long long int money;
typedef struct node {
    int no, zai;
}A;
A que[100010];
//由于在最后一头奶牛的位置要结束 故后面钱够要去还前面的人
int main() {
    cin >> n;
    int tmp;
    for (int i = 1; i <= n; i++) {
        cin >> tmp;
        if (tmp >= 0) {
            money += tmp;
            ans++;
            int tmpi = i;
            //能还之前的
            while (money >= que[l].zai && que[l].zai != 0) {
                ans += abs(tmpi - que[l].no);
                tmpi = que[l].no;
                money -= que[l].zai;
                l++;
            }
            ans += abs(i - tmpi);
        }
        else {
            ans++;
            //能还上   
            if (money >= abs(tmp))
                money -= abs(tmp);
            else {
                //标记不能还的位置入队
                que[r++] = { i, -tmp };
            }
        }
    }
    cout << ans;
    return 0;
}
  
2021/11/19 11:27
加载中...