题解 P7189 【[COCI2007-2008#6] PARKING】

· · 题解

在题解区看到一大群大佬的做法,然后蒟蒻就迷茫,一道红题至于吗,所以我决定用个最简单的:按照题目模拟。
我们用一个图来解释杨样例一:

首先是1-2,一辆车,2-3,两辆,3-5,...

然后我们要注意到他的最先开始的和最后结束的时间,在没有车(0)时收费为0,判断该时段有几辆车,然后收费。
所以可以:

struct car{
    int begn; 
    int endd;
}k[15];//有struct为何不用呢,多香!

用这一段:

for(int i=test;i<=teed;i++)
    {
        int carliang=0;//车量
        for(int j=1;j<=3;j++)
        {
            if(i>=k[j].begn&&i<k[j].endd)//有新车
                carliang++;//车量+1
        }
        ans+=carliang*price[marx];
    }

整体代码:

#include<bits/stdc++.h>//万能头好习惯
using namespace std;
struct car{//存储开始与结束时间
    int begn; 
    int endd;
}k[15];
int price[15];
int test=999999,teed=0;//开始与结束 
inline int read()//快读
{
   int s=0,w=1;
   char ch=getchar();//最快的输入方式
   while(ch<'0'||ch>'9')
   {
     if(ch=='-')w=-1;
     ch=getchar();
   }
   while(ch>='0'&&ch<='9') 
     s=s*10+ch-'0',ch=getchar();
   return s*w;
} 
int main()
{
    for(int i=1;i<=3;i++)
        price[i]=read();
    price[0]=0;
    for(int i=1;i<=3;i++)
    {
        k[i].begn=read();k[i].endd=read();
        if(k[i].begn<=test) test=k[i].begn;
        if(k[i].endd>=teed) teed=k[i].endd;
    }
    int ans=0;
    for(int i=test;i<=teed;i++)
    {
        int carliang=0;//车量
        for(int j=1;j<=3;j++)
        {
            if(i>=k[j].begn&&i<k[j].endd)//有新车
                carliang++;//车量+1
        }
        //cout<<carliang<<endl;
        ans+=carliang*price[carliang];
    }
    //判断与收费全过程
    printf("%d",ans);
    return 0;
}

结束了吗?

没有

最后提醒几个注意点: