球hack
  • 板块学术版
  • 楼主朦胧_XY
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/9/19 21:06
  • 上次更新2023/11/2 19:03:45
查看原帖
球hack
358971
朦胧_XY楼主2023/9/19 21:06

CF1870D

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 200005;
int T, n, K, c[N], ans[N], tot;
struct Node{ int id, val; };
Node stk[N];
int main(){
    int i, j, t, res;
    scanf("%d", &T);
    while(T--){
        scanf("%d", &n);
        for(i = 1; i <= n; i++){
            scanf("%d", &c[i]);
            while(tot && stk[tot].val >= c[i]) tot--;
            stk[++tot] = {i, c[i]};
        }
        scanf("%d", &K); j = 1;
        if(K >= stk[j].val){
            while(j+1 <= tot && K / stk[j].val == K / stk[j+1].val) j++;
            t = j+1, res = K / stk[j].val, K -= res * stk[j].val;
            for(int k = 1; k <= stk[j].id; k++) ans[k] = res;
            while(t <= tot && K){
                if(K >= stk[t].val - stk[j].val){
                    for(int k = stk[j].id+1; k <= stk[t].id; k++) ans[k] += K / (stk[t].val - stk[j].val);
                    K %= stk[t].val - stk[j].val, j = t;
                }
                t++;
            }
        }
        for(int k = 1; k <= n; k++){
            printf("%d ", ans[k]);
            ans[k] = 0;
        } printf("\n");
        tot = 0;
    }
	return 0;
}

错在答案字典序超了,不知道哪里错了,求助qwq

2023/9/19 21:06
加载中...