1 条题解

  • 0
    @ 2025-4-14 18:45:31

    C++ :

    #include <stdio.h>
    #include <queue>
    #include <algorithm>
    using namespace std;
    struct stop
    {
    	int zhan;
    	int you;
    }s[10005];
    int n,p,l;
    priority_queue <int> que;
    bool comp(stop s1,stop s2)
    {
    	return s1.zhan<s2.zhan;
    }
    int solve()
    {
    	int ans=0 ,pos=0,tank=p;
    	for(int i=0;i<n;i++)
    	{
    		int d=s[i].zhan-pos;
    		while(tank-d<0)
    		{
    			if(que.empty())
    			{
    				return -1;
    			}
    			tank+=que.top();
    			que.pop();
    			ans++;
    		}
    		tank-=d;
    		pos=s[i].zhan;
    		que.push(s[i].you);
    	}
    	return ans;
    }
    int main()
    {
    	int i,a;
         while(scanf("%d",&n)!=EOF)
         {
         	for(i=0;i<n;i++)
         	{
         		scanf("%d%d",&s[i].zhan,&s[i].you);
         	}
         	scanf("%d%d",&l,&p);
         	for(i=0;i<n;i++)
         	{
         		s[i].zhan=l-s[i].zhan;
         	}
         		s[n].zhan=l;
         	s[n++].you=0;
         	while(!que.empty())
         	que.pop();
         sort(s,s+n,comp);
         a=solve();
         printf("%d\n",a);
     }
     return 0;
    }
    
    • 1

    信息

    ID
    3578
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者