HihoCoder1670 : 比赛日程安排([Offer收割]编程练习赛41)(模拟)

Posted ---学习ing---

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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");
    }
} 

 

以上是关于HihoCoder1670 : 比赛日程安排([Offer收割]编程练习赛41)(模拟)的主要内容,如果未能解决你的问题,请参考以下文章

hihocoder #1468 : 2-SAT·hihoCoder新春晚会 2-SAT

hiho一下第134周 1468 : 2-SAT·hihoCoder新春晚会

Py4JJavaError:调用 o1670.collectToPython 时出错

Hihocoder #1479 : 三等分 树形DP

编程练习赛41:题目1 : 比赛日程安排

比赛日程安排