题解 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;
}
结束了吗?
没有
最后提醒几个注意点:
- 第
end_i 分钟不收费。 - 一定注意没车时收费为0。
一定要点赞的。