제출 #1356094

#제출 시각아이디문제언어결과실행 시간메모리
1356094Joshua_Andersson사탕 분배 (IOI21_candies)C++20
100 / 100
4003 ms7476 KiB
#include "candies.h"

#pragma GCC optimize("O3")
#pragma GCC target("avx2")
#include <vector>
#include <iostream>
using namespace std;

using vi = vector<int>;
#define sz(x) ((int)x.size())
#define rep(i,n) for (int i = 0; i < (n); i++)
#define repp(i,a,n) for (int i = (a); i < (n); i++)

std::vector<int> distribute_candies(std::vector<int> c, std::vector<int> l,
    std::vector<int> r, std::vector<int> v) {

    int orig_n = sz(c);
    const int B = 1000;
    int n = sz(c);
    while (n%B!=0) n++;
    while (sz(c) < n) c.push_back(0);

    vi ans(n);

    for (int b = 0; b < n; b+=B) {
        rep(q, sz(v)) {
            int lo = max(b, l[q]);
            int hi = min(b+B, r[q]+1);
            
            int addend = v[q];
            if (v[q]>0) {
                #pragma GCC ivdep
                #pragma GCC unroll 8
                repp(i,lo,hi) {
                    ans[i]+=addend;
                    ans[i]=min(c[i],ans[i]);
                }
            }
            else {
                #pragma GCC ivdep
                #pragma GCC unroll 8
                repp(i,lo,hi) {
                    ans[i]+=addend;
                    ans[i]=max(0,ans[i]);
                }
            }
        }
    }

    while (sz(ans)>orig_n) ans.pop_back();
    return ans;
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…