描述
H国编程联赛中有N只队伍,编号1~N。 他们计划在2018年一共进行M场一(队)对一(队)的比赛。
为了让参赛队员能得到充分的休息,联赛组委会决定:每支队伍连续两场比赛之间至少间隔一天。也就是如果A队1月1日参加了一场比赛,那么下一场比赛最早安排在1月3日。
给定M场比赛的时间和参赛的两支队伍,请你判断这个日程安排是否可行。
输入
第一行包含一个整数T,代表测试数据组数。(1 ≤ T ≤ 10)
对于每组数据,第一行包含两个整数N和M。(1 ≤ N ≤ 50, 1 ≤ M ≤ 1000)
以下M行每行描述一场比赛,包含比赛日期(格式MM-DD),以及2支参赛队伍的编号。
输出
对于每组数据输出YES或者NO,代表日程安排是否可行。
样例输入
2
3 3
01-01 1 2
01-03 1 3
01-05 2 3
4 4
02-01 4 3
01-30 4 1
01-31 1 2
01-30 2 3
样例输出
YES
NO
模拟即可。
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int d[]={,,,,,,,,,,,,};
int a[][];
int main()
{
int T,n,m,i,j,x,y,date,mon,day;bool Flag;
scanf("%d",&T);
while(T--){
Flag=true;
scanf("%d%d",&n,&m);
for(i=;i<=n;i++) a[i][]=;
for(i=;i<=m;i++) {
scanf("%d-%d%d%d",&mon,&day,&x,&y);
date=;
for(j=;j<mon;j++) date+=d[j];
date+=day;
a[x][++a[x][]]=date;
a[y][++a[y][]]=date;
}
for(i=;i<=n;i++) sort(a[i]+,a[i]+a[i][]+);
for(i=;i<=n;i++)
for(j=;j<=a[i][];j++)
if(a[i][j]-a[i][j-]<) Flag=false;
if(Flag) printf("YES\n");
else printf("NO\n");
}
}