2 条题解
-
2
下面是完整的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
#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
- 上传者