题目大意:两个人要聊天,一个人有固定的时间段,另一个人有一个浮动的时间段,会根据起床时间进行在[l,r]段内进行顺延。问有多少个时间段聊天。
解题思路:直接暴力求解,O(n^3)都能够。详见code。
题目来源:http://codeforces.com/problemset/problem/469/B
code:
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int MAXN = 50+5;
int ab[MAXN][2],cd[MAXN][2];
int p,q,l,r,ans,flag;
int main(){
freopen("input.txt","r",stdin);
while(~scanf("%d%d%d%d",&p,&q,&l,&r)){
ans=0;
for(int i=0;i<p;++i)
scanf("%d%d",&ab[i][0],&ab[i][1]);
for(int i=0;i<q;++i)
scanf("%d%d",&cd[i][0],&cd[i][1]);
for(int i=l;i<=r;++i){
flag=0;
for(int j=0;j<p;++j){
for(int k=0;k<q;++k){
int a=ab[j][0];
int b=ab[j][1];
int c=cd[k][0]+i;
int d=cd[k][1]+i;
if((c>=a && c<=b)||
(d>=a && d<=b)||
(a>=c && a<=d)){
ans++;
flag=1;
break;
}
}
if(flag)break;
}
}
printf("%d\n",ans);
}
return 0;
}