3 条题解

  • 0
    @ 2023-5-29 16:49:04

    赛后补题

    最魔幻的一集,在考场上写出了大致框架,然后因为一个数据没初始化爆掉了,只有10分。

    核心思想是对所有数据,先对前面要去的宾馆排序,再以时间从小到大排序,如果超时或者带不下就另开一辆。

    话说这道题用py应该会费力一点,毕竟没有结构体要开class(大概,可能是因为我py水平差)

    #include <bits/stdc++.h>
    using namespace std;
    
    struct node{
        char p;
        int t;
    }no[10001];
    
    bool cmp1(node l,node r){
        return l.p == r.p?l.t<r.t:l.p<r.p;
    }
    
    signed main()
    {
        int n,v,w;
        cin>>n>>v>>w;
        char p;
        int a,b;
        for(int i=1;i<=n;i++){
            cin>>p;
            no[i].p=p;
            cin>>p>>a>>p>>b;
            no[i].t=a*60+b;
        }
        sort(no+1,no+n+1,cmp1);
        int ans=1,t=no[1].t,k=1,lp=no[1].p;
        for(int i=2;i<=n;i++){
            if(no[i].t>t+w or k>=v or no[i].p!=lp){
                ans++;
                lp=no[i].p;
                t=no[i].t;
                k=1;
            }
            else {
                k++;
            }
        }
        cout<<ans;
    }
    

    发牢骚:考场die码:

    #include <bits/stdc++.h>
    using namespace std;
    
    struct node{
        char p;
        int t;
    }no[10001];
    
    bool cmp1(node l,node r){
        return l.p == r.p?l.t<r.t:l.p<r.p;
    }
    
    signed main()
    {
        int n,v,w;
        cin>>n>>v>>w;
        char p;
        int a,b;
        for(int i=1;i<=n;i++){
            cin>>p;
            no[i].p=p;
            cin>>a>>p>>b;//错误1,应为cin>>p>>a>>p>>b;
            no[i].t=a\*60+b;
        }
        sort(no+1,no+n+1,cmp1);
        int ans=0,t=-100,k=5,lp='A';//错误2,k值应初始化为no[1].t,t不知道为什么这个判断在第一次没有生效
        for(int i=1;i<=n;i++){
            if( k>=v or no[i].p!=lp){
                ans++;
                lp=no[i].p;
                t=no[i].t;
                k=1;
            }
            else {
                k++;
            }
        }
        cout<<ans;
    }
    

    信息

    ID
    833
    时间
    1000ms
    内存
    256MiB
    难度
    9
    标签
    递交数
    372
    已通过
    35
    上传者