链接:http://acm.zju.edu.cn/onlinejudge/showContestProblem.do?problemId=5580
题意:给出 n,m,x,y,其中,n是最大天数,给出x,y段聊天记录,其中 x 与 y 段区间中,重叠部分即为连续聊天长度,当连续聊天长度大于等于 m 天后,友谊值为聊天长度- m + 1
思路:由于给出的x,y的值不大,而 n 的值很大,那么每段区间的左右值可以用数组来存,循环判断每两段区间的重叠区间的值即可。
代码:
#include <iostream>
using namespace std;
typedef long long LL;
int main()
{
int t;
cin>>t;
while(t--)
{
LL n,a[300][2],b[300][2];
int m,x,y;
cin>>n>>m>>x>>y;
for(int i=0; i<x; i++)
cin>>a[i][0]>>a[i][1];
for(int i=0; i<y; i++)
cin>>b[i][0]>>b[i][1];
int sum=0;
for(int i=0; i<x; i++)
{
if((a[i][1]-a[i][0]+1)<m)
continue;
for(int j=0; j<y; j++)
{
if((b[j][1]-b[j][0]+1)<m)
continue ;
int xiao=max(a[i][0],b[j][0]);
int da=min(a[i][1],b[j][1]);
if(da-xiao+1>=m)
{
sum+=da-xiao+1-m+1;
}
}
}
cout<<sum<<endl;
}
return 0;
}