1 条题解
-
0
这道题是一道模拟题,思路挺简单,但是代码是真**的多(话说我是第一个通过这道题的诶)(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
- 上传者