社区讨论
一道橙题写了八十行还错了。。
P5661[CSP-J 2019] 公交换乘参与者 4已保存回复 3
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 3 条
- 当前快照
- 1 份
- 快照标识符
- @lod1f8sd
- 此快照首次捕获于
- 2023/10/30 23:11 2 年前
- 此快照最后确认于
- 2023/11/05 09:30 2 年前
CPP
#include<bits/stdc++.h>
using namespace std;
bool pd[100001];//0 代表地铁,1 代表公交车
int price[100001],Time[100001],t[100001],ans=0;
struct node{
int youhui,timenum,id,beiyongtimenum;
}a[100001];
bool pdf(int n)//用来弄哪些优惠票能使用
{
int flag=0,idn;//用来判断有没有优惠票
for(int i=1;i<=n;i++)
{
if(a[i].youhui)//存在优惠票
{
flag=1;
idn=i;//用来记录最近时间的下标
}
}
if(!flag)//没有优惠票就返回0
{
return 0;
}
else
{
if(a[idn].timenum>45)//特判,如果最近的时间都超过了,那么直接标记返回0
{
for(int i=1;i<=n;i++)
{
a[i].youhui=false;//优惠票无用了
}
return 0;
}
else//还有希望免票
{
for(int i=1;i<=n;i++)
{
if(a[i].youhui>price[n])//希望来了
{
a[i].youhui=false;//使用优惠票
return 1;//可以使用优惠票
}
}
return 0;//希望破灭
}
}
}
int main()
{
int n;//代表乘车记录的数量
memset(t,0,sizeof(t));
memset(Time,0,sizeof(Time));
cin>>n;
int i;
for(i=1;i<=n;i++)
{
cin>>pd[i]>>price[i]>>Time[i];
}
for(i=1;i<=n;i++)
{
a[i].youhui=false;
t[i]=Time[i]-t[i-1];
if(!pd[i])
{
ans+=price[i];//如果是坐地铁,那就老老实实花钱吧!
a[i].youhui=price[i];//能得到优惠票
a[i].id=i;//记录获得优惠票的下标
a[i].beiyongtimenum=Time[i]-Time[i-1];
for(int j=1;j<=i;j++)//更新优惠票的时间
{
a[j].timenum=a[i].timenum-a[j].beiyongtimenum;//计算出时间
}
continue;
}
if(pd[i]&&pdf(i))//如果是公交车且有优惠票
{
continue;
}
else//没有优惠票或者全都过期了
{
ans+=price[i];//希望破灭
}
}
cout<<ans<<"\n";
}
回复
共 3 条回复,欢迎继续交流。
正在加载回复...