这题的主要思路:用数组模拟牛棚,有牛置1,否则置0。
一共有M个木板拦牛,木板从第一个有牛的棚拦起,到最后一个有牛的棚停止。我们只需要从这个区间找到M-1个连续的没有牛的区间,然后减掉它就是答案。
/*
ID: 13913351
LANG: C++
TASK: barn1
*/
#include<iostream>
#include<fstream>
#include<algorithm>
#include<string.h>
using namespace std;
ifstream cin;
ofstream cout;
cin.open("barn1.in");
cout.open("barn1.out");
int a[210];
int flag[53];
int M,S,C;
int min=200;
int max=-1;
bool cmp(int a,int b)
{
return a>b;
}
int main()
{
cin>>M>>S>>C;
memset(a,0,sizeof(a));
int i,j;
for(i=1;i<=C;i++)
{
cin>>j;
a[j]=1;//该位置有牛
if(min>j)
{
min=j;
}
if(max<j)
{
max=j;
}
}
j=0;
int tag;
memset(flag,0,sizeof(flag));
for(i=min;i<=max;i++)
{
if(a[i]==0)
{
tag=1;
flag[j]++;
}
if(tag==1&&a[i]!=0)
{
tag=0;
j++;
}
}
sort(flag,flag+j,cmp);
int sum=max-min+1;
for(i=0;i<M-1;i++)
{
sum-=flag[i];
}
cout<<sum<<endl;
return 0;
}