제출 #1177041

#제출 시각아이디문제언어결과실행 시간메모리
1177041simona1230최후의 만찬 (IOI12_supper)C++20
100 / 100
89 ms14920 KiB
#include <bits/stdc++.h> #include "advisor.h" using namespace std; vector<int> p[100000],pp[100000]; int in[100000],d[100000]; int id[100000],idp[100000]; void ComputeAdvice(int *c, int n, int k, int m) { for(int i=0;i<n;i++) p[c[i]].push_back(i); for(int i=0;i<n;i++) p[i].push_back(n); priority_queue<pair<int,int> > q; for(int i=0;i<k;i++) { in[i]=i; d[i]=1; q.push({p[i][0],i}); } for(int i=0;i<n;i++) { int x=q.top().second; if(d[c[i]]==0) { //cout<<x<<" "<<in[x]<<" "<<d[c[i]]<<endl; q.pop(); pp[x].push_back(i); in[c[i]]=in[x]; d[x]=0; d[c[i]]=1; } id[c[i]]++; q.push({p[c[i]][id[c[i]]],c[i]}); } for(int i=0;i<n;i++) { pp[i].push_back(n),id[i]=0; } for(int i=0;i<k;i++) { if(p[i][0]<pp[i][0])WriteAdvice(1); else WriteAdvice(0); } for(int i=0;i<n;i++) { id[c[i]]++; while(pp[c[i]][idp[c[i]]]<=i) { idp[c[i]]++; } if(p[c[i]][id[c[i]]]<pp[c[i]][idp[c[i]]])WriteAdvice(1); else WriteAdvice(0); } }
#include <bits/stdc++.h> #include "assistant.h" using namespace std; int inn[100000]; set<int> act,pas; void Assist(unsigned char *a, int n, int k, int r) { for(int i=0;i<k;i++) { inn[i]=1; if(a[i])act.insert(i); else pas.insert(i); } for(int i=k;i<r;i++) { int r=GetRequest(); if(!inn[r]) { auto it=pas.begin(); PutBack(*it); pas.erase(it); inn[*it]=0; } else { act.erase(r); pas.erase(r); } inn[r]=1; if(a[i])act.insert(r); else pas.insert(r); } }
#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...