1 条题解

  • 0
    @ 2023-7-31 17:45:10

    这道题是一道模拟题,思路挺简单,但是代码是真**的多(话说我是第一个通过这道题的诶)(AC100题) (2023年7月31日,地点:学校机房)

    (注意看读入数据的含义,同时要注意数组要开够,开到10^5)

    下面是代码

    #include<cstdio>
    using namespace std;
    int quene1[100100];//队列1储存时间 
    int quene2[100100];//队列2储存票价
    int left=1,right=0;//队列的头和尾 
    int n,price,t,che;
    long long int zongjia;//记录总价 
    int time;//更新当前时间 
    bool used[100100];//记录队列中的票是否用过 
    
    int main()
    {
    	scanf("%d",&n);
    	for (int i=1;i<=n;i++)
    	{
    		scanf("%d%d%d",&che,&price,&t);//读取
    		//分类讨论
    		if (che==0)//如果是地铁
    		{
    			quene1[++right]=t;//开始坐地铁的时间入队
    			quene2[right]=price;//此趟地铁的票价入队
    			zongjia=zongjia+price;//总价更新 
    			used[right]=false;//标记还没有用过 
    		} 
    		if (che==1)//如果是公交车
    		{
    			while (t-quene1[left]>45)//如果时间超出的话 
    			{
    				left++;//队首的票出队 
    			} 
    			bool canuse=false;//暂时标记为不能使用 
    			for (int i=left;i<=right;i++)//遍历所有的票,按照时间顺序 
    			{
    				if (used[i]==false&&quene2[i]>=price)//如果票没有用过并且票价可用
    				{
    					used[i]=true;//标记已经使用 
    					canuse=true;//标记可以使用
    					break;//结束循环 
    				} 
    			} 
    			if (canuse==false)//如果不能使用
    			{
    				zongjia+=price;//总花费更新 
    			} 
    		} 
    		//printf("%d:%d\n",i,zongjia);
    	}
    	printf("%lld",zongjia);
    	return 0;
    }
    
    • 1

    信息

    ID
    268
    时间
    1000ms
    内存
    256MiB
    难度
    9
    标签
    递交数
    15
    已通过
    3
    上传者