Submission #1170536

#TimeUsernameProblemLanguageResultExecution timeMemory
1170536irmuun식물 비교 (IOI20_plants)C++20
30 / 100
1765 ms5868 KiB
#include "plants.h" #include <bits/stdc++.h> using namespace std; #define ll long long #define pb push_back #define ff first #define ss second #define all(s) s.begin(),s.end() #define rall(s) s.rbegin(),s.rend() int n,k; vector<int>r,pre,h; int get(int x,int y){ if(x>y) return 0; return pre[y]-(x>0?pre[x-1]:0); } const int maxn=300; vector<int>g[maxn]; int ans[maxn][maxn]; void init(int K,vector<int>R){ k=K; r=R; n=r.size(); pre.resize(n); pre[0]=r[0]; for(int i=1;i<n;i++){ pre[i]=pre[i-1]+r[i]; } if(2*k>n||n<=300){ h.resize(n); for(int t=n;t>=1;t--){ vector<int>v; for(int i=0;i<n;i++){ if(h[i]==0&&r[i]==0) v.pb(i); } if(!v.empty()){ int x=v[0]; for(int i=1;i<v.size();i++){ if(v[i]-v[i-1]>=k){ x=v[i]; break; } } h[x]=t; for(int j=1;j<k;j++){ r[(x-j+n)%n]--; } } } if(n<=300){ for(int i=0;i<n;i++){ for(int t=1;t<k;t++){ if(h[i]>h[(i+t)%n]){ g[i].pb((i+t)%n); } else{ g[(i+t)%n].pb(i); } } } for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ ans[i][j]=0; } } for(int i=0;i<n;i++){ queue<int>q; q.push(i); ans[i][i]=1; while(!q.empty()){ int x=q.front(); q.pop(); for(int y:g[x]){ if(ans[i][y]==0){ ans[i][y]=1; q.push(y); } } } } } } } int compare_plants(int x,int y){ if(k==2){ if(get(x,y-1)==0) return 1; if(get(y,n-1)==n-y&&get(0,x-1)==x) return 1; if(get(x,y-1)==y-x) return -1; if(get(y,n-1)==0&&get(0,x-1)==0) return -1; return 0; } if(2*k>n&&n<=5000){ if(h[x]>h[y]) return 1; if(h[x]<h[y]) return -1; return 0; } if(n<=300){ if(ans[x][y]==1) return 1; if(ans[y][x]==1) return -1; return 0; } 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...