View Code of Problem 6

#include <stdio.h>

typedef struct node
{
    int l,r;
}node;

int main(void)
{
    int t,n;
    scanf("%d",&t);
    node xj[50000];
    while(t--)
    {
        scanf("%d",&n);
        int i,j = 0,k = 0,maxlen = 0,sum;
        for(i = 0;i < n;i++)
        {
            scanf("%d%d",&xj[i].l,&xj[i].r);
            if(maxlen < xj[i].r - xj[i].l)
                maxlen = xj[i].r - xj[i].l;
        }
        sum = xj[n - 1].r - xj[0].l;
        if(sum % maxlen != 0)
            printf("NO\n");
        else
        {
            int max = sum / maxlen,index = 0;
            int temp = 0;
            while(1)
            {
               // printf("2\n");
                for(i = 1;temp != sum && i <= max;i++)
                {
                    //printf("1\n");
                    if(temp + i * maxlen == xj[k].l)
                    {
                        temp += i * maxlen;
                       // printf("1temp = %d",temp);
                        break;
                    }
                    else if(temp + i * maxlen == xj[k].r || temp + i * maxlen == xj[k + 1].l)
                    {
                        temp += i * maxlen;
                        if(temp == sum)
                        {
                            index = 2;
                        }
                        //printf("2temp = %d",temp);
                        k++;
                        break;
                    }
                }
                if(i == max || index == 2)
                    break;
            }
            if(i == max)
                printf("NO\n");
            else if(index == 2)
                printf("YES\n");
            //else
               // printf("index = %d\n",index);
        }
    }
    return 0;
}

Double click to view unformatted code.


Back to problem 6