View Code of Problem 6

#include <stdio.h>
#include <stdlib.h>

int l[105], r[105];
bool a[50005];

bool good(int min, int n)
{
	for (int i = 0; i <= min; i++)
	{
		for (int j = 1; j < 50001; j++)
		{
			int count = 0;
			for (int li = 1; i + j * li < 50001; li++)
			{
				int l1 = i + j * (li - 1);
				int r1 = i + j * li;
				int c = 0;
				for (int k = 0; k < n; k++)
				{
					if (l1 <= l[k] && r1 >= r[k])
						c++;
				}
				if (c == 1)
				{
					count++;
				}
				else
				{
					break;
				}
			}
			if (count == n)
			{
				puts("YES");
				return true;
			}

		}
	}

	return false;
}

int main()
{
	int t, n;
	scanf("%d", &t);
	while (t--)
	{
		for (int i = 0; i < 50005; i++)
		{
			a[i] = false;
		}

		scanf("%d", &n);
		int min = 50005, max;
		for (int i = 0; i < n; i++)
		{
			scanf("%d%d", &l[i], &r[i]);
			if (l[i] < min)
				min = l[i];
		}
		bool con = true;
		for (int i = 0; i < n && con; i++)
		for (int j = 0; j < n; j++)
		{
			if (i != j)
			{
				if (r[i] <= l[j] || r[j] <= l[i]) {}
				else { 
					con = false; 
					break;
				}
			}
		}
		if (con == false)
		{
			puts("NO");
			continue;
		}

		if (!good(min, n))
		{
			puts("NO");
		}
	}
}

Double click to view unformatted code.


Back to problem 6