ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2022-08-07 14:01:28  阅读:170  来源: 互联网

标签:望舒 cnt set int ccpc tim 2022 1e6 op


当成大模拟写了,就是开了四个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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有