一道橙题写了八十行还错了。。
查看原帖
一道橙题写了八十行还错了。。
372653
yaozhijiandeyeye楼主2020/10/30 18:52
#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";
}
2020/10/30 18:52
加载中...