3 条题解

  • 1
    @ 2023-5-28 18:02:17
    #include<bits/stdc++.h>
    
    using namespace std;
    
    int n,v,w,ans=1;
    
    pair<char,int> f[1003];
    
    int main() {
    	scanf("%d %d %d\n",&n,&v,&w);
    	for(int h,m,i=1;i<=n;i++) {
    		scanf("%c-%d:%d\n",&f[i].first,&h,&m);
            f[i].second=h*60+m;
    	}
    	sort(f+1,f+1+n);
    	for(auto cur=1,i=2;i<=n;i++) {
            if(f[i].first!=f[i-1].first || i-cur>v || f[i].second>f[cur].second+w) {
                cur=i;
                ans++;
            }
    	}
    	printf("%d\n",ans);
    	return 0;
    }
    
    • 0
      @ 2024-5-14 9:13:56

      一定得AB开在一起吗、,不能分开开数组吗。。。

      Python

      from typing import List, Tuple
      
      n, v, w = map(int, input().split())
      
      pt: List[Tuple[str, int]] = []
      
      def strptime(hour: str, minute: str) -> int:
          return 60 * int(hour) + int(minute)
      
      for _ in range(n):
          info: str = input()
          time: int = strptime(*info[2:].split(':'))
          pt.append((info[0], time))
      
      pt.sort()
      
      car: int = 1
      man: int = 1
      cur : int = 1
      t: Tuple[str, int] = pt[0]
      
      for i in pt:
          if i[1] > t[1] + w or man >= v or i[0] != t[0]:
              t = i
              car += 1
              man = 1
          else:
              man += 1
      
      print(car)
      
      • 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;
        }
        
        • 1

        信息

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