CSP 2018年9月第2题 买菜
-
这题的重点 就是要清楚地分析 两个时间段之间的对应关系
要清晰的分析出 相交、包含、相离的情况
需要我们在纸上画图,这样比较好分析
-
其次 要建立结构体数组 ,从而来存放读入的数据
-
还有就是 结果感觉 大概是10^9 的样子,因此 把设置为 long long 类型
下面是 源码
#include<bits/stdc++.h>
using namespace std;
struct Duration{
int s,t;
}Dura1[2010],Dura2[2010];
long long ans = 0;
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
cin>>Dura1[i].s>>Dura1[i].t;
for(int i=1;i<=n;i++)
cin>>Dura2[i].s>>Dura2[i].t;
int i=1;
int j=1;
while(i<=n && j<=n)
{
if(Dura1[i].t<=Dura2[j].s)
{
i++;
continue;
}
else if(Dura1[i].t>=Dura2[j].s
&& Dura1[i].t<=Dura2[j].t
&& Dura1[i].s <=Dura2[j].s)
{
ans +=Dura1[i].t - Dura2[j].s;
i++;
continue;
}
else if(Dura1[i].s<=Dura2[j].s
&& Dura1[i].t>=Dura2[j].t)
{
ans +=Dura2[j].t - Dura2[j].s;
j++;
continue;
}
else if(Dura1[i].s>=Dura2[j].s
&& Dura1[i].s<=Dura2[j].t
&& Dura1[i].t>=Dura2[j].t)
{
ans +=Dura2[j].t - Dura1[i].s;
j++;
continue;
}
else if(Dura1[i].s>=Dura2[j].t)
{
j++;
continue;
}
else if(Dura1[i].s>=Dura2[j].s
&& Dura1[i].t<=Dura2[j].t)
{
ans +=Dura1[i].t - Dura1[i].s;
i++;
continue;
}
}
cout<<ans;
return 0;
}