链接:点击打开链接
题意: 一共有x-1轮CF(DIV1和DIV2同时进行时,DIV1的编号比DIV2的编号大1,DIV2可以单独举行,DIV1必须和DIV2同时举行),但是Sereja(他只能参加DIV2)只记得他参加了k轮,有k行数据,每行数据有两种形式分别为: 1 num2 num1代表DIV1和DIV2同时在num2和num1轮举行,2 num2代表DIV2在num2轮举行,问他最少和最多错过几场比赛(在第二个样例我们有未使用的轮次
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
int main(){
int x,k,i,j,num,num_temp,sum,sum_temp;
int date[5000];
while(scanf("%d%d",&x,&k)!=EOF){
memset(date,0,sizeof(date));
while(k--){
scanf("%d",&num);
if(num==2){
scanf("%d",&num);
date[num]=2;
}
else{
scanf("%d%d",&num,&num_temp);
date[num]=2,date[num_temp]=1;
}
}
sum=sum_temp=0;
for(i=1;i<x;i++)
if(!date[i])
sum++; //DIV2可以单独出现,因此0的个数就是最大值
for(i=2;i<x;i++)
if(date[i]==0&&date[i-1]==0){ //算出可能出现的DIV1的次数
date[i]=1,date[i-1]=2;
sum_temp++;
}
printf("%d %d\n",sum-sum_temp,sum);
}
return 0;
}
有1.6.7最大可能错过三轮,但是第6轮不确定是DIV1还是DIV2因此最少是两轮)
代码: