Let's Chat

来源:互联网 发布:nodejs js-xlsx的文档 编辑:程序博客网 时间:2024/05/16 18:11
Let's Chat

Time Limit: 1 Second      Memory Limit: 65536 KB

ACM (ACMers' Chatting Messenger) is a famous instant messaging software developed by Marjar Technology Company. To attract more users, Edward, the boss of Marjar Company, has recently added a new feature to the software. The new feature can be described as follows:

If two users, A and B, have been sending messages to each other on the last m consecutive days, the "friendship point" between them will be increased by 1 point.

More formally, if user A sent messages to user B on each day between the (i - m + 1)-th day and the i-th day (both inclusive), and user B also sent messages to user A on each day between the (i - m + 1)-th day and the i-th day (also both inclusive), the "friendship point" between A and B will be increased by 1 at the end of the i-th day.

Given the chatting logs of two users A and B during n consecutive days, what's the number of the friendship points between them at the end of the n-th day (given that the initial friendship point between them is 0)?

Input

There are multiple test cases. The first line of input contains an integer T (1 ≤ T ≤ 10), indicating the number of test cases. For each test case:

The first line contains 4 integers n (1 ≤ n ≤ 109), m (1 ≤ m ≤ n), x and y (1 ≤ xy ≤ 100). The meanings of n and m are described above, while x indicates the number of chatting logs about the messages sent by A to B, and y indicates the number of chatting logs about the messages sent by B to A.

For the following x lines, the i-th line contains 2 integers lai and rai (1 ≤ lai ≤ rai ≤ n), indicating that A sent messages to B on each day between the lai-th day and the rai-th day (both inclusive).

For the following y lines, the i-th line contains 2 integers lbi and rbi (1 ≤ lbi ≤ rbi ≤ n), indicating that B sent messages to A on each day between the lbi-th day and the rbi-th day (both inclusive).

It is guaranteed that for all 1 ≤ i < xrai + 1 < lai + 1 and for all 1 ≤ i < yrbi + 1 < lbi + 1.

Output

For each test case, output one line containing one integer, indicating the number of friendship points between A and B at the end of the n-th day.

Sample Input

210 3 3 21 35 810 101 810 105 3 1 11 24 5

Sample Output

30

Hint

For the first test case, user A and user B send messages to each other on the 1st, 2nd, 3rd, 5th, 6th, 7th, 8th and 10th day. As m = 3, the friendship points between them will be increased by 1 at the end of the 3rd, 7th and 8th day. So the answer is 3.

题意:a和b互相发送消息,a和b在同一天都发送给对方消息,才有效,规定某一天的前m天a和b都互相发送消息了,那么称这一天为特殊的,求一共有几个特殊的天,如 1 2 3 4 5 6 都互发了消息,m为3 则 3 4 5 6 都是特殊的天,输出4.

输入:发送消息的最后一天,m,a发消息的次数,b发消息的此时

a第1次发消息的开始天和结束天

a第2次发消息的开始天和结束天

.

.

b第1次发消息的开始天和结束天

b第2次发消息的开始天和结束天

.

.

第i+1次的开始天>第i次的结束天(第i+1次的开始天有可能是第i次的结束天的后一天

#include<bits/stdc++.h>using namespace std;struct st{    int ks,js;};int main(){    int T;    scanf("%d",&T);    while(T--)    {        int n;        st a[210];        st b[210];        int t;        int la,lb;        int s=0;        scanf("%d%d%d%d",&n,&t,&la,&lb);        scanf("%d%d",&a[0].ks,&a[0].js);        int ta,tb;        ta=1;        tb=1;        for(int i=1;i<la;i++)        {            int k,j;            scanf("%d%d",&k,&j);            if(k==a[ta-1].js+1)                a[ta-1].js=j;            else                a[ta].ks=k,a[ta].js=j,ta++;        }        scanf("%d%d",&b[0].ks,&b[0].js);        for(int i=1;i<lb;i++)        {            int k,j;            scanf("%d%d",&k,&j);            if(k==b[tb-1].js+1)                b[tb-1].js=j;            else                b[tb].ks=k,b[tb].js=j,tb++;        }            int s1;        for(int i=0;i<ta;i++)            for(int j=0;j<tb;j++)            {            if(a[i].ks>=b[j].ks&&a[i].js>=b[j].js)                s1=b[j].js-a[i].ks;            else if(a[i].ks>=b[j].ks&&a[i].js<=b[j].js)                s1=a[i].js-a[i].ks;            else if(a[i].ks<=b[j].ks&&a[i].js<=b[j].js)                s1=a[i].js-b[j].ks;            else if(a[i].ks<=b[j].ks&&a[i].js>=b[j].js)                s1=b[j].js-b[j].ks;            s1++;            if(s1>=t)                s=s+s1-t+1;            }        printf("%d\n",s);    }    return 0;}


0 0
原创粉丝点击