Submission #1136137

#TimeUsernameProblemLanguageResultExecution timeMemory
1136137Math4Life2020Rainy Markets (CCO22_day1problem2)C11
25 / 25
462 ms123548 KiB
//testing online C++ -> C converters
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <assert.h>

typedef long long ll;
typedef struct { ll first, second; } pii;
typedef ll* vi;

int main() {
    ll N; scanf("%lld", &N);
    ll B[N], P[N-1], U[N-1];
    for (ll i=0; i<N; i++) scanf("%lld", &B[i]);
    for (ll i=0; i<N-1; i++) scanf("%lld", &P[i]);
    for (ll i=0; i<N-1; i++) scanf("%lld", &U[i]);
    ll xc = 0;
    for (ll i=0; i<N-1; i++) {
        xc = (xc+P[i]-U[i]-B[i] > 0) ? xc+P[i]-U[i]-B[i] : 0;
        if (xc > B[i+1]) { printf("NO\n"); return 0; }
    }
    printf("YES\n");
    ll x0[N], xf[N], v0[N];
    ll zmin0[N], zmax0[N], vzmin0[N];
    x0[0]=xf[0]=v0[0]=0;
    for (ll i=1; i<N; i++) {
        if (xf[i-1]+P[i-1] <= B[i-1]) {
            xf[i]=x0[i]=0;
            zmin0[i-1]=zmax0[i-1]=P[i-1];
            v0[i]=v0[i-1];
            continue;
        }
        ll zmin = (B[i-1]-xf[i-1] > 0) ? B[i-1]-xf[i-1] : 0;
        ll zmax = (B[i-1]-x0[i-1] < P[i-1]) ? B[i-1]-x0[i-1] : P[i-1];
        assert(zmin <= zmax);
        ll xapp = (xf[i-1] < B[i-1]-zmin) ? xf[i-1] : B[i-1]-zmin;
        ll vzmin = v0[i-1]+xf[i-1]-xapp;
        zmin0[i-1]=zmin; zmax0[i-1]=zmax; vzmin0[i-1]=vzmin;
        zmax = (zmax+U[i-1] < P[i-1]) ? zmax+U[i-1] : P[i-1];
        x0[i]=P[i-1]-zmax; xf[i]=P[i-1]-zmin;
        v0[i]=vzmin;
        x0[i]=(x0[i] < 0) ? 0 : x0[i];
        if (xf[i] > B[i]) {
            ll D = xf[i]-B[i];
            xf[i]-=D;
            v0[i]+=D;
        }
    }
    printf("%lld\n", v0[N-1]);
    ll ans0[N-1], ans1[N-1], ans2[N-1];
    ll xfv = xf[N-1];
    for (ll i=N-2; i>=0; i--) {
        xfv = (xfv < P[i]) ? xfv : P[i];
        ans2[i]=xfv;
        ll nleft=P[i]-xfv;
        ans0[i]=(nleft < zmax0[i]) ? nleft : zmax0[i];
        ans1[i]=nleft-ans0[i];
        xfv=B[i]-ans0[i];
    }
    for (ll i=0; i<N-1; i++) {
        printf("%lld %lld %lld\n", ans0[i], ans1[i], ans2[i]);
    }
    return 0;
}

Compilation message (stderr)

Main.c: In function 'main':
Main.c:12:11: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
   12 |     ll N; scanf("%lld", &N);
      |           ^~~~~~~~~~~~~~~~~
Main.c:14:28: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
   14 |     for (ll i=0; i<N; i++) scanf("%lld", &B[i]);
      |                            ^~~~~~~~~~~~~~~~~~~~
Main.c:15:30: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
   15 |     for (ll i=0; i<N-1; i++) scanf("%lld", &P[i]);
      |                              ^~~~~~~~~~~~~~~~~~~~
Main.c:16:30: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
   16 |     for (ll i=0; i<N-1; i++) scanf("%lld", &U[i]);
      |                              ^~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...