HihoCoder1670 : 比赛日程安排([Offer收割]编程练习赛41)(模拟)
描述
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[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; int a[60][1010]; 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=1;i<=n;i++) a[i][0]=0; for(i=1;i<=m;i++) { scanf("%d-%d%d%d",&mon,&day,&x,&y); date=0; for(j=1;j<mon;j++) date+=d[j]; date+=day; a[x][++a[x][0]]=date; a[y][++a[y][0]]=date; } for(i=1;i<=n;i++) sort(a[i]+1,a[i]+a[i][0]+1); for(i=1;i<=n;i++) for(j=2;j<=a[i][0];j++) if(a[i][j]-a[i][j-1]<2) Flag=false; if(Flag) printf("YES\n"); else printf("NO\n"); } }
It is your time to fight!