其他分享
首页 > 其他分享> > 2022 ccpc 广东省赛 F 望舒客栈的委托

2022 ccpc 广东省赛 F 望舒客栈的委托

作者:互联网

当成大模拟写了,就是开了四个set辅助

今天才知道set的find函数是logN的,因为里面封装了红黑树(喵喵喵?

re了一发,又t了一发

理论上模拟的时间复杂度不会t,所以猜测是因为set没写好,没找到东西,卡了

re了应该是数组没开够

修修改改终于补了队友赛时过的题,码量还是不够,继续努力啊

#include<bits/stdc++.h>
using namespace std;
struct lys{
    int x,a,d,op;
}f[3*int(1e6)+7];
struct bjx{
    int tim,id,op;
}t[3*int(1e6)+7];
set<int>s[6];
int book[2*int(1e6)+7];
bool cmp(bjx a,bjx b){
    return a.tim<b.tim;
}
int main(){
  //freopen("lys.in","r",stdin);
    std::ios::sync_with_stdio(false);
      int n;
      int m=0,cnt=0;
      cin>>n;
      for(int i=1;i<=n;i++){
          cin>>f[i].x>>f[i].a>>f[i].d>>f[i].op;
          t[++cnt].tim=f[i].a;t[cnt].id=i;t[cnt].op=0;
          t[++cnt].tim=f[i].d;t[cnt].id=i;t[cnt].op=1;
      }
    sort(t+1,t+cnt+1,cmp);
    for(int i=1;i<=cnt;i++){
        if(t[i].op==0)// arive
        {int id=t[i].id;
               if(f[id].op==0){// she kong
                   if(!s[0].empty()) {
                       int h=*s[0].begin();
                       s[f[id].x].insert(h);
                       book[id]=h;
                       s[0].erase(h);
                   }
                else {
                   m++;
                      book[id]=m;
                      s[f[id].x].insert(m);    
                }
            }
            else {  
                 int pos=0;int tmp[5];
                 for(int ii=0;ii<=3;ii++) {
                   if(!s[ii].empty()) tmp[ii]=*s[ii].begin();
                   else tmp[ii]=0x3f3f3f3f;
                 }
                 for(int ii=0;ii<=3;ii++) if(ii+f[id].x<=4&&tmp[ii]<tmp[pos]) pos=ii;    
                 if(tmp[pos]==0x3f3f3f3f) {
                     m++;
                     s[f[id].x].insert(m);
                     book[id]=m;
                 }
                 else {
                  int h=tmp[pos];
                  book[id]=h;   
                  s[pos+f[id].x].insert(h);
                  s[pos].erase(h);    
                 }
            }
        }
        else {
            int id=book[t[i].id]; 
            for(int ii=1;ii<=4;ii++){
                if(s[ii].find(id)!=s[ii].end()){

                    s[ii].erase(id);
                    s[ii-f[t[i].id].x].insert(id);
                    break;    
                }
            }
        }    
    }
    cout<<m;
}

 

标签:望舒,cnt,set,int,ccpc,tim,2022,1e6,op
来源: https://www.cnblogs.com/liyishui2003/p/16558969.html