2 条题解

  • 2
    @ 2024-10-8 20:32:06

    下面是完整的AC代码 如果有不清楚的地方请借助代码注释理解

    #include<bits/stdc++.h>// 引入 C++ 万能头 
    using namespace std;
    const int Max=100005;
    //建立结构体 
    struct Tickey
    {
    	int dollar,use,time;
    }q[Max];
    
    int main()
    {
    	int head=0,n,tail=0,cost=0;
    	cin >> n;
    	for(int i = 0;i < n;i++)
    	{
    		int type,time,dollar;
    		cin >> type >> dollar >> time;//输入
    		//判断交通工具类型 
    		if(type==0)
    		{
    			cost += dollar;
    			q[tail].time+=time + 45;//过期时间=购买时间+45分钟 
    			q[tail++].dollar+=dollar;//由于是地铁,无法优惠,直接购买 
    		}
    		else
    		{
    			//先用一个循环把过期的票扔掉 
    			while(head < tail&&q[head].time<time)
    			{
    				head++;
    			}
    			bool find=false;
    			for(int j=head;j<tail;j++)
    			{
    				//如果优惠票合适,标记此票用过,标记已使用优惠票 
    				if(q[j].dollar>=dollar&&q[j].use==0)
    				{
    					q[j].use=1;
    					find=true;
    					break;
    				}
    			}
    			//如果没有合适的优惠票,就自己掏钱买吧 
    			if(!find)
    			{
    				cost+=dollar;
    			}
    		}
    	}
    	cout << cost;
    	return 0;
     } 
    

    写题解不易,还望各位点个赞!

    • 1
      @ 2024-7-25 14:52:25
      #include<bits/stdc++.h>
      using namespace std;
      int opt,n,t[100001],p[100001],ans,top,m=1,yh[100001],sj[100001],k;
      bool r[100001];
      int main(){
      	cin>>n;
      	for(int i=1;i<=n;i++){
      		cin>>opt>>p[i]>>t[i];
      		if(opt==0) yh[++top]=p[i],sj[top]=t[i],ans+=p[i];
      		else{
      			k=0;
      			for(int j=m;j<=top;j++){
      				if(r[j]) continue;
      				if(t[i]-sj[j]>45) m=j;
      				else if(yh[j]>=p[i]){
      					k=j;
      					r[k]=true;
      					break;
      				}
      			}
      			if(!k) ans+=p[i];
      		}
      	}///test
      	cout<<ans;
      }
      
      
      • 1

      信息

      ID
      1795
      时间
      1000ms
      内存
      256MiB
      难度
      5
      标签
      递交数
      35
      已通过
      14
      上传者