제출 #1132138

#제출 시각아이디문제언어결과실행 시간메모리
1132138StefanSebez식물 비교 (IOI20_plants)C++20
0 / 100
4091 ms6132 KiB
#include <bits/stdc++.h>
#include "plants.h"
using namespace std;
#define fi first
#define se second
#define pb push_back
#define ll long long
#define ld long double
const int N=2e5+50;
int k,n;
int pref[2*N],r[2*N],a[N];
int Plus(int i,int x){i+=x;while(i<1)i+=n;while(i>n)i-=n;return i;}
int suma(int l,int r){
    if(l<=r) return pref[r]-pref[l-1];
    return pref[r+n]-pref[l-1];
}
int dist(int l,int r){
    if(l<=r) return r-l+1;
    return n+(r-l+1);
}
void init(int k1, std::vector<int> r1){
    k=k1;n=r1.size();
    for(int i=1;i<=n;i++) r[i]=r1[i-1];
    for(int i=n+1;i<=2*n;i++) r[i]=r[i-n];
    bool was[n+10]={false};
    for(int c=n;c>=1;c--){
        int ind=-1,maks=0;
        for(int i=1;i<=n;i++){
            if(was[i]||r[i]!=0) continue;
            int nesto=1e9;
            for(int j=Plus(i,-1),ct=k-1;ct--;j=Plus(j,-1)){
                if(was[j]) continue;
                nesto=min(nesto,r[j]);
            }
            if(nesto>maks){
                maks=nesto,ind=i;
            }
        }
        a[ind]=c;
        was[ind]=true;
        for(int j=Plus(ind,-1),ct=k-1;ct--;j=Plus(j,-1)){
            if(was[j]) continue;
            r[j]--;
        }
        //for(int i=1;i<=n;i++) printf("%i ",r[i]);printf("\n");
    }
    //for(int i=1;i<=n;i++) printf("%i ",a[i]);printf("\n");
}
int compare_plants(int x, int y){
    x++,y++;
    if(a[x]>a[y]) return 1;
    if(a[x]<a[y]) return -1;
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...